From bd3d160ba1e52b66e352c90633bf7f42139e02a6 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Thu, 11 Jun 2015 12:00:29 -0400 Subject: [PATCH 1/6] Reorganize existing tests --- .../cache-differing-expressions-eval.js} | 0 ...ache-differing-expressions-new-function.js} | 0 .../cache-differing-expressions.js} | 0 .../cache-differing-raw-strings.js} | 0 .../cache-differing-string-count.js} | 0 .../cache-identical-source-eval.js} | 0 .../cache-identical-source-new-function.js} | 0 .../cache-identical-source.js} | 0 .../chained-application.js} | 0 .../constructor-invocation.js} | 0 ...ber-expression-argument-list-evaluation.js} | 0 .../member-expression-context.js} | 0 .../template-object-frozen-non-strict.js} | 0 .../template-object-frozen-strict.js} | 0 .../template-object.js} | 0 .../evaluation-order.js | 0 ...mal-character-escape-sequence-truncated.js} | 0 .../invalid-legacy-octal-escape-sequence.js} | 0 ...valid-unicode-escape-sequence-truncated.js} | 0 .../template-literal/literal-expr-function.js | 16 ++++++++++++++++ .../literal-expr-member-expr.js} | 13 +++++++++---- .../template-literal/literal-expr-method.js | 17 +++++++++++++++++ .../literal-expr-obj.js} | 13 +++++++++---- .../template-literal/literal-expr-primitive.js | 15 +++++++++++++++ .../template-literal/literal-expr-template.js | 14 ++++++++++++++ .../trv-character-escape-sequence.js} | 0 .../trv-escape-sequence.js} | Bin .../trv-line-continuation.js} | 0 .../trv-line-terminator-sequence.js} | 0 .../trv-no-substitution.js} | 0 .../trv-null-character-escape-sequence.js} | Bin .../trv-template-character.js} | 0 .../trv-template-characters.js} | 0 .../trv-utf16-escape-sequence.js} | 0 .../trv-zwnbsp.js} | 0 .../tv-muti-line.js} | 0 .../tv-template-head.js} | 0 .../tv-template-middle.js} | 0 .../tv-template-tail.js} | 0 .../template/function-invocation.js | 11 ----------- .../expressions/template/method-invocation.js | 13 ------------- .../expressions/template/primitives.js | 11 ----------- .../expressions/template/template-literal.js | 9 --------- 43 files changed, 80 insertions(+), 52 deletions(-) rename test/language/expressions/{template/caching/differing-expressions-eval.js => tagged-template/cache-differing-expressions-eval.js} (100%) rename test/language/expressions/{template/caching/differing-expressions-new-function.js => tagged-template/cache-differing-expressions-new-function.js} (100%) rename test/language/expressions/{template/caching/differing-expressions.js => tagged-template/cache-differing-expressions.js} (100%) rename test/language/expressions/{template/caching/differing-raw-strings.js => tagged-template/cache-differing-raw-strings.js} (100%) rename test/language/expressions/{template/caching/differing-string-count.js => tagged-template/cache-differing-string-count.js} (100%) rename test/language/expressions/{template/caching/identical-source-eval.js => tagged-template/cache-identical-source-eval.js} (100%) rename test/language/expressions/{template/caching/identical-source-new-function.js => tagged-template/cache-identical-source-new-function.js} (100%) rename test/language/expressions/{template/caching/identical-source.js => tagged-template/cache-identical-source.js} (100%) rename test/language/expressions/{template/tagged-chained-application.js => tagged-template/chained-application.js} (100%) rename test/language/expressions/{template/tagged-constructor-invocation.js => tagged-template/constructor-invocation.js} (100%) rename test/language/expressions/{template/tagged-call-expression-argument-list-evaluation.js => tagged-template/member-expression-argument-list-evaluation.js} (100%) rename test/language/expressions/{template/tagged-member-expression-context.js => tagged-template/member-expression-context.js} (100%) rename test/language/expressions/{template/tagged-template-object-frozen-non-strict.js => tagged-template/template-object-frozen-non-strict.js} (100%) rename test/language/expressions/{template/tagged-template-object-frozen-strict.js => tagged-template/template-object-frozen-strict.js} (100%) rename test/language/expressions/{template/tagged-template-object.js => tagged-template/template-object.js} (100%) rename test/language/expressions/{template => template-literal}/evaluation-order.js (100%) rename test/language/expressions/{template/template-values/invalid/hexidecimal-character-escape-sequence-truncated.js => template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js} (100%) rename test/language/expressions/{template/template-values/invalid/legacy-octal-escape-sequence.js => template-literal/invalid-legacy-octal-escape-sequence.js} (100%) rename test/language/expressions/{template/template-values/invalid/unicode-escape-sequence-truncated.js => template-literal/invalid-unicode-escape-sequence-truncated.js} (100%) create mode 100644 test/language/expressions/template-literal/literal-expr-function.js rename test/language/expressions/{template/object-deference.js => template-literal/literal-expr-member-expr.js} (56%) create mode 100644 test/language/expressions/template-literal/literal-expr-method.js rename test/language/expressions/{template/object.js => template-literal/literal-expr-obj.js} (67%) create mode 100644 test/language/expressions/template-literal/literal-expr-primitive.js create mode 100644 test/language/expressions/template-literal/literal-expr-template.js rename test/language/expressions/{template/template-values/character-escape-sequence.js => template-literal/trv-character-escape-sequence.js} (100%) rename test/language/expressions/{template/template-values/escape-sequence.js => template-literal/trv-escape-sequence.js} (100%) rename test/language/expressions/{template/template-values/line-continuation.js => template-literal/trv-line-continuation.js} (100%) rename test/language/expressions/{template/template-values/line-terminator-sequence.js => template-literal/trv-line-terminator-sequence.js} (100%) rename test/language/expressions/{template/template-values/no-substitution.js => template-literal/trv-no-substitution.js} (100%) rename test/language/expressions/{template/template-values/null-character-escape-sequence.js => template-literal/trv-null-character-escape-sequence.js} (100%) rename test/language/expressions/{template/template-values/template-character.js => template-literal/trv-template-character.js} (100%) rename test/language/expressions/{template/template-values/template-characters.js => template-literal/trv-template-characters.js} (100%) rename test/language/expressions/{template/template-values/utf16-escape-sequence.js => template-literal/trv-utf16-escape-sequence.js} (100%) rename test/language/expressions/{template/template-values/zwnbsp.js => template-literal/trv-zwnbsp.js} (100%) rename test/language/expressions/{template/template-values/multi-line.js => template-literal/tv-muti-line.js} (100%) rename test/language/expressions/{template/template-values/template-head.js => template-literal/tv-template-head.js} (100%) rename test/language/expressions/{template/template-values/template-middle.js => template-literal/tv-template-middle.js} (100%) rename test/language/expressions/{template/template-values/template-tail.js => template-literal/tv-template-tail.js} (100%) delete mode 100644 test/language/expressions/template/function-invocation.js delete mode 100644 test/language/expressions/template/method-invocation.js delete mode 100644 test/language/expressions/template/primitives.js delete mode 100644 test/language/expressions/template/template-literal.js diff --git a/test/language/expressions/template/caching/differing-expressions-eval.js b/test/language/expressions/tagged-template/cache-differing-expressions-eval.js similarity index 100% rename from test/language/expressions/template/caching/differing-expressions-eval.js rename to test/language/expressions/tagged-template/cache-differing-expressions-eval.js diff --git a/test/language/expressions/template/caching/differing-expressions-new-function.js b/test/language/expressions/tagged-template/cache-differing-expressions-new-function.js similarity index 100% rename from test/language/expressions/template/caching/differing-expressions-new-function.js rename to test/language/expressions/tagged-template/cache-differing-expressions-new-function.js diff --git a/test/language/expressions/template/caching/differing-expressions.js b/test/language/expressions/tagged-template/cache-differing-expressions.js similarity index 100% rename from test/language/expressions/template/caching/differing-expressions.js rename to test/language/expressions/tagged-template/cache-differing-expressions.js diff --git a/test/language/expressions/template/caching/differing-raw-strings.js b/test/language/expressions/tagged-template/cache-differing-raw-strings.js similarity index 100% rename from test/language/expressions/template/caching/differing-raw-strings.js rename to test/language/expressions/tagged-template/cache-differing-raw-strings.js diff --git a/test/language/expressions/template/caching/differing-string-count.js b/test/language/expressions/tagged-template/cache-differing-string-count.js similarity index 100% rename from test/language/expressions/template/caching/differing-string-count.js rename to test/language/expressions/tagged-template/cache-differing-string-count.js diff --git a/test/language/expressions/template/caching/identical-source-eval.js b/test/language/expressions/tagged-template/cache-identical-source-eval.js similarity index 100% rename from test/language/expressions/template/caching/identical-source-eval.js rename to test/language/expressions/tagged-template/cache-identical-source-eval.js diff --git a/test/language/expressions/template/caching/identical-source-new-function.js b/test/language/expressions/tagged-template/cache-identical-source-new-function.js similarity index 100% rename from test/language/expressions/template/caching/identical-source-new-function.js rename to test/language/expressions/tagged-template/cache-identical-source-new-function.js diff --git a/test/language/expressions/template/caching/identical-source.js b/test/language/expressions/tagged-template/cache-identical-source.js similarity index 100% rename from test/language/expressions/template/caching/identical-source.js rename to test/language/expressions/tagged-template/cache-identical-source.js diff --git a/test/language/expressions/template/tagged-chained-application.js b/test/language/expressions/tagged-template/chained-application.js similarity index 100% rename from test/language/expressions/template/tagged-chained-application.js rename to test/language/expressions/tagged-template/chained-application.js diff --git a/test/language/expressions/template/tagged-constructor-invocation.js b/test/language/expressions/tagged-template/constructor-invocation.js similarity index 100% rename from test/language/expressions/template/tagged-constructor-invocation.js rename to test/language/expressions/tagged-template/constructor-invocation.js diff --git a/test/language/expressions/template/tagged-call-expression-argument-list-evaluation.js b/test/language/expressions/tagged-template/member-expression-argument-list-evaluation.js similarity index 100% rename from test/language/expressions/template/tagged-call-expression-argument-list-evaluation.js rename to test/language/expressions/tagged-template/member-expression-argument-list-evaluation.js diff --git a/test/language/expressions/template/tagged-member-expression-context.js b/test/language/expressions/tagged-template/member-expression-context.js similarity index 100% rename from test/language/expressions/template/tagged-member-expression-context.js rename to test/language/expressions/tagged-template/member-expression-context.js diff --git a/test/language/expressions/template/tagged-template-object-frozen-non-strict.js b/test/language/expressions/tagged-template/template-object-frozen-non-strict.js similarity index 100% rename from test/language/expressions/template/tagged-template-object-frozen-non-strict.js rename to test/language/expressions/tagged-template/template-object-frozen-non-strict.js diff --git a/test/language/expressions/template/tagged-template-object-frozen-strict.js b/test/language/expressions/tagged-template/template-object-frozen-strict.js similarity index 100% rename from test/language/expressions/template/tagged-template-object-frozen-strict.js rename to test/language/expressions/tagged-template/template-object-frozen-strict.js diff --git a/test/language/expressions/template/tagged-template-object.js b/test/language/expressions/tagged-template/template-object.js similarity index 100% rename from test/language/expressions/template/tagged-template-object.js rename to test/language/expressions/tagged-template/template-object.js diff --git a/test/language/expressions/template/evaluation-order.js b/test/language/expressions/template-literal/evaluation-order.js similarity index 100% rename from test/language/expressions/template/evaluation-order.js rename to test/language/expressions/template-literal/evaluation-order.js diff --git a/test/language/expressions/template/template-values/invalid/hexidecimal-character-escape-sequence-truncated.js b/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js similarity index 100% rename from test/language/expressions/template/template-values/invalid/hexidecimal-character-escape-sequence-truncated.js rename to test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js diff --git a/test/language/expressions/template/template-values/invalid/legacy-octal-escape-sequence.js b/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js similarity index 100% rename from test/language/expressions/template/template-values/invalid/legacy-octal-escape-sequence.js rename to test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js diff --git a/test/language/expressions/template/template-values/invalid/unicode-escape-sequence-truncated.js b/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js similarity index 100% rename from test/language/expressions/template/template-values/invalid/unicode-escape-sequence-truncated.js rename to test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js diff --git a/test/language/expressions/template-literal/literal-expr-function.js b/test/language/expressions/template-literal/literal-expr-function.js new file mode 100644 index 0000000000..6d933fe5b0 --- /dev/null +++ b/test/language/expressions/template-literal/literal-expr-function.js @@ -0,0 +1,16 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Function invocation in expression position of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). +---*/ + +function fn() { return 'result'; } + +assert.sameValue(`foo ${fn()} bar`, 'foo result bar'); diff --git a/test/language/expressions/template/object-deference.js b/test/language/expressions/template-literal/literal-expr-member-expr.js similarity index 56% rename from test/language/expressions/template/object-deference.js rename to test/language/expressions/template-literal/literal-expr-member-expr.js index 8ba043de3a..0653e520a6 100644 --- a/test/language/expressions/template/object-deference.js +++ b/test/language/expressions/template-literal/literal-expr-member-expr.js @@ -1,11 +1,16 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 12.2.8 -description: > - Expressions should be evaluated and converted to Strings according to the - ToString abstract operation. +es6id: 12.2.8.5 +description: MemberExpression in expression position of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). ---*/ + var object = { number: 5, string: 'stringValue' diff --git a/test/language/expressions/template-literal/literal-expr-method.js b/test/language/expressions/template-literal/literal-expr-method.js new file mode 100644 index 0000000000..40788c3db7 --- /dev/null +++ b/test/language/expressions/template-literal/literal-expr-method.js @@ -0,0 +1,17 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Method invocation in expression position of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). +---*/ +var object = { + fn: function() { return 'result'; } +}; + +assert.sameValue(`foo ${object.fn()} bar`, 'foo result bar'); diff --git a/test/language/expressions/template/object.js b/test/language/expressions/template-literal/literal-expr-obj.js similarity index 67% rename from test/language/expressions/template/object.js rename to test/language/expressions/template-literal/literal-expr-obj.js index 59a40268b7..3cd21ad00d 100644 --- a/test/language/expressions/template/object.js +++ b/test/language/expressions/template-literal/literal-expr-obj.js @@ -1,11 +1,16 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 12.2.8 -description: > - Expressions should be evaluated and converted to Strings according to the - ToString abstract operation. +es6id: 12.2.8.5 +description: Object reference in expression position of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). ---*/ + var plain = {}; var custom = { toString: function() { diff --git a/test/language/expressions/template-literal/literal-expr-primitive.js b/test/language/expressions/template-literal/literal-expr-primitive.js new file mode 100644 index 0000000000..4774eacd8e --- /dev/null +++ b/test/language/expressions/template-literal/literal-expr-primitive.js @@ -0,0 +1,15 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Primitive value in expression position of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). +---*/ + +assert.sameValue(`foo ${5} bar`, 'foo 5 bar', 'number value'); +assert.sameValue(`foo ${'string'} bar`, 'foo string bar', 'string value'); diff --git a/test/language/expressions/template-literal/literal-expr-template.js b/test/language/expressions/template-literal/literal-expr-template.js new file mode 100644 index 0000000000..04e6beeaef --- /dev/null +++ b/test/language/expressions/template-literal/literal-expr-template.js @@ -0,0 +1,14 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Template literal in expression position of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). +---*/ + +assert.sameValue(`foo ${`bar ${5} baz`} qux`, 'foo bar 5 baz qux'); diff --git a/test/language/expressions/template/template-values/character-escape-sequence.js b/test/language/expressions/template-literal/trv-character-escape-sequence.js similarity index 100% rename from test/language/expressions/template/template-values/character-escape-sequence.js rename to test/language/expressions/template-literal/trv-character-escape-sequence.js diff --git a/test/language/expressions/template/template-values/escape-sequence.js b/test/language/expressions/template-literal/trv-escape-sequence.js similarity index 100% rename from test/language/expressions/template/template-values/escape-sequence.js rename to test/language/expressions/template-literal/trv-escape-sequence.js diff --git a/test/language/expressions/template/template-values/line-continuation.js b/test/language/expressions/template-literal/trv-line-continuation.js similarity index 100% rename from test/language/expressions/template/template-values/line-continuation.js rename to test/language/expressions/template-literal/trv-line-continuation.js diff --git a/test/language/expressions/template/template-values/line-terminator-sequence.js b/test/language/expressions/template-literal/trv-line-terminator-sequence.js similarity index 100% rename from test/language/expressions/template/template-values/line-terminator-sequence.js rename to test/language/expressions/template-literal/trv-line-terminator-sequence.js diff --git a/test/language/expressions/template/template-values/no-substitution.js b/test/language/expressions/template-literal/trv-no-substitution.js similarity index 100% rename from test/language/expressions/template/template-values/no-substitution.js rename to test/language/expressions/template-literal/trv-no-substitution.js diff --git a/test/language/expressions/template/template-values/null-character-escape-sequence.js b/test/language/expressions/template-literal/trv-null-character-escape-sequence.js similarity index 100% rename from test/language/expressions/template/template-values/null-character-escape-sequence.js rename to test/language/expressions/template-literal/trv-null-character-escape-sequence.js diff --git a/test/language/expressions/template/template-values/template-character.js b/test/language/expressions/template-literal/trv-template-character.js similarity index 100% rename from test/language/expressions/template/template-values/template-character.js rename to test/language/expressions/template-literal/trv-template-character.js diff --git a/test/language/expressions/template/template-values/template-characters.js b/test/language/expressions/template-literal/trv-template-characters.js similarity index 100% rename from test/language/expressions/template/template-values/template-characters.js rename to test/language/expressions/template-literal/trv-template-characters.js diff --git a/test/language/expressions/template/template-values/utf16-escape-sequence.js b/test/language/expressions/template-literal/trv-utf16-escape-sequence.js similarity index 100% rename from test/language/expressions/template/template-values/utf16-escape-sequence.js rename to test/language/expressions/template-literal/trv-utf16-escape-sequence.js diff --git a/test/language/expressions/template/template-values/zwnbsp.js b/test/language/expressions/template-literal/trv-zwnbsp.js similarity index 100% rename from test/language/expressions/template/template-values/zwnbsp.js rename to test/language/expressions/template-literal/trv-zwnbsp.js diff --git a/test/language/expressions/template/template-values/multi-line.js b/test/language/expressions/template-literal/tv-muti-line.js similarity index 100% rename from test/language/expressions/template/template-values/multi-line.js rename to test/language/expressions/template-literal/tv-muti-line.js diff --git a/test/language/expressions/template/template-values/template-head.js b/test/language/expressions/template-literal/tv-template-head.js similarity index 100% rename from test/language/expressions/template/template-values/template-head.js rename to test/language/expressions/template-literal/tv-template-head.js diff --git a/test/language/expressions/template/template-values/template-middle.js b/test/language/expressions/template-literal/tv-template-middle.js similarity index 100% rename from test/language/expressions/template/template-values/template-middle.js rename to test/language/expressions/template-literal/tv-template-middle.js diff --git a/test/language/expressions/template/template-values/template-tail.js b/test/language/expressions/template-literal/tv-template-tail.js similarity index 100% rename from test/language/expressions/template/template-values/template-tail.js rename to test/language/expressions/template-literal/tv-template-tail.js diff --git a/test/language/expressions/template/function-invocation.js b/test/language/expressions/template/function-invocation.js deleted file mode 100644 index 38094e74c6..0000000000 --- a/test/language/expressions/template/function-invocation.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 12.2.8 -description: > - Expressions should be evaluated and converted to Strings according to the - ToString abstract operation. ----*/ -function fn() { return 'result'; } - -assert.sameValue(`foo ${fn()} bar`, 'foo result bar'); diff --git a/test/language/expressions/template/method-invocation.js b/test/language/expressions/template/method-invocation.js deleted file mode 100644 index 6f9a9ed077..0000000000 --- a/test/language/expressions/template/method-invocation.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 12.2.8 -description: > - Expressions should be evaluated and converted to Strings according to the - ToString abstract operation. ----*/ -var object = { - fn: function() { return 'result'; } -}; - -assert.sameValue(`foo ${object.fn()} bar`, 'foo result bar'); diff --git a/test/language/expressions/template/primitives.js b/test/language/expressions/template/primitives.js deleted file mode 100644 index 44a1396e17..0000000000 --- a/test/language/expressions/template/primitives.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 12.2.8 -description: > - Expressions should be evaluated and converted to Strings according to the - ToString abstract operation. ----*/ - -assert.sameValue(`foo ${5} bar`, 'foo 5 bar', 'number value'); -assert.sameValue(`foo ${'string'} bar`, 'foo string bar', 'string value'); diff --git a/test/language/expressions/template/template-literal.js b/test/language/expressions/template/template-literal.js deleted file mode 100644 index a3b06e45c1..0000000000 --- a/test/language/expressions/template/template-literal.js +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 12.2.8 -description: > - Expressions should be evaluated and converted to Strings according to the - ToString abstract operation. ----*/ -assert.sameValue(`foo ${`bar ${5} baz`} qux`, 'foo bar 5 baz qux'); From 5ca7a58e75860cd6e037332c2ec7a2d1739e3e5f Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Thu, 11 Jun 2015 13:19:07 -0400 Subject: [PATCH 2/6] Introduce additional tests for ES6 templates --- ...all-expression-argument-list-evaluation.js | 42 +++++++ .../call-expression-context.js | 21 ++++ ...mal-character-escape-sequence-truncated.js | 2 +- .../invalid-legacy-octal-escape-sequence.js | 2 +- ...valid-unicode-escape-sequence-truncated.js | 2 +- .../template-literal/literal-expr-abrupt.js | 17 +++ .../literal-expr-member-expr.js | 10 ++ .../literal-expr-tostr-error.js | 23 ++++ .../middle-list-many-expr-abrupt.js | 19 +++ .../middle-list-many-expr-function.js | 18 +++ .../middle-list-many-expr-member-expr.js | 38 ++++++ .../middle-list-many-expr-method.js | 19 +++ .../middle-list-many-expr-obj.js | 31 +++++ .../middle-list-many-expr-primitive.js | 17 +++ .../middle-list-many-expr-template.js | 16 +++ .../middle-list-many-expr-tostr-error.js | 25 ++++ .../middle-list-one-expr-abrupt.js | 17 +++ .../middle-list-one-expr-function.js | 16 +++ .../middle-list-one-expr-member-expr.js | 35 ++++++ .../middle-list-one-expr-method.js | 18 +++ .../middle-list-one-expr-obj.js | 30 +++++ .../middle-list-one-expr-primitive.js | 15 +++ .../middle-list-one-expr-template.js | 14 +++ .../middle-list-one-expr-tostr-error.js | 23 ++++ .../expressions/template-literal/no-sub.js | 14 +++ .../trv-character-escape-sequence.js | 88 ------------- .../template-literal/trv-escape-sequence.js | Bin 1149 -> 0 bytes .../trv-template-character.js | 29 ----- .../trv-template-characters.js | 24 ---- .../template-literal/trv-zwnbsp.js | 15 --- .../tv-character-escape-sequence.js | 116 ++++++++++++++++++ ...-sequence.js => tv-hex-escape-sequence.js} | 18 +-- ...ontinuation.js => tv-line-continuation.js} | 6 + ...ence.js => tv-line-terminator-sequence.js} | 9 +- ...-substitution.js => tv-no-substitution.js} | 3 + ...s => tv-null-character-escape-sequence.js} | Bin 520 -> 487 bytes .../template-literal/tv-template-character.js | 37 ++++++ .../tv-template-characters.js | 22 ++++ .../template-literal/tv-template-middle.js | 2 - .../tv-utf16-escape-sequence.js | 49 ++++++++ .../expressions/template-literal/tv-zwnbsp.js | 32 +++++ 41 files changed, 760 insertions(+), 174 deletions(-) create mode 100644 test/language/expressions/tagged-template/call-expression-argument-list-evaluation.js create mode 100644 test/language/expressions/tagged-template/call-expression-context.js create mode 100644 test/language/expressions/template-literal/literal-expr-abrupt.js create mode 100644 test/language/expressions/template-literal/literal-expr-tostr-error.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-abrupt.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-function.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-member-expr.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-method.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-obj.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-primitive.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-template.js create mode 100644 test/language/expressions/template-literal/middle-list-many-expr-tostr-error.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-abrupt.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-function.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-member-expr.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-method.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-obj.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-primitive.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-template.js create mode 100644 test/language/expressions/template-literal/middle-list-one-expr-tostr-error.js create mode 100644 test/language/expressions/template-literal/no-sub.js delete mode 100644 test/language/expressions/template-literal/trv-character-escape-sequence.js delete mode 100644 test/language/expressions/template-literal/trv-escape-sequence.js delete mode 100644 test/language/expressions/template-literal/trv-template-character.js delete mode 100644 test/language/expressions/template-literal/trv-template-characters.js delete mode 100644 test/language/expressions/template-literal/trv-zwnbsp.js create mode 100644 test/language/expressions/template-literal/tv-character-escape-sequence.js rename test/language/expressions/template-literal/{trv-utf16-escape-sequence.js => tv-hex-escape-sequence.js} (53%) rename test/language/expressions/template-literal/{trv-line-continuation.js => tv-line-continuation.js} (76%) rename test/language/expressions/template-literal/{trv-line-terminator-sequence.js => tv-line-terminator-sequence.js} (73%) rename test/language/expressions/template-literal/{trv-no-substitution.js => tv-no-substitution.js} (80%) rename test/language/expressions/template-literal/{trv-null-character-escape-sequence.js => tv-null-character-escape-sequence.js} (80%) create mode 100644 test/language/expressions/template-literal/tv-template-character.js create mode 100644 test/language/expressions/template-literal/tv-template-characters.js create mode 100644 test/language/expressions/template-literal/tv-utf16-escape-sequence.js create mode 100644 test/language/expressions/template-literal/tv-zwnbsp.js diff --git a/test/language/expressions/tagged-template/call-expression-argument-list-evaluation.js b/test/language/expressions/tagged-template/call-expression-argument-list-evaluation.js new file mode 100644 index 0000000000..8c46b4b4db --- /dev/null +++ b/test/language/expressions/tagged-template/call-expression-argument-list-evaluation.js @@ -0,0 +1,42 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.3.7 +description: Argument list evalution for call expresions +info: > + A tagged template is a function call where the arguments of the call are + derived from a TemplateLiteral. The actual arguments include a template + object and the values produced by evaluating the expressions embedded + within the TemplateLiteral. +---*/ + +var number = 5; +var string = 'str'; +var object = {}; +function fn() { return 'result'; } +var calls; + +calls = 0; +(function() { + return function() { + calls++; + assert.sameValue( + arguments.length, 1, 'NoSubstitutionTemplate arguments length' + ); + }; +})()`NoSubstitutionTemplate`; +assert.sameValue(calls, 1, 'NoSubstitutionTemplate function invocation'); + +calls = 0; +(function() { + return function(site, n, s, o, f, r) { + calls++; + assert.sameValue(n, number); + assert.sameValue(s, string); + assert.sameValue(o, object); + assert.sameValue(f, fn); + assert.sameValue(r, 'result'); + assert.sameValue(arguments.length, 6, 'TemplateHead arguments length'); + }; +})()`TemplateHead${number}TemplateSpans${string}${object}${fn}${fn()}`; +assert.sameValue(calls, 1, 'TemplateHead function invocation'); diff --git a/test/language/expressions/tagged-template/call-expression-context.js b/test/language/expressions/tagged-template/call-expression-context.js new file mode 100644 index 0000000000..e58ff26b73 --- /dev/null +++ b/test/language/expressions/tagged-template/call-expression-context.js @@ -0,0 +1,21 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.3.7 +description: Invocation context for call expressions +info: > + A tagged template is a function call where the arguments of the call are + derived from a TemplateLiteral. The actual arguments include a template + object and the values produced by evaluating the expressions embedded + within the TemplateLiteral. +---*/ +var context; +var fn = function() { + return function() { + context = this; + }; +}; + +fn`NoSubstitutionTemplate`; + +assert.sameValue(context, undefined); diff --git a/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js b/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js index 49403e12d8..4f1f3f6e6e 100644 --- a/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js +++ b/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js @@ -8,4 +8,4 @@ description: > negative: SyntaxError ---*/ -(function() {})`\x`; +`\x0`; diff --git a/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js b/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js index 56a7611d88..20e308e69c 100644 --- a/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js +++ b/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js @@ -8,4 +8,4 @@ description: > negative: SyntaxError ---*/ -(function() {})`\00`; +`\00`; diff --git a/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js b/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js index 4a228da532..f614cc00fa 100644 --- a/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js +++ b/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js @@ -8,4 +8,4 @@ description: > negative: SyntaxError ---*/ -(function() {})`\u`; +`\u0`; diff --git a/test/language/expressions/template-literal/literal-expr-abrupt.js b/test/language/expressions/template-literal/literal-expr-abrupt.js new file mode 100644 index 0000000000..33c17272aa --- /dev/null +++ b/test/language/expressions/template-literal/literal-expr-abrupt.js @@ -0,0 +1,17 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Abrupt completion when evaluating expression of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). + 4. ReturnIfAbrupt(middle). +---*/ + +assert.throws(Test262Error, function() { + `${function() { throw new Test262Error(); }()}`; +}); diff --git a/test/language/expressions/template-literal/literal-expr-member-expr.js b/test/language/expressions/template-literal/literal-expr-member-expr.js index 0653e520a6..65aea5ae76 100644 --- a/test/language/expressions/template-literal/literal-expr-member-expr.js +++ b/test/language/expressions/template-literal/literal-expr-member-expr.js @@ -22,3 +22,13 @@ assert.sameValue( assert.sameValue( `foo ${object.string} bar`, 'foo stringValue bar', 'string value property' ); +assert.sameValue( + `foo ${object['string']} bar`, + 'foo stringValue bar', + 'string value property (single-quote string dereference)' +); +assert.sameValue( + `foo ${object["string"]} bar`, + 'foo stringValue bar', + 'string value property (double-quote string dereference)' +); diff --git a/test/language/expressions/template-literal/literal-expr-tostr-error.js b/test/language/expressions/template-literal/literal-expr-tostr-error.js new file mode 100644 index 0000000000..d3534ecbac --- /dev/null +++ b/test/language/expressions/template-literal/literal-expr-tostr-error.js @@ -0,0 +1,23 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Abrupt completion when converting expression value of TemplateLiteral +info: > + TemplateLiteral : TemplateHead Expression TemplateSpans + + 1. Let head be the TV of TemplateHead as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). + 4. ReturnIfAbrupt(middle). +---*/ + +var obj = { + toString: function() { + throw new Test262Error(); + } +}; + +assert.throws(Test262Error, function() { + `${obj}`; +}); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-abrupt.js b/test/language/expressions/template-literal/middle-list-many-expr-abrupt.js new file mode 100644 index 0000000000..41ec352c3e --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-abrupt.js @@ -0,0 +1,19 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Abrupt completion when evaluating expression of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). + 6. ReturnIfAbrupt(last). +---*/ + +assert.throws(Test262Error, function() { + `${0}${1}${function() { throw new Test262Error(); }()}`; +}); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-function.js b/test/language/expressions/template-literal/middle-list-many-expr-function.js new file mode 100644 index 0000000000..3ed6abe6ee --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-function.js @@ -0,0 +1,18 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Function invocation in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). +---*/ + +function fn() { return 'result'; } + +assert.sameValue(`${0} ${1} ${fn()}`, '0 1 result'); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-member-expr.js b/test/language/expressions/template-literal/middle-list-many-expr-member-expr.js new file mode 100644 index 0000000000..fa01c95cec --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-member-expr.js @@ -0,0 +1,38 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: MemberExpression in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). +---*/ + +var object = { + number: 5, + string: 'stringValue' +}; + +assert.sameValue( + `${0} ${1} ${object.number} bar`, '0 1 5 bar', 'number value property' +); +assert.sameValue( + `${0} ${1} ${object.string} bar`, + '0 1 stringValue bar', + 'string value property' +); +assert.sameValue( + `${0} ${1} ${object['string']} bar`, + '0 1 stringValue bar', + 'string value property (single-quote string dereference)' +); +assert.sameValue( + `${0} ${1} ${object["string"]} bar`, + '0 1 stringValue bar', + 'string value property (double-quote string dereference)' +); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-method.js b/test/language/expressions/template-literal/middle-list-many-expr-method.js new file mode 100644 index 0000000000..053518dd0a --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-method.js @@ -0,0 +1,19 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Method invocation in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). +---*/ +var object = { + fn: function() { return 'result'; } +}; + +assert.sameValue(`${0} ${1} ${object.fn()} bar`, '0 1 result bar'); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-obj.js b/test/language/expressions/template-literal/middle-list-many-expr-obj.js new file mode 100644 index 0000000000..7580a0a03b --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-obj.js @@ -0,0 +1,31 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Object reference in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). +---*/ + +var plain = {}; +var custom = { + toString: function() { + return '"own" toString'; + } +}; + +assert.sameValue(`${0} ${1} ${plain}`, '0 1 [object Object]'); +assert.sameValue(`${0} ${1} ${plain}`, '0 1 [object Object]'); +assert.sameValue(`${0} ${1} ${plain}2`, '0 1 [object Object]2'); +assert.sameValue(`${0} ${1} ${plain}2`, '0 1 [object Object]2'); + +assert.sameValue(`${0} ${1} ${custom}`, '0 1 "own" toString'); +assert.sameValue(`${0} ${1} ${custom}`, '0 1 "own" toString'); +assert.sameValue(`${0} ${1} ${custom}2`, '0 1 "own" toString2'); +assert.sameValue(`${0} ${1} ${custom}2`, '0 1 "own" toString2'); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-primitive.js b/test/language/expressions/template-literal/middle-list-many-expr-primitive.js new file mode 100644 index 0000000000..f123586be3 --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-primitive.js @@ -0,0 +1,17 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Primitive value in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). +---*/ + +assert.sameValue(`${0} ${1} ${5} bar`, '0 1 5 bar', 'number value'); +assert.sameValue(`${0} ${1} ${'string'} bar`, '0 1 string bar', 'string value'); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-template.js b/test/language/expressions/template-literal/middle-list-many-expr-template.js new file mode 100644 index 0000000000..6cd92054fb --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-template.js @@ -0,0 +1,16 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Template literal in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). +---*/ + +assert.sameValue(`${0} ${1} ${`bar ${5} baz`} qux`, '0 1 bar 5 baz qux'); diff --git a/test/language/expressions/template-literal/middle-list-many-expr-tostr-error.js b/test/language/expressions/template-literal/middle-list-many-expr-tostr-error.js new file mode 100644 index 0000000000..5b0a555050 --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-many-expr-tostr-error.js @@ -0,0 +1,25 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Abrupt completion when converting expression value of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression + + 1. Let rest be the result of evaluating TemplateMiddleList . + 2. ReturnIfAbrupt(rest). + 3. Let middle be the TV of TemplateMiddle as defined in 11.8.6. + 4. Let sub be the result of evaluating Expression. + 5. Let last be ToString(sub). + 6. ReturnIfAbrupt(last). +---*/ + +var obj = { + toString: function() { + throw new Test262Error(); + } +}; + +assert.throws(Test262Error, function() { + `${0} ${1} ${obj}`; +}); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-abrupt.js b/test/language/expressions/template-literal/middle-list-one-expr-abrupt.js new file mode 100644 index 0000000000..9e26b89b0a --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-abrupt.js @@ -0,0 +1,17 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Abrupt completion when evaluating expression of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). + 4. ReturnIfAbrupt(middle). +---*/ + +assert.throws(Test262Error, function() { + `${0}${function() { throw new Test262Error(); }()}`; +}); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-function.js b/test/language/expressions/template-literal/middle-list-one-expr-function.js new file mode 100644 index 0000000000..d7edd372e3 --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-function.js @@ -0,0 +1,16 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Function invocation in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). +---*/ + +function fn() { return 'result'; } + +assert.sameValue(`${0} ${fn()}`, '0 result'); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-member-expr.js b/test/language/expressions/template-literal/middle-list-one-expr-member-expr.js new file mode 100644 index 0000000000..3686d145fd --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-member-expr.js @@ -0,0 +1,35 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: MemberExpression in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). + 4. ReturnIfAbrupt(middle). +---*/ + +var object = { + number: 5, + string: 'stringValue' +}; + +assert.sameValue( + `${0} ${object.number} bar`, '0 5 bar', 'number value property' +); +assert.sameValue( + `${0} ${object.string} bar`, '0 stringValue bar', 'string value property' +); +assert.sameValue( + `${0} ${object['string']} bar`, + '0 stringValue bar', + 'string value property (single-quote string dereference)' +); +assert.sameValue( + `${0} ${object["string"]} bar`, + '0 stringValue bar', + 'string value property (double-quote string dereference)' +); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-method.js b/test/language/expressions/template-literal/middle-list-one-expr-method.js new file mode 100644 index 0000000000..024cc8e0d8 --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-method.js @@ -0,0 +1,18 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Method invocation in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). + 4. ReturnIfAbrupt(middle). +---*/ +var object = { + fn: function() { return 'result'; } +}; + +assert.sameValue(`${0} ${object.fn()} bar`, '0 result bar'); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-obj.js b/test/language/expressions/template-literal/middle-list-one-expr-obj.js new file mode 100644 index 0000000000..12a11c0b98 --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-obj.js @@ -0,0 +1,30 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Object reference in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). + 4. ReturnIfAbrupt(middle). +---*/ + +var plain = {}; +var custom = { + toString: function() { + return '"own" toString'; + } +}; + +assert.sameValue(`${0} ${plain}`, '0 [object Object]'); +assert.sameValue(`${0} ${plain}`, '0 [object Object]'); +assert.sameValue(`${0} ${plain}2`, '0 [object Object]2'); +assert.sameValue(`${0} ${plain}2`, '0 [object Object]2'); + +assert.sameValue(`${0} ${custom}`, '0 "own" toString'); +assert.sameValue(`${0} ${custom}`, '0 "own" toString'); +assert.sameValue(`${0} ${custom}2`, '0 "own" toString2'); +assert.sameValue(`${0} ${custom}2`, '0 "own" toString2'); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-primitive.js b/test/language/expressions/template-literal/middle-list-one-expr-primitive.js new file mode 100644 index 0000000000..1bf8de2600 --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-primitive.js @@ -0,0 +1,15 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Primitive value in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). +---*/ + +assert.sameValue(`${0} ${5} bar`, '0 5 bar', 'number value'); +assert.sameValue(`${0} ${'string'} bar`, '0 string bar', 'string value'); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-template.js b/test/language/expressions/template-literal/middle-list-one-expr-template.js new file mode 100644 index 0000000000..d906250e1a --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-template.js @@ -0,0 +1,14 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Template literal in expression position of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). +---*/ + +assert.sameValue(`${0} ${`bar ${5} baz`} qux`, '0 bar 5 baz qux'); diff --git a/test/language/expressions/template-literal/middle-list-one-expr-tostr-error.js b/test/language/expressions/template-literal/middle-list-one-expr-tostr-error.js new file mode 100644 index 0000000000..6ed334c6f2 --- /dev/null +++ b/test/language/expressions/template-literal/middle-list-one-expr-tostr-error.js @@ -0,0 +1,23 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Abrupt completion when converting expression value of TemplateMiddleList +info: > + TemplateMiddleList : TemplateMiddle Expression + + 1. Let head be the TV of TemplateMiddle as defined in 11.8.6. + 2. Let sub be the result of evaluating Expression. + 3. Let middle be ToString(sub). + 4. ReturnIfAbrupt(middle). +---*/ + +var obj = { + toString: function() { + throw new Test262Error(); + } +}; + +assert.throws(Test262Error, function() { + `${0} ${obj}`; +}); diff --git a/test/language/expressions/template-literal/no-sub.js b/test/language/expressions/template-literal/no-sub.js new file mode 100644 index 0000000000..3bf27aaac8 --- /dev/null +++ b/test/language/expressions/template-literal/no-sub.js @@ -0,0 +1,14 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.2.8.5 +description: Evaluation of NoSubstitutionTemplate +info: > + 12.2.8.5 Runtime Semantics: Evaluation + TemplateLiteral : NoSubstitutionTemplate + + 1. Return the string value whose code units are the elements of the TV of + NoSubstitutionTemplate as defined in 11.8.6. +---*/ + +assert.sameValue(`NoSubstitutionTemplate`, 'NoSubstitutionTemplate'); diff --git a/test/language/expressions/template-literal/trv-character-escape-sequence.js b/test/language/expressions/template-literal/trv-character-escape-sequence.js deleted file mode 100644 index cf3fecbd97..0000000000 --- a/test/language/expressions/template-literal/trv-character-escape-sequence.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 11.8.6 -description: > - The TRV of CharacterEscapeSequence :: SingleEscapeCharacter is the TRV of - the SingleEscapeCharacter. - The TRV of CharacterEscapeSequence :: NonEscapeCharacter is the CV of the - NonEscapeCharacter. ----*/ -var calls; - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005C\u0027"); -})`\'`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005C\u0022"); -})`\"`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005C\u005C"); -})`\\`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005Cb"); -})`\b`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005Cf"); -})`\f`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005Cn"); -})`\n`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005Cr"); -})`\r`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005Ct"); -})`\t`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005Cv"); -})`\v`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005C`"); -})`\``; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s.raw[0], "\u005Cz"); -})`\z`; -assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/trv-escape-sequence.js b/test/language/expressions/template-literal/trv-escape-sequence.js deleted file mode 100644 index e3e0ee8275975501cfc80f276d30c15cadad8e25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmcJN(QeZ)6o$F>Q~Y;rw>5ELOjRq8pi}}0?Sh8hP^22?WHHK|U^}JL#Ite1i($J% z-Dt&%rsX0|bbP+^|L2@E#iVYojJhZtx|80mzo&d~3Re>5Lo}xTO432JuB?qs@T#g1 zlPnBbGAqgxmZr!`Wg+XF;LnSCMMhJOFIN%tdiDmDlB6x6s9T*w=@@wbZZbWeO;MlUq+VE|p*!?l+gW5>s1 z|0%5B0hd^DN%PQ=uKmP6pP=)k<6q0gf-hnJ%)#AEYty?t~R&Ga>xHuXRz}gW56YQy$A+Ts(Wb@2z}(It&W;uFKZ& QR;6e74u>hk+ - The TV of TemplateCharacter :: $ is the code unit value 0x0024. - The TV of TemplateCharacter :: \ EscapeSequence is the CV of - EscapeSequence. - The TV of TemplateCharacter :: LineContinuation is the TV of - LineContinuation. The TV of LineContinuation :: \ LineTerminatorSequence is - the empty code unit sequence. - The TRV of TemplateCharacter :: $ is the code unit value 0x0024. ----*/ - -var calls; - -assert.sameValue(`\uc548\uB155`, "안녕"); -assert.sameValue(`\xff`, "\xff"); -assert.sameValue(`\n`, "\n"); -assert.sameValue(`\ -`, ''); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s[0], '$', '`$` character template value'); - assert.sameValue(s.raw[0], '$', '`$` character template raw value'); -})`$`; -assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/trv-template-characters.js b/test/language/expressions/template-literal/trv-template-characters.js deleted file mode 100644 index 8d1b7fb357..0000000000 --- a/test/language/expressions/template-literal/trv-template-characters.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 11.8.6 -description: > - The TV of TemplateCharacters :: TemplateCharacter is the TV of - TemplateCharacter. - The TV of NoSubstitutionTemplate :: ` TemplateCharacters ` is the TV of - TemplateCharacters. - The TRV of TemplateCharacters :: TemplateCharacter is the TRV of - TemplateCharacter. ----*/ - -var calls; - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s[0], 'f', 'TemplateCharacters template value'); - assert.sameValue(s.raw[0], 'f', 'TemplateCharacters template raw value'); -})`f`; -assert.sameValue(calls, 1); - -assert.sameValue(`test`, 'test', 'TemplateCharacters template value'); diff --git a/test/language/expressions/template-literal/trv-zwnbsp.js b/test/language/expressions/template-literal/trv-zwnbsp.js deleted file mode 100644 index f4d095dc99..0000000000 --- a/test/language/expressions/template-literal/trv-zwnbsp.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 11.1 -description: > - The zero width no-break space format-control character may be used within - template literals. ----*/ - -assert.sameValue( - `\uFEFFtest`, 'test', 'Specified via unicode escape sequence' -); -assert.sameValue( - `test`, 'test', 'Specified via literal character' -); diff --git a/test/language/expressions/template-literal/tv-character-escape-sequence.js b/test/language/expressions/template-literal/tv-character-escape-sequence.js new file mode 100644 index 0000000000..c686272c76 --- /dev/null +++ b/test/language/expressions/template-literal/tv-character-escape-sequence.js @@ -0,0 +1,116 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 11.8.6 +description: > + The TV of TemplateCharacter :: \ EscapeSequence is the SV of + EscapeSequence. + The TRV of TemplateCharacter :: \ EscapeSequence is the sequence consisting + of the code unit value 0x005C followed by the code units of TRV of + EscapeSequence. + The TRV of CharacterEscapeSequence :: SingleEscapeCharacter is the TRV of + the SingleEscapeCharacter. + The TRV of CharacterEscapeSequence :: NonEscapeCharacter is the SV of the + NonEscapeCharacter. +---*/ +var calls; + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], "'", "TV of NonEscapeCharacter"); + assert.sameValue(s.raw[0], "\u005C\u0027", "TRV of NonEscapeCharacter"); +})`\'`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], "\"", "TV of SingleEscapeCharacter (double quote)"); + assert.sameValue( + s.raw[0], "\u005C\u0022", "TRV of SingleEscapeCharacter (double quote)" + ); +})`\"`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], "\\", "TV of SingleEscapeCharacter (backslash)"); + assert.sameValue( + s.raw[0], "\u005C\u005C", "TRV of SingleEscapeCharacter (backslash)" + ); +})`\\`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], "\b", "TV of SingleEscapeCharacter (backspace)"); + assert.sameValue( + s.raw[0], "\u005Cb", "TRV of SingleEscapeCharacter (backspace)" + ); +})`\b`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], "\f", "TV of SingleEscapeCharacter (form feed)"); + assert.sameValue( + s.raw[0], "\u005Cf", "TRV of SingleEscapeCharacter (form feed)" + ); +})`\f`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], "\n", "TV of SingleEscapeCharacter (new line)"); + assert.sameValue( + s.raw[0], "\u005Cn", "TRV of SingleEscapeCharacter (new line)" + ); +})`\n`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue( + s[0], "\r", "TV of SingleEscapeCharacter (carriage return)" + ); + assert.sameValue( + s.raw[0], "\u005Cr", "TRV of SingleEscapeCharacter (carriage return)" + ); +})`\r`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], " ", "TV of SingleEscapeCharacter (tab)"); + assert.sameValue(s.raw[0], "\u005Ct", "TRV of SingleEscapeCharacter (tab)"); +})`\t`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue( + s[0], "\v", "TV of SingleEscapeCharacter (line tabulation)" + ); + assert.sameValue( + s.raw[0], "\u005Cv", "TRV of SingleEscapeCharacter (line tabulation)" + ); +})`\v`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], "`", "TV of SingleEscapeCharacter (backtick)"); + assert.sameValue( + s.raw[0], "\u005C`", "TRV of SingleEscapeCharacter (backtick)" + ); +})`\``; +assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/trv-utf16-escape-sequence.js b/test/language/expressions/template-literal/tv-hex-escape-sequence.js similarity index 53% rename from test/language/expressions/template-literal/trv-utf16-escape-sequence.js rename to test/language/expressions/template-literal/tv-hex-escape-sequence.js index 14fa3b500a..a6ad55d147 100644 --- a/test/language/expressions/template-literal/trv-utf16-escape-sequence.js +++ b/test/language/expressions/template-literal/tv-hex-escape-sequence.js @@ -1,8 +1,10 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 11.1 description: > + The TV of TemplateCharacter :: \ EscapeSequence is the SV of + EscapeSequence. The SV of UnicodeEscapeSequence :: u{ HexDigits } is the UTF16Encoding (10.1.1) of the MV of HexDigits. The TRV of UnicodeEscapeSequence :: u{ HexDigits } is the sequence @@ -15,15 +17,7 @@ var calls; calls = 0; (function(s) { calls++; - assert.sameValue(s[0], 'abc', '`` sequence template value'); - assert.sameValue(s.raw[0], 'a\\u{62}c', '`` sequence template raw value'); -})`a\u{62}c`; -assert.sameValue(calls, 1); - -calls = 0; -(function(s) { - calls++; - assert.sameValue(s[0], 'abc', 'HexEscapeSequence template value'); - assert.sameValue(s.raw[0], 'a\\u{000062}c', 'HexEscapeSequence template raw value'); -})`a\u{000062}c`; + assert.sameValue(s[0], 'A', 'TV'); + assert.sameValue(s.raw[0], '\\x41', 'TRV'); +})`\x41`; assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/trv-line-continuation.js b/test/language/expressions/template-literal/tv-line-continuation.js similarity index 76% rename from test/language/expressions/template-literal/trv-line-continuation.js rename to test/language/expressions/template-literal/tv-line-continuation.js index c19fe0c53b..92f5ff13f4 100644 --- a/test/language/expressions/template-literal/trv-line-continuation.js +++ b/test/language/expressions/template-literal/tv-line-continuation.js @@ -3,15 +3,19 @@ /*--- es6id: 11.8.6 description: > + The TV of LineContinuation :: \ LineTerminatorSequence is the empty code + unit sequence. The TRV of LineContinuation :: \ LineTerminatorSequence is the sequence consisting of the code unit value 0x005C followed by the code units of TRV of LineTerminatorSequence. ---*/ + var calls; calls = 0; (function(cs) { calls++; + assert.sameValue(cs[0], '', 'Line Feed and Carriage Return'); assert.sameValue( cs.raw[0], '\u005C\n\u005C\n\u005C\n', 'Line Feed and Carriage Return' ); @@ -23,6 +27,7 @@ assert.sameValue(calls, 1); calls = 0; (function(cs) { calls++; + assert.sameValue(cs[0], '', 'Line Separator'); assert.sameValue(cs.raw[0], '\\\u2028', 'Line Separator'); })`\
` assert.sameValue(calls, 1); @@ -30,6 +35,7 @@ assert.sameValue(calls, 1); calls = 0; (function(cs) { calls++; + assert.sameValue(cs[0], '', 'Paragraph Separater'); assert.sameValue(cs.raw[0], '\\\u2029', 'Paragraph Separator'); })`\
` assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/trv-line-terminator-sequence.js b/test/language/expressions/template-literal/tv-line-terminator-sequence.js similarity index 73% rename from test/language/expressions/template-literal/trv-line-terminator-sequence.js rename to test/language/expressions/template-literal/tv-line-terminator-sequence.js index e9ecd41336..475a583766 100644 --- a/test/language/expressions/template-literal/trv-line-terminator-sequence.js +++ b/test/language/expressions/template-literal/tv-line-terminator-sequence.js @@ -1,8 +1,10 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 11.8.6 description: > + The TV of TemplateCharacter :: LineTerminatorSequence is the TRV of + LineTerminatorSequence. The TRV of LineTerminatorSequence :: is the code unit value 0x000A. The TRV of LineTerminatorSequence :: is the code unit value 0x000A. The TRV of LineTerminatorSequence :: is the code unit value 0x2028. @@ -10,11 +12,14 @@ description: > The TRV of LineTerminatorSequence :: is the sequence consisting of the code unit value 0x000A. ---*/ + + var calls; calls = 0; (function(s) { calls++; + assert.sameValue(s[0], '\n\n\n', 'Line Feed and Carriage Return'); assert.sameValue(s.raw[0], '\n\n\n', 'Line Feed and Carriage Return'); })` @@ -24,6 +29,7 @@ assert.sameValue(calls, 1); calls = 0; (function(cs) { calls++; + assert.sameValue(cs[0], '\u2028', 'Line Separator'); assert.sameValue(cs.raw[0], '\u2028', 'Line Separator'); })`
` assert.sameValue(calls, 1); @@ -31,6 +37,7 @@ assert.sameValue(calls, 1); calls = 0; (function(cs) { calls++; + assert.sameValue(cs[0], '\u2029', 'Paragraph Separator'); assert.sameValue(cs.raw[0], '\u2029', 'Paragraph Separator'); })`
` assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/trv-no-substitution.js b/test/language/expressions/template-literal/tv-no-substitution.js similarity index 80% rename from test/language/expressions/template-literal/trv-no-substitution.js rename to test/language/expressions/template-literal/tv-no-substitution.js index 6812185834..7976b042d0 100644 --- a/test/language/expressions/template-literal/trv-no-substitution.js +++ b/test/language/expressions/template-literal/tv-no-substitution.js @@ -7,6 +7,8 @@ description: > sequence. The TV of NoSubstitutionTemplate :: ` TemplateCharacters ` is the TV of TemplateCharacters. + The TRV of NoSubstitutionTemplate :: ` TemplateCharacters ` is the TRV of + TemplateCharacters. ---*/ var calls; @@ -23,5 +25,6 @@ calls = 0; (function(s) { calls++; assert.sameValue(s[0], 'foo', 'Template value (with content)'); + assert.sameValue(s.raw[0], 'foo', 'Template raw value (with content)'); })`foo`; assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/trv-null-character-escape-sequence.js b/test/language/expressions/template-literal/tv-null-character-escape-sequence.js similarity index 80% rename from test/language/expressions/template-literal/trv-null-character-escape-sequence.js rename to test/language/expressions/template-literal/tv-null-character-escape-sequence.js index c7eadf0365e3b306a42f96ac69786673a9a1be7a..afeef1c8c2d7059814238f18bb53f04046d2a51a 100644 GIT binary patch delta 19 bcmeBRdCt5cgmH2(qxf~9BYJ4E!pu}>R(0)b@0Jd}x AY5)KL diff --git a/test/language/expressions/template-literal/tv-template-character.js b/test/language/expressions/template-literal/tv-template-character.js new file mode 100644 index 0000000000..3ae02815bd --- /dev/null +++ b/test/language/expressions/template-literal/tv-template-character.js @@ -0,0 +1,37 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 11.8.6 +description: > + The TV of TemplateCharacters :: TemplateCharacter is the TV of + TemplateCharacter. + The TV of TemplateCharacter :: SourceCharacter but not one of ` or \ or $ + or LineTerminator is the UTF16Encoding (10.1.1) of the code point value of + SourceCharacter. + The TV of TemplateCharacter :: $ is the code unit value 0x0024. + + The TRV of TemplateCharacters :: TemplateCharacter is the TRV of + TemplateCharacter. + The TRV of TemplateCharacter :: SourceCharacter but not one of ` or \ or $ + or LineTerminator is the UTF16Encoding (10.1.1) of the code point value of + SourceCharacter. + The TRV of TemplateCharacter :: $ is the code unit value 0x0024. +---*/ + +var calls; + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], 'a', '`a` character TV'); + assert.sameValue(s.raw[0], 'a', '`a` character TRV'); +})`a`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], '$', '`$` character TV'); + assert.sameValue(s.raw[0], '$', '`$` character TRV'); +})`$`; +assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/tv-template-characters.js b/test/language/expressions/template-literal/tv-template-characters.js new file mode 100644 index 0000000000..34faf28d50 --- /dev/null +++ b/test/language/expressions/template-literal/tv-template-characters.js @@ -0,0 +1,22 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 11.8.6 +description: > + The TV of TemplateCharacters :: TemplateCharacter TemplateCharacters is a + sequence consisting of the code units in the TV of TemplateCharacter + followed by all the code units in the TV of TemplateCharacters in order. + The TRV of TemplateCharacters :: TemplateCharacter TemplateCharacters is a + sequence consisting of the code units in the TRV of TemplateCharacter + followed by all the code units in the TRV of TemplateCharacters, in order. +---*/ + +var calls = 0; + +(function(s) { + calls++; + assert.sameValue(s.raw[0], 'test'); +})`test`; + +assert.sameValue(calls, 1); +assert.sameValue(`test`, 'test'); diff --git a/test/language/expressions/template-literal/tv-template-middle.js b/test/language/expressions/template-literal/tv-template-middle.js index db100e9239..836e2e1ee0 100644 --- a/test/language/expressions/template-literal/tv-template-middle.js +++ b/test/language/expressions/template-literal/tv-template-middle.js @@ -4,8 +4,6 @@ es6id: 11.8.6 description: > The TV and TRV of TemplateMiddle :: }${ is the empty code unit sequence. - The TV of TemplateMiddle :: } TemplateCharacters ${ is the TV of - TemplateCharacters. The TRV of TemplateMiddle :: } TemplateCharacters ${ is the TRV of TemplateCharacters. ---*/ diff --git a/test/language/expressions/template-literal/tv-utf16-escape-sequence.js b/test/language/expressions/template-literal/tv-utf16-escape-sequence.js new file mode 100644 index 0000000000..fdb5f01c12 --- /dev/null +++ b/test/language/expressions/template-literal/tv-utf16-escape-sequence.js @@ -0,0 +1,49 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 11.1 +description: > + The TV of TemplateCharacter :: \ EscapeSequence is the SV of + EscapeSequence. + The SV of UnicodeEscapeSequence :: u{ HexDigits } is the UTF16Encoding + (10.1.1) of the MV of HexDigits. + The TRV of UnicodeEscapeSequence :: u Hex4Digits is the sequence consisting + of code unit value 0x0075 followed by TRV of Hex4Digits. + The TRV of UnicodeEscapeSequence :: u{ HexDigits } is the sequence + consisting of code unit value 0x0075 followed by code unit value 0x007B + followed by TRV of HexDigits followed by code unit value 0x007D. +---*/ + +var calls; + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], 'b', 'u Hex4Digits template value'); + assert.sameValue(s.raw[0], '\\u0062', 'u Hex4Digits template raw value'); +})`\u0062`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue(s[0], 'b', 'u{ HexDigits } template value'); + assert.sameValue( + s.raw[0], '\\u{62}', 'u{ Hex4Digits } template raw value' + ); +})`\u{62}`; +assert.sameValue(calls, 1); + +calls = 0; +(function(s) { + calls++; + assert.sameValue( + s[0], 'b', 'u{ HexDigits } template value (with leading zeros)' + ); + assert.sameValue( + s.raw[0], + '\\u{000062}', + 'u{ HexDigits } template raw value (with leading zeros)' + ); +})`\u{000062}`; +assert.sameValue(calls, 1); diff --git a/test/language/expressions/template-literal/tv-zwnbsp.js b/test/language/expressions/template-literal/tv-zwnbsp.js new file mode 100644 index 0000000000..68111045b9 --- /dev/null +++ b/test/language/expressions/template-literal/tv-zwnbsp.js @@ -0,0 +1,32 @@ +// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 11.1 +description: > + The zero width no-break space format-control character may be used within + template literals. +---*/ + +var callCount; + +callCount = 0; +(function(s) { + callCount++; + assert.sameValue( + s[0], 'test', 'TV (specified via unicode escape sequence)' + ); + assert.sameValue( + s.raw[0], '\\uFEFFtest', 'TV (specified via unicode escape sequence)' + ); +})`\uFEFFtest`; +assert.sameValue(callCount, 1); + +callCount = 0; +(function(s) { + callCount++; + assert.sameValue(s[0], 'test', 'TV (specified via literal character)'); + assert.sameValue( + s.raw[0], 'test', 'TV (specified via literal character)' + ); +})`test`; +assert.sameValue(callCount, 1); From 80c67e56c1029568c8ff0cad920dfe6fa0b13e0c Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Fri, 12 Jun 2015 10:22:24 -0400 Subject: [PATCH 3/6] Remove duplicative test The assertions of this file are also made in another more complete test: `tv-line-terminator-sequence.js`. Remove this file in favor of that one. --- .../expressions/template-literal/tv-muti-line.js | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 test/language/expressions/template-literal/tv-muti-line.js diff --git a/test/language/expressions/template-literal/tv-muti-line.js b/test/language/expressions/template-literal/tv-muti-line.js deleted file mode 100644 index cafb05179a..0000000000 --- a/test/language/expressions/template-literal/tv-muti-line.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -es6id: 11.8.6 -description: > - The TV of TemplateCharacter :: \ EscapeSequence is the SV of - EscapeSequence. ----*/ -assert.sameValue(`foo - bar - baz`, 'foo\n bar\n baz'); - -assert.sameValue(eval('`foo\r\n bar\r baz`'), 'foo\n bar\n baz'); From ef7ddf9f7ed0a79380c9f6db43bb2dc0d4e7ad33 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Fri, 12 Jun 2015 11:02:07 -0400 Subject: [PATCH 4/6] Improve frontmatter usage Define explanatory text using the `info` tag and include single-line descriptions. --- .../cache-differing-expressions-eval.js | 3 ++- .../cache-differing-expressions-new-function.js | 3 ++- .../cache-differing-expressions.js | 3 ++- .../cache-differing-raw-strings.js | 3 ++- .../cache-differing-string-count.js | 3 ++- .../cache-identical-source-eval.js | 3 ++- .../cache-identical-source-new-function.js | 3 ++- .../tagged-template/cache-identical-source.js | 3 ++- ...ember-expression-argument-list-evaluation.js | 3 ++- .../member-expression-context.js | 3 ++- .../template-object-frozen-non-strict.js | 3 ++- .../template-object-frozen-strict.js | 3 ++- .../tagged-template/template-object.js | 3 ++- .../template-literal/evaluation-order.js | 3 +-- ...cimal-character-escape-sequence-truncated.js | 5 +++-- .../invalid-legacy-octal-escape-sequence.js | 3 ++- ...invalid-unicode-escape-sequence-truncated.js | 3 ++- .../tv-character-escape-sequence.js | 5 +++-- .../template-literal/tv-hex-escape-sequence.js | 5 +++-- .../template-literal/tv-line-continuation.js | 5 +++-- .../tv-line-terminator-sequence.js | 5 +++-- .../template-literal/tv-no-substitution.js | 5 +++-- .../tv-null-character-escape-sequence.js | Bin 487 -> 549 bytes .../template-literal/tv-template-character.js | 5 +++-- .../template-literal/tv-template-characters.js | 5 +++-- .../template-literal/tv-template-head.js | 5 +++-- .../template-literal/tv-template-middle.js | 5 +++-- .../template-literal/tv-template-tail.js | 5 +++-- .../tv-utf16-escape-sequence.js | 5 +++-- .../expressions/template-literal/tv-zwnbsp.js | 5 +++-- 30 files changed, 70 insertions(+), 43 deletions(-) diff --git a/test/language/expressions/tagged-template/cache-differing-expressions-eval.js b/test/language/expressions/tagged-template/cache-differing-expressions-eval.js index c233db3b86..aa09319aa1 100644 --- a/test/language/expressions/tagged-template/cache-differing-expressions-eval.js +++ b/test/language/expressions/tagged-template/cache-differing-expressions-eval.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Template caching using distinct expressions within `eval` +info: > Previously-created template objects should be retrieved from the internal template registry when their source is identical but their expressions evaluate to different values and the tagged template is being evaluated in diff --git a/test/language/expressions/tagged-template/cache-differing-expressions-new-function.js b/test/language/expressions/tagged-template/cache-differing-expressions-new-function.js index 4fe47eabc1..4a8cdb6986 100644 --- a/test/language/expressions/tagged-template/cache-differing-expressions-new-function.js +++ b/test/language/expressions/tagged-template/cache-differing-expressions-new-function.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Template caching using distinct expressions within `new Function` +info: > Previously-created template objects should be retrieved from the internal template registry when their source is identical but their expressions evaluate to different values and the tagged template is being evaluated in diff --git a/test/language/expressions/tagged-template/cache-differing-expressions.js b/test/language/expressions/tagged-template/cache-differing-expressions.js index 88495e3504..e74ba4601c 100644 --- a/test/language/expressions/tagged-template/cache-differing-expressions.js +++ b/test/language/expressions/tagged-template/cache-differing-expressions.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Template caching using distinct expressions +info: > Previously-created template objects should be retrieved from the internal template registry when their source is identical but their expressions evaluate to different values. diff --git a/test/language/expressions/tagged-template/cache-differing-raw-strings.js b/test/language/expressions/tagged-template/cache-differing-raw-strings.js index 98bb3568ec..252736f504 100644 --- a/test/language/expressions/tagged-template/cache-differing-raw-strings.js +++ b/test/language/expressions/tagged-template/cache-differing-raw-strings.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Templates are cached according to their "raw" representation +info: > The internal template registry should be queried according to the "raw" strings of the tagged template. ---*/ diff --git a/test/language/expressions/tagged-template/cache-differing-string-count.js b/test/language/expressions/tagged-template/cache-differing-string-count.js index 30afbe9426..60e2eb23d5 100644 --- a/test/language/expressions/tagged-template/cache-differing-string-count.js +++ b/test/language/expressions/tagged-template/cache-differing-string-count.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Templates are cached according to the number of "raw" strings +info: > The internal template registry should be queried according to the number of "raw" strings in the tagged template. ---*/ diff --git a/test/language/expressions/tagged-template/cache-identical-source-eval.js b/test/language/expressions/tagged-template/cache-identical-source-eval.js index a835344820..383fc4f593 100644 --- a/test/language/expressions/tagged-template/cache-identical-source-eval.js +++ b/test/language/expressions/tagged-template/cache-identical-source-eval.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Template caching using identical expressions within `eval` +info: > Previously-created template objects should be retrieved from the internal template registry when their source is identical and the tagged template is being evaluated in an `eval` context. diff --git a/test/language/expressions/tagged-template/cache-identical-source-new-function.js b/test/language/expressions/tagged-template/cache-identical-source-new-function.js index f262e55c8d..511186f218 100644 --- a/test/language/expressions/tagged-template/cache-identical-source-new-function.js +++ b/test/language/expressions/tagged-template/cache-identical-source-new-function.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Template caching using identical expressions within `new Function` +info: > Previously-created template objects should be retrieved from the internal template registry when their source is identical and the tagged template is being evaluated in a `new Function` context. diff --git a/test/language/expressions/tagged-template/cache-identical-source.js b/test/language/expressions/tagged-template/cache-identical-source.js index dc844481f2..3e09fbd937 100644 --- a/test/language/expressions/tagged-template/cache-identical-source.js +++ b/test/language/expressions/tagged-template/cache-identical-source.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > +description: Template caching using identical expressions +info: > Previously-created template objects should be retrieved from the internal template registry when their source is identical. ---*/ diff --git a/test/language/expressions/tagged-template/member-expression-argument-list-evaluation.js b/test/language/expressions/tagged-template/member-expression-argument-list-evaluation.js index ffd67875b2..866efa1995 100644 --- a/test/language/expressions/tagged-template/member-expression-argument-list-evaluation.js +++ b/test/language/expressions/tagged-template/member-expression-argument-list-evaluation.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.3.7 -description: > +description: Argument list evalution for member expresions +info: > A tagged template is a function call where the arguments of the call are derived from a TemplateLiteral. The actual arguments include a template object and the values produced by evaluating the expressions embedded diff --git a/test/language/expressions/tagged-template/member-expression-context.js b/test/language/expressions/tagged-template/member-expression-context.js index 818a9e50c6..8575e6e64d 100644 --- a/test/language/expressions/tagged-template/member-expression-context.js +++ b/test/language/expressions/tagged-template/member-expression-context.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.3.7 -description: > +description: Invocation context for member expressions +info: > A tagged template is a function call where the arguments of the call are derived from a TemplateLiteral. The actual arguments include a template object and the values produced by evaluating the expressions embedded diff --git a/test/language/expressions/tagged-template/template-object-frozen-non-strict.js b/test/language/expressions/tagged-template/template-object-frozen-non-strict.js index 3b489f2938..d338fa5d08 100644 --- a/test/language/expressions/tagged-template/template-object-frozen-non-strict.js +++ b/test/language/expressions/tagged-template/template-object-frozen-non-strict.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.3.7 -description: > +description: Template objects are frozen (as demonstrated outside of strict mode) +info: > The first argument to a tagged template should be frozen and define a `raw` property that is also frozen. flags: [noStrict] diff --git a/test/language/expressions/tagged-template/template-object-frozen-strict.js b/test/language/expressions/tagged-template/template-object-frozen-strict.js index 2f5cb7b309..9853d22838 100644 --- a/test/language/expressions/tagged-template/template-object-frozen-strict.js +++ b/test/language/expressions/tagged-template/template-object-frozen-strict.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.3.7 -description: > +description: Template objects are frozen (as demonstrated within strict mode) +info: > The first argument to a tagged template should be frozen and define a `raw` property that is also frozen. flags: [onlyStrict] diff --git a/test/language/expressions/tagged-template/template-object.js b/test/language/expressions/tagged-template/template-object.js index 15f5b092d2..b4286e1467 100644 --- a/test/language/expressions/tagged-template/template-object.js +++ b/test/language/expressions/tagged-template/template-object.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.3.7 -description: > +description: Properties of the template object +info: > The first argument to a tagged template should be a template object as defined by the GetTemplateObject abstract operation. includes: [propertyHelper.js] diff --git a/test/language/expressions/template-literal/evaluation-order.js b/test/language/expressions/template-literal/evaluation-order.js index b707f6d2c2..45c5bc664f 100644 --- a/test/language/expressions/template-literal/evaluation-order.js +++ b/test/language/expressions/template-literal/evaluation-order.js @@ -2,8 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 12.2.8 -description: > - Expressions should be evaluated in left-to-right order. +description: Expressions should be evaluated in left-to-right order. ---*/ var tag = function(templateObject, a, b, c) { diff --git a/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js b/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js index 4f1f3f6e6e..e3c07bf7bb 100644 --- a/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js +++ b/test/language/expressions/template-literal/invalid-hexidecimal-character-escape-sequence-truncated.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Invalid hexidecimal character escape sequence +info: > The TV of TemplateCharacter :: \ EscapeSequence is the SV of EscapeSequence. negative: SyntaxError diff --git a/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js b/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js index 20e308e69c..baa0873896 100644 --- a/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js +++ b/test/language/expressions/template-literal/invalid-legacy-octal-escape-sequence.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 16.1 -description: > +description: Invalid octal escape sequence +info: > TemplateCharacter (11.8.6) must not be extended to include LegacyOctalEscapeSequence as defined in B.1.2. negative: SyntaxError diff --git a/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js b/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js index f614cc00fa..79a1826c9e 100644 --- a/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js +++ b/test/language/expressions/template-literal/invalid-unicode-escape-sequence-truncated.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 11.8.6 -description: > +description: Invalid unicode escape sequence +info: > The TV of TemplateCharacter :: \ EscapeSequence is the SV of EscapeSequence. negative: SyntaxError diff --git a/test/language/expressions/template-literal/tv-character-escape-sequence.js b/test/language/expressions/template-literal/tv-character-escape-sequence.js index c686272c76..8b7f74aeb8 100644 --- a/test/language/expressions/template-literal/tv-character-escape-sequence.js +++ b/test/language/expressions/template-literal/tv-character-escape-sequence.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of character escape sequences +info: > The TV of TemplateCharacter :: \ EscapeSequence is the SV of EscapeSequence. The TRV of TemplateCharacter :: \ EscapeSequence is the sequence consisting diff --git a/test/language/expressions/template-literal/tv-hex-escape-sequence.js b/test/language/expressions/template-literal/tv-hex-escape-sequence.js index a6ad55d147..70ab99e2a8 100644 --- a/test/language/expressions/template-literal/tv-hex-escape-sequence.js +++ b/test/language/expressions/template-literal/tv-hex-escape-sequence.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.1 -description: > +es6id: 11.8.6.1 +description: Template values of hex escape sequences +info: > The TV of TemplateCharacter :: \ EscapeSequence is the SV of EscapeSequence. The SV of UnicodeEscapeSequence :: u{ HexDigits } is the UTF16Encoding diff --git a/test/language/expressions/template-literal/tv-line-continuation.js b/test/language/expressions/template-literal/tv-line-continuation.js index 92f5ff13f4..14f0f1384b 100644 --- a/test/language/expressions/template-literal/tv-line-continuation.js +++ b/test/language/expressions/template-literal/tv-line-continuation.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of line continuations +info: > The TV of LineContinuation :: \ LineTerminatorSequence is the empty code unit sequence. The TRV of LineContinuation :: \ LineTerminatorSequence is the sequence diff --git a/test/language/expressions/template-literal/tv-line-terminator-sequence.js b/test/language/expressions/template-literal/tv-line-terminator-sequence.js index 475a583766..f3275ca15b 100644 --- a/test/language/expressions/template-literal/tv-line-terminator-sequence.js +++ b/test/language/expressions/template-literal/tv-line-terminator-sequence.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of line terminator sequences +info: > The TV of TemplateCharacter :: LineTerminatorSequence is the TRV of LineTerminatorSequence. The TRV of LineTerminatorSequence :: is the code unit value 0x000A. diff --git a/test/language/expressions/template-literal/tv-no-substitution.js b/test/language/expressions/template-literal/tv-no-substitution.js index 7976b042d0..8d285bd2ef 100644 --- a/test/language/expressions/template-literal/tv-no-substitution.js +++ b/test/language/expressions/template-literal/tv-no-substitution.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of templates without substitution patterns +info: > The TV and TRV of NoSubstitutionTemplate :: `` is the empty code unit sequence. The TV of NoSubstitutionTemplate :: ` TemplateCharacters ` is the TV of diff --git a/test/language/expressions/template-literal/tv-null-character-escape-sequence.js b/test/language/expressions/template-literal/tv-null-character-escape-sequence.js index afeef1c8c2d7059814238f18bb53f04046d2a51a..caa219a13082262b7c120a67a78a1e44733c354c 100644 GIT binary patch delta 85 zcmaFPyp(0aaxXnYu9Vc` +es6id: 11.8.6.1 +description: Template values of single characters +info: > The TV of TemplateCharacters :: TemplateCharacter is the TV of TemplateCharacter. The TV of TemplateCharacter :: SourceCharacter but not one of ` or \ or $ diff --git a/test/language/expressions/template-literal/tv-template-characters.js b/test/language/expressions/template-literal/tv-template-characters.js index 34faf28d50..9e32828255 100644 --- a/test/language/expressions/template-literal/tv-template-characters.js +++ b/test/language/expressions/template-literal/tv-template-characters.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of multiple template characters +info: > The TV of TemplateCharacters :: TemplateCharacter TemplateCharacters is a sequence consisting of the code units in the TV of TemplateCharacter followed by all the code units in the TV of TemplateCharacters in order. diff --git a/test/language/expressions/template-literal/tv-template-head.js b/test/language/expressions/template-literal/tv-template-head.js index b73dd3b563..895a1f5c63 100644 --- a/test/language/expressions/template-literal/tv-template-head.js +++ b/test/language/expressions/template-literal/tv-template-head.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of the template head pattern +info: > The TV and TRV of TemplateHead :: `${ is the empty code unit sequence. The TV of TemplateHead :: ` TemplateCharacters ${ is the TV of TemplateCharacters. diff --git a/test/language/expressions/template-literal/tv-template-middle.js b/test/language/expressions/template-literal/tv-template-middle.js index 836e2e1ee0..ca6cb0ca8a 100644 --- a/test/language/expressions/template-literal/tv-template-middle.js +++ b/test/language/expressions/template-literal/tv-template-middle.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of the template middle pattern +info: > The TV and TRV of TemplateMiddle :: }${ is the empty code unit sequence. The TRV of TemplateMiddle :: } TemplateCharacters ${ is the TRV of TemplateCharacters. diff --git a/test/language/expressions/template-literal/tv-template-tail.js b/test/language/expressions/template-literal/tv-template-tail.js index 541883eedb..941cadf38d 100644 --- a/test/language/expressions/template-literal/tv-template-tail.js +++ b/test/language/expressions/template-literal/tv-template-tail.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.8.6 -description: > +es6id: 11.8.6.1 +description: Template values of the template tail pattern +info: > The TV and TRV of TemplateTail :: }` is the empty code unit sequence. The TV of TemplateTail :: } TemplateCharacters ` is the TV of TemplateCharacters. diff --git a/test/language/expressions/template-literal/tv-utf16-escape-sequence.js b/test/language/expressions/template-literal/tv-utf16-escape-sequence.js index fdb5f01c12..ba4ffc830f 100644 --- a/test/language/expressions/template-literal/tv-utf16-escape-sequence.js +++ b/test/language/expressions/template-literal/tv-utf16-escape-sequence.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.1 -description: > +es6id: 11.8.6.1 +description: Template values of UTF-16 escape sequences +info: > The TV of TemplateCharacter :: \ EscapeSequence is the SV of EscapeSequence. The SV of UnicodeEscapeSequence :: u{ HexDigits } is the UTF16Encoding diff --git a/test/language/expressions/template-literal/tv-zwnbsp.js b/test/language/expressions/template-literal/tv-zwnbsp.js index 68111045b9..2197874b81 100644 --- a/test/language/expressions/template-literal/tv-zwnbsp.js +++ b/test/language/expressions/template-literal/tv-zwnbsp.js @@ -1,8 +1,9 @@ // Copyright (C) Copyright 2014 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -es6id: 11.1 -description: > +es6id: 11.1.8.6.1 +description: Template values of the zero width no-break space character +info: > The zero width no-break space format-control character may be used within template literals. ---*/ From e42f977122a16d0b086ec9c6b1c498fff542118e Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Tue, 16 Jun 2015 15:10:09 -0400 Subject: [PATCH 5/6] fixup! Introduce additional tests for ES6 templates Ensure test files assert the described behavior. Extend coverage to strict and non-strict mode explicitly. --- .../call-expression-context-no-strict.js | 22 +++++++++++++++++++ ...t.js => call-expression-context-strict.js} | 5 +++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 test/language/expressions/tagged-template/call-expression-context-no-strict.js rename test/language/expressions/tagged-template/{call-expression-context.js => call-expression-context-strict.js} (89%) diff --git a/test/language/expressions/tagged-template/call-expression-context-no-strict.js b/test/language/expressions/tagged-template/call-expression-context-no-strict.js new file mode 100644 index 0000000000..834ebc71b5 --- /dev/null +++ b/test/language/expressions/tagged-template/call-expression-context-no-strict.js @@ -0,0 +1,22 @@ +// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 12.3.7 +description: Invocation context for call expressions +info: > + A tagged template is a function call where the arguments of the call are + derived from a TemplateLiteral. The actual arguments include a template + object and the values produced by evaluating the expressions embedded + within the TemplateLiteral. +flags: [noStrict] +---*/ +var context = null; +var fn = function() { + return function() { + context = this; + }; +}; + +fn()`NoSubstitutionTemplate`; + +assert.sameValue(context, this); diff --git a/test/language/expressions/tagged-template/call-expression-context.js b/test/language/expressions/tagged-template/call-expression-context-strict.js similarity index 89% rename from test/language/expressions/tagged-template/call-expression-context.js rename to test/language/expressions/tagged-template/call-expression-context-strict.js index e58ff26b73..1bdb6ec2b2 100644 --- a/test/language/expressions/tagged-template/call-expression-context.js +++ b/test/language/expressions/tagged-template/call-expression-context-strict.js @@ -8,14 +8,15 @@ info: > derived from a TemplateLiteral. The actual arguments include a template object and the values produced by evaluating the expressions embedded within the TemplateLiteral. +flags: [onlyStrict] ---*/ -var context; +var context = null; var fn = function() { return function() { context = this; }; }; -fn`NoSubstitutionTemplate`; +fn()`NoSubstitutionTemplate`; assert.sameValue(context, undefined); From 6863328f883cf44a7c2fda846a404ec129f2ad31 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Tue, 16 Jun 2015 16:08:03 -0400 Subject: [PATCH 6/6] fixup! Introduce additional tests for ES6 templates Include tests using arrow functions --- .../tagged-template/call-expression-context-no-strict.js | 9 +++++++++ .../tagged-template/call-expression-context-strict.js | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/test/language/expressions/tagged-template/call-expression-context-no-strict.js b/test/language/expressions/tagged-template/call-expression-context-no-strict.js index 834ebc71b5..5ca66f999a 100644 --- a/test/language/expressions/tagged-template/call-expression-context-no-strict.js +++ b/test/language/expressions/tagged-template/call-expression-context-no-strict.js @@ -20,3 +20,12 @@ var fn = function() { fn()`NoSubstitutionTemplate`; assert.sameValue(context, this); + +fn = function() { + return () => { context = this; }; +}; + +context = null; +fn()`NoSubstitutionTemplate`; + +assert.sameValue(context, this); diff --git a/test/language/expressions/tagged-template/call-expression-context-strict.js b/test/language/expressions/tagged-template/call-expression-context-strict.js index 1bdb6ec2b2..d90aa46167 100644 --- a/test/language/expressions/tagged-template/call-expression-context-strict.js +++ b/test/language/expressions/tagged-template/call-expression-context-strict.js @@ -20,3 +20,12 @@ var fn = function() { fn()`NoSubstitutionTemplate`; assert.sameValue(context, undefined); + +fn = function() { + return () => { context = this; }; +}; + +context = null; +fn()`NoSubstitutionTemplate`; + +assert.sameValue(context, undefined);