mirror of
https://github.com/tc39/test262.git
synced 2025-04-08 19:35:28 +02:00
Merge pull request #218 from bocoup/templates
Import tests from Google V8 (templates)
This commit is contained in:
commit
a6ca558d46
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
||||
*.js diff
|
@ -0,0 +1,13 @@
|
||||
// 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: >
|
||||
The expression within the template should be evaluated according to the
|
||||
semantics of the surrounding context.
|
||||
The SV of EscapeSequence :: HexEscapeSequence is the SV of the
|
||||
HexEscapeSequence.
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
assert.sameValue(`${'\07'}`, '');
|
14
test/annexB/templates/legacy-octal-escape-sequence-strict.js
Normal file
14
test/annexB/templates/legacy-octal-escape-sequence-strict.js
Normal file
@ -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
|
||||
description: >
|
||||
The expression within the template should be evaluated according to the
|
||||
semantics of the surrounding context.
|
||||
The SV of EscapeSequence :: HexEscapeSequence is the SV of the
|
||||
HexEscapeSequence.
|
||||
negative: SyntaxError
|
||||
flags: [onlyStrict]
|
||||
---*/
|
||||
|
||||
`${'\07'}`;
|
21
test/built-ins/String/raw/special-characters.js
Normal file
21
test/built-ins/String/raw/special-characters.js
Normal file
@ -0,0 +1,21 @@
|
||||
// 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: 21.1.2.4
|
||||
description: >
|
||||
When used as a tag function of a tagged template, `String.raw` should
|
||||
return the "raw" representation of the template.
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
String.raw`\u0065\`\r\r\n\n${'test'}check`,
|
||||
'\\u0065\\`\\r\\r\\n\\ntestcheck',
|
||||
'Unicode escape sequences'
|
||||
);
|
||||
assert.sameValue(
|
||||
String.raw`\
\
|
||||
\
|
||||
`,
|
||||
'\\\n\\\n\\\n',
|
||||
'Literal characters'
|
||||
);
|
9
test/built-ins/String/raw/zero-literal-segments.js
Normal file
9
test/built-ins/String/raw/zero-literal-segments.js
Normal file
@ -0,0 +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: 21.1.2.4
|
||||
description: >
|
||||
If literalSegments ≤ 0, return the empty string.
|
||||
---*/
|
||||
|
||||
assert.sameValue(String.raw``, '');
|
@ -0,0 +1,25 @@
|
||||
// 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: >
|
||||
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
|
||||
an `eval` context.
|
||||
---*/
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
var a = 1;
|
||||
var b = 2;
|
||||
var firstObject = null;
|
||||
var previousObject = null;
|
||||
|
||||
tag`head${a}tail`;
|
||||
firstObject = previousObject;
|
||||
assert(firstObject !== null);
|
||||
previousObject = null;
|
||||
|
||||
eval('tag`head${b}tail`');
|
||||
assert.sameValue(previousObject, firstObject);
|
@ -0,0 +1,29 @@
|
||||
// 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: >
|
||||
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
|
||||
an `eval` context.
|
||||
---*/
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
var a = 1;
|
||||
var b = 2;
|
||||
var firstObject = null;
|
||||
var previousObject = null;
|
||||
|
||||
tag`head${a}tail`;
|
||||
firstObject = previousObject;
|
||||
assert(firstObject !== null);
|
||||
previousObject = null;
|
||||
|
||||
(new Function('tag', 'a', 'b', 'return tag`head${b}tail`;'))(tag, 1, 2);
|
||||
assert.sameValue(
|
||||
previousObject,
|
||||
firstObject,
|
||||
'The realm\'s template cache is referenced when tagged templates are declared within "new Function" contexts and templated values differ'
|
||||
);
|
@ -0,0 +1,24 @@
|
||||
// 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: >
|
||||
Previously-created template objects should be retrieved from the internal
|
||||
template registry when their source is identical but their expressions
|
||||
evaluate to different values.
|
||||
---*/
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
var a = 1;
|
||||
var b = 2;
|
||||
var firstObject = null;
|
||||
var previousObject = null;
|
||||
|
||||
tag`head${a}tail`;
|
||||
firstObject = previousObject;
|
||||
assert(firstObject !== null);
|
||||
previousObject = null;
|
||||
|
||||
tag`head${b}tail`;
|
||||
assert.sameValue(previousObject, firstObject);
|
@ -0,0 +1,24 @@
|
||||
// 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: >
|
||||
The internal template registry should be queried according to the "raw"
|
||||
strings of the tagged template.
|
||||
---*/
|
||||
var previousObject = null;
|
||||
var firstObject = null;
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
|
||||
tag`\uc548\ub155`;
|
||||
|
||||
assert(previousObject !== null);
|
||||
firstObject = previousObject;
|
||||
previousObject = null;
|
||||
|
||||
tag`안녕`;
|
||||
|
||||
assert(previousObject !== null);
|
||||
assert(firstObject !== previousObject);
|
@ -0,0 +1,24 @@
|
||||
// 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: >
|
||||
The internal template registry should be queried according to the number of
|
||||
"raw" strings in the tagged template.
|
||||
---*/
|
||||
var previousObject = null;
|
||||
var firstObject = null;
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
|
||||
tag`foo${1}bar`;
|
||||
|
||||
assert(previousObject !== null);
|
||||
firstObject = previousObject;
|
||||
previousObject = null;
|
||||
|
||||
tag`foo\${1}bar`;
|
||||
|
||||
assert(previousObject !== null);
|
||||
assert(firstObject !== previousObject);
|
@ -0,0 +1,23 @@
|
||||
// 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: >
|
||||
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.
|
||||
---*/
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
var a = 1;
|
||||
var firstObject = null;
|
||||
var previousObject = null;
|
||||
|
||||
tag`head${a}tail`;
|
||||
firstObject = previousObject;
|
||||
assert(firstObject !== null);
|
||||
previousObject = null;
|
||||
|
||||
eval('tag`head${a}tail`');
|
||||
assert.sameValue(previousObject, firstObject);
|
@ -0,0 +1,23 @@
|
||||
// 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: >
|
||||
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.
|
||||
---*/
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
var a = 1;
|
||||
var firstObject = null;
|
||||
var previousObject = null;
|
||||
|
||||
tag`head${a}tail`;
|
||||
firstObject = previousObject;
|
||||
assert(firstObject !== null);
|
||||
previousObject = null;
|
||||
|
||||
(new Function('tag', 'a', 'b', 'return tag`head${b}tail`;'))(tag, 1, 2);
|
||||
assert.sameValue(previousObject, firstObject);
|
@ -0,0 +1,26 @@
|
||||
// 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: >
|
||||
Previously-created template objects should be retrieved from the internal
|
||||
template registry when their source is identical.
|
||||
---*/
|
||||
function tag(templateObject) {
|
||||
previousObject = templateObject;
|
||||
}
|
||||
var a = 1;
|
||||
var firstObject = null;
|
||||
var previousObject = null;
|
||||
|
||||
tag`head${a}tail`;
|
||||
firstObject = previousObject;
|
||||
assert(firstObject !== null);
|
||||
previousObject = null;
|
||||
|
||||
tag`head${a}tail`;
|
||||
assert.sameValue(
|
||||
previousObject,
|
||||
firstObject,
|
||||
'The realm\'s template cache is used when tagged templates are executed in the source code directly'
|
||||
);
|
25
test/language/expressions/template/evaluation-order.js
Normal file
25
test/language/expressions/template/evaluation-order.js
Normal file
@ -0,0 +1,25 @@
|
||||
// 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 in left-to-right order.
|
||||
---*/
|
||||
|
||||
var tag = function(templateObject, a, b, c) {
|
||||
callCount++;
|
||||
assert.sameValue(a, 0);
|
||||
assert.sameValue(b, 1);
|
||||
assert.sameValue(c, 2);
|
||||
};
|
||||
var i = 0;
|
||||
var callCount;
|
||||
|
||||
assert.sameValue(`a${ i++ }b${ i++ }c${ i++ }d`, 'a0b1c2d');
|
||||
|
||||
i = 0;
|
||||
callCount = 0;
|
||||
|
||||
tag`a${ i++ }b${ i++ }c${ i++ }d`;
|
||||
|
||||
assert.sameValue(callCount, 1);
|
11
test/language/expressions/template/function-invocation.js
Normal file
11
test/language/expressions/template/function-invocation.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 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');
|
13
test/language/expressions/template/method-invocation.js
Normal file
13
test/language/expressions/template/method-invocation.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 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');
|
19
test/language/expressions/template/object-deference.js
Normal file
19
test/language/expressions/template/object-deference.js
Normal file
@ -0,0 +1,19 @@
|
||||
// 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 = {
|
||||
number: 5,
|
||||
string: 'stringValue'
|
||||
};
|
||||
|
||||
assert.sameValue(
|
||||
`foo ${object.number} bar`, 'foo 5 bar', 'number value property'
|
||||
);
|
||||
assert.sameValue(
|
||||
`foo ${object.string} bar`, 'foo stringValue bar', 'string value property'
|
||||
);
|
24
test/language/expressions/template/object.js
Normal file
24
test/language/expressions/template/object.js
Normal file
@ -0,0 +1,24 @@
|
||||
// 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 plain = {};
|
||||
var custom = {
|
||||
toString: function() {
|
||||
return '"own" toString';
|
||||
}
|
||||
};
|
||||
|
||||
assert.sameValue(`${plain}`, '[object Object]');
|
||||
assert.sameValue(`1${plain}`, '1[object Object]');
|
||||
assert.sameValue(`${plain}2`, '[object Object]2');
|
||||
assert.sameValue(`1${plain}2`, '1[object Object]2');
|
||||
|
||||
assert.sameValue(`${custom}`, '"own" toString');
|
||||
assert.sameValue(`1${custom}`, '1"own" toString');
|
||||
assert.sameValue(`${custom}2`, '"own" toString2');
|
||||
assert.sameValue(`1${custom}2`, '1"own" toString2');
|
11
test/language/expressions/template/primitives.js
Normal file
11
test/language/expressions/template/primitives.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 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');
|
@ -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: 12.3.7
|
||||
description: >
|
||||
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() {
|
||||
calls++;
|
||||
assert.sameValue(
|
||||
arguments.length, 1, 'NoSubstitutionTemplate arguments length'
|
||||
);
|
||||
})`NoSubstitutionTemplate`;
|
||||
assert.sameValue(calls, 1, 'NoSubstitutionTemplate function invocation');
|
||||
|
||||
calls = 0;
|
||||
(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');
|
@ -0,0 +1,20 @@
|
||||
// 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.3.7
|
||||
description: >
|
||||
Tagged templates may be chained and are applied in a left-to-right order.
|
||||
---*/
|
||||
|
||||
var callCount = 0;
|
||||
var expected = ['x', 'y', 'z'];
|
||||
var tag = function(templateObject) {
|
||||
assert.sameValue(templateObject[0], expected[callCount]);
|
||||
callCount++;
|
||||
return tag;
|
||||
}
|
||||
|
||||
var result = tag`x``y``z`;
|
||||
|
||||
assert.sameValue(callCount, 3);
|
||||
assert.sameValue(result, tag);
|
@ -0,0 +1,27 @@
|
||||
// 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.3.7
|
||||
description: >
|
||||
Tagged template application takes precedence over `new` invocation.
|
||||
---*/
|
||||
|
||||
function Constructor(x) {
|
||||
arg = x;
|
||||
}
|
||||
var tag = function(x) {
|
||||
templateObject = x;
|
||||
return Constructor;
|
||||
};
|
||||
var arg = null;
|
||||
var instance, templateObject;
|
||||
|
||||
instance = new tag`first template`;
|
||||
|
||||
assert(instance instanceof Constructor);
|
||||
assert.sameValue(templateObject[0], 'first template');
|
||||
assert.sameValue(arg, undefined);
|
||||
|
||||
instance = new tag`second template`('constructor argument');
|
||||
assert.sameValue(templateObject[0], 'second template', 'tagging function');
|
||||
assert.sameValue(arg, 'constructor argument');
|
@ -0,0 +1,20 @@
|
||||
// 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.3.7
|
||||
description: >
|
||||
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 obj = {
|
||||
fn: function() {
|
||||
context = this;
|
||||
}
|
||||
};
|
||||
|
||||
obj.fn`NoSubstitutionTemplate`;
|
||||
|
||||
assert.sameValue(context, obj);
|
@ -0,0 +1,31 @@
|
||||
// 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.3.7
|
||||
description: >
|
||||
The first argument to a tagged template should be frozen and define a `raw`
|
||||
property that is also frozen.
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var templateObject = null;
|
||||
var threwError = false;
|
||||
(function(parameter) {
|
||||
templateObject = parameter;
|
||||
})``;
|
||||
|
||||
assert(templateObject !== null);
|
||||
templateObject.test262Prop = true;
|
||||
|
||||
assert.sameValue(
|
||||
templateObject.test262Prop, undefined, 'The template object is frozen'
|
||||
);
|
||||
|
||||
templateObject.raw.test262Prop = true;
|
||||
|
||||
assert.sameValue(
|
||||
templateObject.raw.test262Prop, undefined, 'The "raw" object is frozen'
|
||||
);
|
||||
assert(
|
||||
templateObject.raw !== undefined , 'Template object defines a `raw` property'
|
||||
);
|
@ -0,0 +1,29 @@
|
||||
// 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.3.7
|
||||
description: >
|
||||
The first argument to a tagged template should be frozen and define a `raw`
|
||||
property that is also frozen.
|
||||
flags: [onlyStrict]
|
||||
---*/
|
||||
|
||||
var templateObject = null;
|
||||
var threwError = false;
|
||||
(function(parameter) {
|
||||
templateObject = parameter;
|
||||
})``;
|
||||
|
||||
assert(templateObject !== null);
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
templateObject.test262Prop = true;
|
||||
});
|
||||
|
||||
assert(
|
||||
templateObject.raw !== undefined , 'Template object defines a `raw` property'
|
||||
);
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
templateObject.raw.test262Prop = true;
|
||||
});
|
39
test/language/expressions/template/tagged-template-object.js
Normal file
39
test/language/expressions/template/tagged-template-object.js
Normal file
@ -0,0 +1,39 @@
|
||||
// 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.3.7
|
||||
description: >
|
||||
The first argument to a tagged template should be a template object as
|
||||
defined by the GetTemplateObject abstract operation.
|
||||
includes: [propertyHelper.js]
|
||||
---*/
|
||||
var templateObject;
|
||||
|
||||
(function(parameter) {
|
||||
templateObject = parameter;
|
||||
})`${1}`;
|
||||
|
||||
assert(Array.isArray(templateObject.raw), 'The template object is an array');
|
||||
|
||||
assert(templateObject.hasOwnProperty('raw'));
|
||||
verifyNotEnumerable(templateObject, 'raw');
|
||||
verifyNotWritable(templateObject, 'raw')
|
||||
verifyNotConfigurable(templateObject, 'raw');
|
||||
|
||||
assert(Array.isArray(templateObject), 'The "raw" object is an array');
|
||||
|
||||
verifyEnumerable(templateObject, '0');
|
||||
verifyNotWritable(templateObject, '0')
|
||||
verifyNotConfigurable(templateObject, '0');
|
||||
|
||||
verifyNotEnumerable(templateObject, 'length');
|
||||
verifyNotWritable(templateObject, 'length')
|
||||
verifyNotConfigurable(templateObject, 'length');
|
||||
|
||||
verifyEnumerable(templateObject.raw, '0');
|
||||
verifyNotWritable(templateObject.raw, '0')
|
||||
verifyNotConfigurable(templateObject.raw, '0');
|
||||
|
||||
verifyNotEnumerable(templateObject.raw, 'length');
|
||||
verifyNotWritable(templateObject.raw, 'length')
|
||||
verifyNotConfigurable(templateObject.raw, 'length');
|
9
test/language/expressions/template/template-literal.js
Normal file
9
test/language/expressions/template/template-literal.js
Normal file
@ -0,0 +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: 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');
|
@ -0,0 +1,88 @@
|
||||
// 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);
|
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
// 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.
|
||||
negative: SyntaxError
|
||||
---*/
|
||||
|
||||
(function() {})`\x`;
|
@ -0,0 +1,11 @@
|
||||
// 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: 16.1
|
||||
description: >
|
||||
TemplateCharacter (11.8.6) must not be extended to include
|
||||
LegacyOctalEscapeSequence as defined in B.1.2.
|
||||
negative: SyntaxError
|
||||
---*/
|
||||
|
||||
(function() {})`\00`;
|
@ -0,0 +1,11 @@
|
||||
// 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.
|
||||
negative: SyntaxError
|
||||
---*/
|
||||
|
||||
(function() {})`\u`;
|
@ -0,0 +1,35 @@
|
||||
// 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 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.raw[0], '\u005C\n\u005C\n\u005C\n', 'Line Feed and Carriage Return'
|
||||
);
|
||||
})`\
|
||||
\
|
||||
\
`
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
calls = 0;
|
||||
(function(cs) {
|
||||
calls++;
|
||||
assert.sameValue(cs.raw[0], '\\\u2028', 'Line Separator');
|
||||
})`\
`
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
calls = 0;
|
||||
(function(cs) {
|
||||
calls++;
|
||||
assert.sameValue(cs.raw[0], '\\\u2029', 'Paragraph Separator');
|
||||
})`\
`
|
||||
assert.sameValue(calls, 1);
|
@ -0,0 +1,36 @@
|
||||
// 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 LineTerminatorSequence :: <LF> is the code unit value 0x000A.
|
||||
The TRV of LineTerminatorSequence :: <CR> is the code unit value 0x000A.
|
||||
The TRV of LineTerminatorSequence :: <LS> is the code unit value 0x2028.
|
||||
The TRV of LineTerminatorSequence :: <PS> is the code unit value 0x2029.
|
||||
The TRV of LineTerminatorSequence :: <CR><LF> is the sequence consisting of
|
||||
the code unit value 0x000A.
|
||||
---*/
|
||||
var calls;
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s.raw[0], '\n\n\n', 'Line Feed and Carriage Return');
|
||||
})`
|
||||
|
||||
`;
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
calls = 0;
|
||||
(function(cs) {
|
||||
calls++;
|
||||
assert.sameValue(cs.raw[0], '\u2028', 'Line Separator');
|
||||
})`
`
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
calls = 0;
|
||||
(function(cs) {
|
||||
calls++;
|
||||
assert.sameValue(cs.raw[0], '\u2029', 'Paragraph Separator');
|
||||
})`
`
|
||||
assert.sameValue(calls, 1);
|
@ -0,0 +1,13 @@
|
||||
// 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');
|
@ -0,0 +1,27 @@
|
||||
// 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 and TRV of NoSubstitutionTemplate :: `` is the empty code unit
|
||||
sequence.
|
||||
The TV of NoSubstitutionTemplate :: ` TemplateCharacters ` is the TV of
|
||||
TemplateCharacters.
|
||||
---*/
|
||||
|
||||
var calls;
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s[0], '', 'Template value (empty)');
|
||||
assert.sameValue(s.raw[0], '', 'Template raw value (empty)');
|
||||
})``;
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s[0], 'foo', 'Template value (with content)');
|
||||
})`foo`;
|
||||
assert.sameValue(calls, 1);
|
Binary file not shown.
@ -0,0 +1,29 @@
|
||||
// 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 :: $ 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);
|
@ -0,0 +1,24 @@
|
||||
// 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');
|
@ -0,0 +1,29 @@
|
||||
// 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 and TRV of TemplateHead :: `${ is the empty code unit sequence.
|
||||
The TV of TemplateHead :: ` TemplateCharacters ${ is the TV of
|
||||
TemplateCharacters.
|
||||
The TRV of TemplateHead :: ` TemplateCharacters ${ is the TRV of
|
||||
TemplateCharacters.
|
||||
---*/
|
||||
|
||||
var calls;
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s[0], '', 'Template value (empty)');
|
||||
assert.sameValue(s.raw[0], '', 'Template raw value (empty)');
|
||||
})`${1}`;
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
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${1}`;
|
||||
assert.sameValue(calls, 1);
|
@ -0,0 +1,29 @@
|
||||
// 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 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.
|
||||
---*/
|
||||
|
||||
var calls;
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s[1], '', 'Template value (empty)');
|
||||
assert.sameValue(s.raw[1], '', 'Template raw value (empty)');
|
||||
})`${1}${2}`;
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s[1], 'foo', 'Template value (with content)');
|
||||
assert.sameValue(s.raw[1], 'foo', 'Template raw value (with content)');
|
||||
})`${1}foo${2}`;
|
||||
assert.sameValue(calls, 1);
|
@ -0,0 +1,29 @@
|
||||
// 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 and TRV of TemplateTail :: }` is the empty code unit sequence.
|
||||
The TV of TemplateTail :: } TemplateCharacters ` is the TV of
|
||||
TemplateCharacters.
|
||||
The TRV of TemplateTail :: } TemplateCharacters ` is the TRV of
|
||||
TemplateCharacters.
|
||||
---*/
|
||||
|
||||
var calls;
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s[1], '', 'Template value (empty)');
|
||||
assert.sameValue(s.raw[1], '', 'Template raw value (empty)');
|
||||
})`${1}`;
|
||||
assert.sameValue(calls, 1);
|
||||
|
||||
calls = 0;
|
||||
(function(s) {
|
||||
calls++;
|
||||
assert.sameValue(s[1], 'foo', 'Template value (with content)');
|
||||
assert.sameValue(s.raw[1], 'foo', 'Template raw value (with content)');
|
||||
})`${1}foo`;
|
||||
assert.sameValue(calls, 1);
|
@ -0,0 +1,29 @@
|
||||
// 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 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
|
||||
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], '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(calls, 1);
|
15
test/language/expressions/template/template-values/zwnbsp.js
Normal file
15
test/language/expressions/template/template-values/zwnbsp.js
Normal file
@ -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: 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'
|
||||
);
|
Loading…
x
Reference in New Issue
Block a user