Skip to content
Snippets Groups Projects
Commit 1f22932d authored by Mike Pennisi's avatar Mike Pennisi
Browse files

Import tests from Google V8 (templates)

These tests are derived from the following files within the Google V8
project:

    test/mjsunit/es6/templates.js

Some of these tests include non-printable characters, causing git to
infer that they are binary files. Introduce a `.gitattributes` file to
configure git to consistently display the source text of all JavaScript
files.
parent 43acf615
No related branches found
No related tags found
No related merge requests found
Showing
with 368 additions and 0 deletions
*.js diff
// 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'
);
// 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``, '');
// 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);
// 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 Stings accordingto the
ToString abstract operation.
---*/
function fn() { return 'result'; }
assert.sameValue(`foo ${fn()} bar`, 'foo result bar');
// 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'}`, '');
// 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'}`;
// 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 Stings accordingto the
ToString abstract operation.
---*/
var object = {
fn: function() { return 'result'; }
};
assert.sameValue(`foo ${object.fn()} bar`, 'foo result bar');
// 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 Stings accordingto 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'
);
// 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 Stings 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');
// 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 Stings accordingto the
ToString abstract operation.
---*/
assert.sameValue(`foo ${5} bar`, 'foo 5 bar', 'number value');
assert.sameValue(`foo ${'string'} bar`, 'foo string bar', 'string value');
// 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 Stings accordingto the
ToString abstract operation.
---*/
assert.sameValue(`foo ${`bar ${5} baz`} qux`, 'foo bar 5 baz qux');
// 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);
// 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'
);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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'
);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment