mirror of https://github.com/tc39/test262.git
Add test cases for spread operator
The operand of the spread operator may be an AssignmentExpression. Add test cases which demonstrate this.
This commit is contained in:
parent
2658524163
commit
8c8397573c
|
@ -0,0 +1,33 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
desc: Spread operator applied to AssignmentExpression following other elements
|
||||
template: default
|
||||
info: |
|
||||
12.3.6.1 Runtime Semantics: ArgumentListEvaluation
|
||||
|
||||
ArgumentList : ArgumentList , ... AssignmentExpression
|
||||
|
||||
1. Let precedingArgs be the result of evaluating ArgumentList.
|
||||
2. Let spreadRef be the result of evaluating AssignmentExpression.
|
||||
3. Let iterator be GetIterator(GetValue(spreadRef) ).
|
||||
4. ReturnIfAbrupt(iterator).
|
||||
5. Repeat
|
||||
a. Let next be IteratorStep(iterator).
|
||||
b. ReturnIfAbrupt(next).
|
||||
c. If next is false, return precedingArgs.
|
||||
---*/
|
||||
|
||||
//- setup
|
||||
var source = [3, 4, 5];
|
||||
var target;
|
||||
//- args
|
||||
1, 2, ...target = source
|
||||
//- body
|
||||
assert.sameValue(arguments.length, 5);
|
||||
assert.sameValue(arguments[0], 1);
|
||||
assert.sameValue(arguments[1], 2);
|
||||
assert.sameValue(arguments[2], 3);
|
||||
assert.sameValue(arguments[3], 4);
|
||||
assert.sameValue(arguments[4], 5);
|
||||
assert.sameValue(target, source);
|
|
@ -0,0 +1,29 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
desc: Spread operator applied to AssignmentExpression following other elements
|
||||
template: default
|
||||
info: |
|
||||
12.3.6.1 Runtime Semantics: ArgumentListEvaluation
|
||||
|
||||
ArgumentList : ArgumentList , ... AssignmentExpression
|
||||
|
||||
1. Let precedingArgs be the result of evaluating ArgumentList.
|
||||
2. Let spreadRef be the result of evaluating AssignmentExpression.
|
||||
3. Let iterator be GetIterator(GetValue(spreadRef) ).
|
||||
4. ReturnIfAbrupt(iterator).
|
||||
5. Repeat
|
||||
a. Let next be IteratorStep(iterator).
|
||||
b. ReturnIfAbrupt(next).
|
||||
c. If next is false, return precedingArgs.
|
||||
---*/
|
||||
|
||||
//- args
|
||||
5, ...[6, 7, 8], 9
|
||||
//- body
|
||||
assert.sameValue(arguments.length, 5);
|
||||
assert.sameValue(arguments[0], 5);
|
||||
assert.sameValue(arguments[1], 6);
|
||||
assert.sameValue(arguments[2], 7);
|
||||
assert.sameValue(arguments[3], 8);
|
||||
assert.sameValue(arguments[4], 9);
|
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
desc: Spread operator applied to AssignmentExpression as only element
|
||||
template: default
|
||||
info: |
|
||||
12.3.6.1 Runtime Semantics: ArgumentListEvaluation
|
||||
|
||||
ArgumentList : ... AssignmentExpression
|
||||
|
||||
1. Let list be an empty List.
|
||||
2. Let spreadRef be the result of evaluating AssignmentExpression.
|
||||
3. Let spreadObj be GetValue(spreadRef).
|
||||
4. Let iterator be GetIterator(spreadObj).
|
||||
5. ReturnIfAbrupt(iterator).
|
||||
6. Repeat
|
||||
a. Let next be IteratorStep(iterator).
|
||||
b. ReturnIfAbrupt(next).
|
||||
c. If next is false, return list.
|
||||
d. Let nextArg be IteratorValue(next).
|
||||
e. ReturnIfAbrupt(nextArg).
|
||||
f. Append nextArg as the last element of list.
|
||||
---*/
|
||||
|
||||
//- setup
|
||||
var source = [2, 3, 4];
|
||||
var target;
|
||||
//- args
|
||||
...target = source
|
||||
//- body
|
||||
assert.sameValue(arguments.length, 3);
|
||||
assert.sameValue(arguments[0], 2);
|
||||
assert.sameValue(arguments[1], 3);
|
||||
assert.sameValue(arguments[2], 4);
|
||||
assert.sameValue(target, source);
|
|
@ -0,0 +1,31 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
desc: Spread operator applied to array literal as only element
|
||||
template: default
|
||||
info: |
|
||||
12.3.6.1 Runtime Semantics: ArgumentListEvaluation
|
||||
|
||||
ArgumentList : ... AssignmentExpression
|
||||
|
||||
1. Let list be an empty List.
|
||||
2. Let spreadRef be the result of evaluating AssignmentExpression.
|
||||
3. Let spreadObj be GetValue(spreadRef).
|
||||
4. Let iterator be GetIterator(spreadObj).
|
||||
5. ReturnIfAbrupt(iterator).
|
||||
6. Repeat
|
||||
a. Let next be IteratorStep(iterator).
|
||||
b. ReturnIfAbrupt(next).
|
||||
c. If next is false, return list.
|
||||
d. Let nextArg be IteratorValue(next).
|
||||
e. ReturnIfAbrupt(nextArg).
|
||||
f. Append nextArg as the last element of list.
|
||||
---*/
|
||||
|
||||
//- args
|
||||
...[3, 4, 5]
|
||||
//- body
|
||||
assert.sameValue(arguments.length, 3);
|
||||
assert.sameValue(arguments[0], 3);
|
||||
assert.sameValue(arguments[1], 4);
|
||||
assert.sameValue(arguments[2], 5);
|
Loading…
Reference in New Issue