Index: test/webkit/fast/js/numeric-escapes-in-string-literals.js |
diff --git a/test/webkit/dfg-put-by-id-prototype-check.js b/test/webkit/fast/js/numeric-escapes-in-string-literals.js |
similarity index 54% |
copy from test/webkit/dfg-put-by-id-prototype-check.js |
copy to test/webkit/fast/js/numeric-escapes-in-string-literals.js |
index a8b61374ef5af987f1741f22c72db35cfa69c872..8ecd70b7f9e218977619f5453f12b9236f3c602c 100644 |
--- a/test/webkit/dfg-put-by-id-prototype-check.js |
+++ b/test/webkit/fast/js/numeric-escapes-in-string-literals.js |
@@ -22,31 +22,48 @@ |
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
description( |
-"Tests that the DFG CFA is not overzealous in removing prototype structure checks for put_by_id transitions." |
+"Test numeric escapes in string literals - https://bugs.webkit.org/show_bug.cgi?id=51724" |
); |
-function foo(a, b) |
+function test(_stringLiteral, _nonStrictResult, _strictResult) |
{ |
- a.f = b; |
+ stringLiteral = '"' + _stringLiteral + '"'; |
+ nonStrictResult = _nonStrictResult; |
+ shouldBe("eval(stringLiteral)", "nonStrictResult"); |
+ |
+ stringLiteral = '"use strict"; ' + stringLiteral; |
+ if (_strictResult) { |
+ strictResult = _strictResult; |
+ shouldBe("eval(stringLiteral)", "strictResult"); |
+ } else |
+ shouldThrow("eval(stringLiteral)"); |
} |
-var Empty = ""; |
+// Tests for single digit octal and decimal escapes. |
+// In non-strict mode 0-7 are octal escapes, 8-9 are NonEscapeCharacters. |
+// In strict mode only "\0" is permitted. |
+test("\\0", "\x00", "\x00"); |
+test("\\1", "\x01"); |
+test("\\7", "\x07"); |
+test("\\8", "8"); |
+test("\\9", "9"); |
-function Foo() { |
-} |
+// Tests for multi-digit octal values outside strict mode; |
+// Octal literals may be 1-3 digits long. In strict more all multi-digit sequences are illegal. |
+test("\\00", "\x00"); |
+test("\\000", "\x00"); |
+test("\\0000", "\x000"); |
-var stuff; |
+test("\\01", "\x01"); |
+test("\\001", "\x01"); |
+test("\\0001", "\x001"); |
-for (var i = 0; i < 1000; ++i) { |
- if (i >= 900) |
- Foo.prototype.__defineSetter__("f", function(value) { stuff = value; }); |
+test("\\10", "\x08"); |
+test("\\100", "\x40"); |
+test("\\1000", "\x400"); |
- var o = new Foo(); |
- eval(Empty + "foo(o, i)"); |
- if (i >= 900) { |
- shouldBe("stuff", "" + i); |
- shouldBe("o.f", "" + (void 0)); |
- } else |
- shouldBe("o.f", "" + i); |
-} |
+test("\\19", "\x019"); |
+test("\\109", "\x089"); |
+test("\\1009", "\x409"); |
+test("\\99", "99"); |