Implement String.prototype.trim
authorLars Knoll <lars.knoll@digia.com>
Mon, 21 Jan 2013 12:46:39 +0000 (13:46 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Mon, 21 Jan 2013 12:48:43 +0000 (13:48 +0100)
Change-Id: I6bbe52f77221a0e5bd8d9f275983a0513c7c50e0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
qv4ecmaobjects.cpp
qv4ecmaobjects_p.h
tests/TestExpectations

index 5024f86..8ce8bce 100644 (file)
@@ -615,6 +615,7 @@ void StringPrototype::init(ExecutionContext *ctx, const Value &ctor)
     defineDefaultProperty(ctx, QStringLiteral("toLocaleLowerCase"), method_toLocaleLowerCase);
     defineDefaultProperty(ctx, QStringLiteral("toUpperCase"), method_toUpperCase);
     defineDefaultProperty(ctx, QStringLiteral("toLocaleUpperCase"), method_toLocaleUpperCase);
+    defineDefaultProperty(ctx, QStringLiteral("trim"), method_trim);
 }
 
 QString StringPrototype::getThisString(ExecutionContext *ctx)
@@ -1054,6 +1055,26 @@ Value StringPrototype::method_fromCharCode(ExecutionContext *ctx)
     return Value::fromString(ctx, str);
 }
 
+Value StringPrototype::method_trim(ExecutionContext *ctx)
+{
+    if (ctx->thisObject.isNull() || ctx->thisObject.isUndefined())
+        __qmljs_throw_type_error(ctx);
+
+    QString s = __qmljs_to_string(ctx->thisObject, ctx).stringValue()->toQString();
+    const QChar *chars = s.constData();
+    int start, end;
+    for (start = 0; start < s.length(); ++start) {
+        if (!chars[start].isSpace() && chars[start].unicode() != 0xfeff)
+            break;
+    }
+    for (end = s.length() - 1; end >= start; --end) {
+        if (!chars[end].isSpace() && chars[end].unicode() != 0xfeff)
+            break;
+    }
+
+    return Value::fromString(ctx, QString(chars + start, end - start + 1));
+}
+
 //
 // Number object
 //
index a2726c7..aaef393 100644 (file)
@@ -122,6 +122,7 @@ struct StringPrototype: StringObject
     static Value method_toUpperCase(ExecutionContext *ctx);
     static Value method_toLocaleUpperCase(ExecutionContext *ctx);
     static Value method_fromCharCode(ExecutionContext *ctx);
+    static Value method_trim(ExecutionContext *ctx);
 };
 
 struct NumberCtor: FunctionObject
index ee19fde..87f9f96 100644 (file)
@@ -520,7 +520,6 @@ S15.1.3.2_A5.3 failing
 15.2.3.3-4-13 failing
 15.2.3.3-4-164 failing
 15.2.3.3-4-51 failing
-15.2.3.3-4-82 failing
 15.2.3.3-4-9 failing
 15.2.3.3-4-90 failing
 15.2.3.6-2-17-1 failing
@@ -537,7 +536,6 @@ S15.1.3.2_A5.3 failing
 15.2.3.6-4-300-1 failing
 15.2.3.6-4-360-3 failing
 15.2.3.6-4-360-7 failing
-15.2.3.6-4-621 failing
 15.2.3.7-6-a-110 failing
 15.2.3.7-6-a-280 failing
 15.2.3.7-6-a-286 failing
@@ -775,134 +773,11 @@ S15.5.4.15_A1_T2 failing
 S15.5.4.15_A1_T7 failing
 S15.5.4.15_A1_T8 failing
 S15.5.4.15_A1_T9 failing
-15.5.4.20-0-1 failing
-15.5.4.20-0-2 failing
-15.5.4.20-1-3 failing
-15.5.4.20-1-4 failing
-15.5.4.20-1-5 failing
-15.5.4.20-1-6 failing
-15.5.4.20-1-7 failing
-15.5.4.20-1-8 failing
-15.5.4.20-1-9 failing
-15.5.4.20-2-1 failing
-15.5.4.20-2-10 failing
-15.5.4.20-2-11 failing
-15.5.4.20-2-12 failing
-15.5.4.20-2-13 failing
-15.5.4.20-2-14 failing
-15.5.4.20-2-15 failing
-15.5.4.20-2-16 failing
-15.5.4.20-2-17 failing
-15.5.4.20-2-18 failing
-15.5.4.20-2-19 failing
-15.5.4.20-2-2 failing
-15.5.4.20-2-20 failing
-15.5.4.20-2-21 failing
-15.5.4.20-2-22 failing
-15.5.4.20-2-23 failing
-15.5.4.20-2-24 failing
-15.5.4.20-2-25 failing
-15.5.4.20-2-26 failing
-15.5.4.20-2-27 failing
-15.5.4.20-2-28 failing
-15.5.4.20-2-29 failing
-15.5.4.20-2-3 failing
-15.5.4.20-2-30 failing
-15.5.4.20-2-31 failing
-15.5.4.20-2-32 failing
-15.5.4.20-2-33 failing
-15.5.4.20-2-34 failing
-15.5.4.20-2-35 failing
-15.5.4.20-2-36 failing
-15.5.4.20-2-37 failing
-15.5.4.20-2-38 failing
-15.5.4.20-2-39 failing
-15.5.4.20-2-4 failing
-15.5.4.20-2-40 failing
-15.5.4.20-2-41 failing
-15.5.4.20-2-42 failing
-15.5.4.20-2-43 failing
-15.5.4.20-2-44 failing
-15.5.4.20-2-45 failing
-15.5.4.20-2-46 failing
-15.5.4.20-2-47 failing
-15.5.4.20-2-49 failing
-15.5.4.20-2-5 failing
-15.5.4.20-2-50 failing
-15.5.4.20-2-51 failing
-15.5.4.20-2-6 failing
-15.5.4.20-2-7 failing
-15.5.4.20-2-8 failing
-15.5.4.20-2-9 failing
-15.5.4.20-3-1 failing
-15.5.4.20-3-10 failing
-15.5.4.20-3-11 failing
-15.5.4.20-3-12 failing
-15.5.4.20-3-13 failing
-15.5.4.20-3-14 failing
-15.5.4.20-3-2 failing
-15.5.4.20-3-3 failing
-15.5.4.20-3-4 failing
-15.5.4.20-3-5 failing
-15.5.4.20-3-6 failing
-15.5.4.20-3-7 failing
-15.5.4.20-3-8 failing
-15.5.4.20-3-9 failing
 15.5.4.20-4-1 failing
 S15.5.4.5_A1_T10 failing
 S15.5.4.6_A1_T10 failing
 S15.5.4.7_A1_T10 failing
 S15.5.4.7_A1_T11 failing
-15.5.4.20-4-10 failing
-15.5.4.20-4-11 failing
-15.5.4.20-4-12 failing
-15.5.4.20-4-13 failing
-15.5.4.20-4-14 failing
-15.5.4.20-4-16 failing
-15.5.4.20-4-18 failing
-15.5.4.20-4-19 failing
-15.5.4.20-4-2 failing
-15.5.4.20-4-20 failing
-15.5.4.20-4-21 failing
-15.5.4.20-4-22 failing
-15.5.4.20-4-24 failing
-15.5.4.20-4-27 failing
-15.5.4.20-4-28 failing
-15.5.4.20-4-29 failing
-15.5.4.20-4-3 failing
-15.5.4.20-4-30 failing
-15.5.4.20-4-32 failing
-15.5.4.20-4-34 failing
-15.5.4.20-4-35 failing
-15.5.4.20-4-36 failing
-15.5.4.20-4-37 failing
-15.5.4.20-4-38 failing
-15.5.4.20-4-39 failing
-15.5.4.20-4-4 failing
-15.5.4.20-4-40 failing
-15.5.4.20-4-41 failing
-15.5.4.20-4-42 failing
-15.5.4.20-4-43 failing
-15.5.4.20-4-44 failing
-15.5.4.20-4-45 failing
-15.5.4.20-4-46 failing
-15.5.4.20-4-47 failing
-15.5.4.20-4-48 failing
-15.5.4.20-4-49 failing
-15.5.4.20-4-5 failing
-15.5.4.20-4-50 failing
-15.5.4.20-4-51 failing
-15.5.4.20-4-52 failing
-15.5.4.20-4-53 failing
-15.5.4.20-4-54 failing
-15.5.4.20-4-55 failing
-15.5.4.20-4-56 failing
-15.5.4.20-4-57 failing
-15.5.4.20-4-58 failing
-15.5.4.20-4-59 failing
-15.5.4.20-4-6 failing
-15.5.4.20-4-60 failing
-15.5.4.20-4-8 failing
 S15.5.4.4_A1_T10 failing
 S15.5.4.8_A1_T10 failing
 S15.5.4.8_A1_T12 failing
@@ -1093,4 +968,4 @@ S15.4.4.4_A1_T2 failing
 
 15.4.4.21-8-b-iii-1-6 failing
 15.12.3_4-1-1
-15.12.3_4-1-3
+15.12.3_4-1-3
\ No newline at end of file