Add tests for iterator spread in an array literal

This commit is contained in:
Jason Freeman 2015-03-24 16:33:56 -07:00
parent 2288946afc
commit 376574d1be
30 changed files with 812 additions and 0 deletions

View file

@ -0,0 +1,31 @@
//// [iteratorSpreadInArray.ts]
var array = [...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray.js]
var array = [
...new SymbolIterator
];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,37 @@
=== tests/cases/conformance/es6/spread/iteratorSpreadInArray.ts ===
var array = [...new SymbolIterator];
>array : symbol[]
>[...new SymbolIterator] : symbol[]
>...new SymbolIterator : symbol
>new SymbolIterator : SymbolIterator
>SymbolIterator : typeof SymbolIterator
class SymbolIterator {
>SymbolIterator : SymbolIterator
next() {
>next : () => { value: symbol; done: boolean; }
return {
>{ value: Symbol(), done: false } : { value: symbol; done: boolean; }
value: Symbol(),
>value : symbol
>Symbol() : symbol
>Symbol : SymbolConstructor
done: false
>done : boolean
};
}
[Symbol.iterator]() {
>Symbol.iterator : symbol
>Symbol : SymbolConstructor
>iterator : symbol
return this;
>this : SymbolIterator
}
}

View file

@ -0,0 +1,13 @@
tests/cases/conformance/es6/spread/iteratorSpreadInArray10.ts(1,17): error TS2489: An iterator must have a 'next()' method.
==== tests/cases/conformance/es6/spread/iteratorSpreadInArray10.ts (1 errors) ====
var array = [...new SymbolIterator];
~~~~~~~~~~~~~~~~~~
!!! error TS2489: An iterator must have a 'next()' method.
class SymbolIterator {
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,18 @@
//// [iteratorSpreadInArray10.ts]
var array = [...new SymbolIterator];
class SymbolIterator {
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray10.js]
var array = [
...new SymbolIterator
];
class SymbolIterator {
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,56 @@
//// [iteratorSpreadInArray2.ts]
var array = [...new NumberIterator, ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
class NumberIterator {
next() {
return {
value: 0,
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray2.js]
var array = [
...new NumberIterator,
...new SymbolIterator
];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
class NumberIterator {
next() {
return {
value: 0,
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,68 @@
=== tests/cases/conformance/es6/spread/iteratorSpreadInArray2.ts ===
var array = [...new NumberIterator, ...new SymbolIterator];
>array : (number | symbol)[]
>[...new NumberIterator, ...new SymbolIterator] : (number | symbol)[]
>...new NumberIterator : number
>new NumberIterator : NumberIterator
>NumberIterator : typeof NumberIterator
>...new SymbolIterator : symbol
>new SymbolIterator : SymbolIterator
>SymbolIterator : typeof SymbolIterator
class SymbolIterator {
>SymbolIterator : SymbolIterator
next() {
>next : () => { value: symbol; done: boolean; }
return {
>{ value: Symbol(), done: false } : { value: symbol; done: boolean; }
value: Symbol(),
>value : symbol
>Symbol() : symbol
>Symbol : SymbolConstructor
done: false
>done : boolean
};
}
[Symbol.iterator]() {
>Symbol.iterator : symbol
>Symbol : SymbolConstructor
>iterator : symbol
return this;
>this : SymbolIterator
}
}
class NumberIterator {
>NumberIterator : NumberIterator
next() {
>next : () => { value: number; done: boolean; }
return {
>{ value: 0, done: false } : { value: number; done: boolean; }
value: 0,
>value : number
done: false
>done : boolean
};
}
[Symbol.iterator]() {
>Symbol.iterator : symbol
>Symbol : SymbolConstructor
>iterator : symbol
return this;
>this : NumberIterator
}
}

View file

@ -0,0 +1,35 @@
//// [iteratorSpreadInArray3.ts]
var array = [...[0, 1], ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray3.js]
var array = [
...[
0,
1
],
...new SymbolIterator
];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,39 @@
=== tests/cases/conformance/es6/spread/iteratorSpreadInArray3.ts ===
var array = [...[0, 1], ...new SymbolIterator];
>array : (number | symbol)[]
>[...[0, 1], ...new SymbolIterator] : (number | symbol)[]
>...[0, 1] : number
>[0, 1] : number[]
>...new SymbolIterator : symbol
>new SymbolIterator : SymbolIterator
>SymbolIterator : typeof SymbolIterator
class SymbolIterator {
>SymbolIterator : SymbolIterator
next() {
>next : () => { value: symbol; done: boolean; }
return {
>{ value: Symbol(), done: false } : { value: symbol; done: boolean; }
value: Symbol(),
>value : symbol
>Symbol() : symbol
>Symbol : SymbolConstructor
done: false
>done : boolean
};
}
[Symbol.iterator]() {
>Symbol.iterator : symbol
>Symbol : SymbolConstructor
>iterator : symbol
return this;
>this : SymbolIterator
}
}

View file

@ -0,0 +1,33 @@
//// [iteratorSpreadInArray4.ts]
var array = [0, 1, ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray4.js]
var array = [
0,
1,
...new SymbolIterator
];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,37 @@
=== tests/cases/conformance/es6/spread/iteratorSpreadInArray4.ts ===
var array = [0, 1, ...new SymbolIterator];
>array : (number | symbol)[]
>[0, 1, ...new SymbolIterator] : (number | symbol)[]
>...new SymbolIterator : symbol
>new SymbolIterator : SymbolIterator
>SymbolIterator : typeof SymbolIterator
class SymbolIterator {
>SymbolIterator : SymbolIterator
next() {
>next : () => { value: symbol; done: boolean; }
return {
>{ value: Symbol(), done: false } : { value: symbol; done: boolean; }
value: Symbol(),
>value : symbol
>Symbol() : symbol
>Symbol : SymbolConstructor
done: false
>done : boolean
};
}
[Symbol.iterator]() {
>Symbol.iterator : symbol
>Symbol : SymbolConstructor
>iterator : symbol
return this;
>this : SymbolIterator
}
}

View file

@ -0,0 +1,24 @@
tests/cases/conformance/es6/spread/iteratorSpreadInArray5.ts(1,5): error TS2322: Type '(number | symbol)[]' is not assignable to type 'number[]'.
Type 'number | symbol' is not assignable to type 'number'.
Type 'symbol' is not assignable to type 'number'.
==== tests/cases/conformance/es6/spread/iteratorSpreadInArray5.ts (1 errors) ====
var array: number[] = [0, 1, ...new SymbolIterator];
~~~~~
!!! error TS2322: Type '(number | symbol)[]' is not assignable to type 'number[]'.
!!! error TS2322: Type 'number | symbol' is not assignable to type 'number'.
!!! error TS2322: Type 'symbol' is not assignable to type 'number'.
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,33 @@
//// [iteratorSpreadInArray5.ts]
var array: number[] = [0, 1, ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray5.js]
var array = [
0,
1,
...new SymbolIterator
];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,21 @@
tests/cases/conformance/es6/spread/iteratorSpreadInArray6.ts(2,14): error TS2345: Argument of type 'symbol[]' is not assignable to parameter of type 'number'.
==== tests/cases/conformance/es6/spread/iteratorSpreadInArray6.ts (1 errors) ====
var array: number[] = [0, 1];
array.concat([...new SymbolIterator]);
~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS2345: Argument of type 'symbol[]' is not assignable to parameter of type 'number'.
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,36 @@
//// [iteratorSpreadInArray6.ts]
var array: number[] = [0, 1];
array.concat([...new SymbolIterator]);
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray6.js]
var array = [
0,
1
];
array.concat([
...new SymbolIterator
]);
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,33 @@
//// [iteratorSpreadInArray7.ts]
var array: symbol[];
array.concat([...new SymbolIterator]);
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray7.js]
var array;
array.concat([
...new SymbolIterator
]);
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,43 @@
=== tests/cases/conformance/es6/spread/iteratorSpreadInArray7.ts ===
var array: symbol[];
>array : symbol[]
array.concat([...new SymbolIterator]);
>array.concat([...new SymbolIterator]) : symbol[]
>array.concat : { <U extends symbol[]>(...items: U[]): symbol[]; (...items: symbol[]): symbol[]; }
>array : symbol[]
>concat : { <U extends symbol[]>(...items: U[]): symbol[]; (...items: symbol[]): symbol[]; }
>[...new SymbolIterator] : symbol[]
>...new SymbolIterator : symbol
>new SymbolIterator : SymbolIterator
>SymbolIterator : typeof SymbolIterator
class SymbolIterator {
>SymbolIterator : SymbolIterator
next() {
>next : () => { value: symbol; done: boolean; }
return {
>{ value: Symbol(), done: false } : { value: symbol; done: boolean; }
value: Symbol(),
>value : symbol
>Symbol() : symbol
>Symbol : SymbolConstructor
done: false
>done : boolean
};
}
[Symbol.iterator]() {
>Symbol.iterator : symbol
>Symbol : SymbolConstructor
>iterator : symbol
return this;
>this : SymbolIterator
}
}

View file

@ -0,0 +1,16 @@
tests/cases/conformance/es6/spread/iteratorSpreadInArray8.ts(1,17): error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator.
==== tests/cases/conformance/es6/spread/iteratorSpreadInArray8.ts (1 errors) ====
var array = [...new SymbolIterator];
~~~~~~~~~~~~~~~~~~
!!! error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator.
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
}

View file

@ -0,0 +1,24 @@
//// [iteratorSpreadInArray8.ts]
var array = [...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
}
//// [iteratorSpreadInArray8.js]
var array = [
...new SymbolIterator
];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
}

View file

@ -0,0 +1,33 @@
tests/cases/conformance/es6/spread/iteratorSpreadInArray9.ts(1,17): error TS2322: Type 'SymbolIterator' is not assignable to type 'Iterable<symbol>'.
Types of property '[Symbol.iterator]' are incompatible.
Type '() => SymbolIterator' is not assignable to type '() => Iterator<symbol>'.
Type 'SymbolIterator' is not assignable to type 'Iterator<symbol>'.
Types of property 'next' are incompatible.
Type '() => { value: symbol; }' is not assignable to type '() => IteratorResult<symbol>'.
Type '{ value: symbol; }' is not assignable to type 'IteratorResult<symbol>'.
Property 'done' is missing in type '{ value: symbol; }'.
==== tests/cases/conformance/es6/spread/iteratorSpreadInArray9.ts (1 errors) ====
var array = [...new SymbolIterator];
~~~~~~~~~~~~~~~~~~
!!! error TS2322: Type 'SymbolIterator' is not assignable to type 'Iterable<symbol>'.
!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible.
!!! error TS2322: Type '() => SymbolIterator' is not assignable to type '() => Iterator<symbol>'.
!!! error TS2322: Type 'SymbolIterator' is not assignable to type 'Iterator<symbol>'.
!!! error TS2322: Types of property 'next' are incompatible.
!!! error TS2322: Type '() => { value: symbol; }' is not assignable to type '() => IteratorResult<symbol>'.
!!! error TS2322: Type '{ value: symbol; }' is not assignable to type 'IteratorResult<symbol>'.
!!! error TS2322: Property 'done' is missing in type '{ value: symbol; }'.
class SymbolIterator {
next() {
return {
value: Symbol()
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,29 @@
//// [iteratorSpreadInArray9.ts]
var array = [...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol()
};
}
[Symbol.iterator]() {
return this;
}
}
//// [iteratorSpreadInArray9.js]
var array = [
...new SymbolIterator
];
class SymbolIterator {
next() {
return {
value: Symbol()
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,15 @@
//@target: ES6
var array = [...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,8 @@
//@target: ES6
var array = [...new SymbolIterator];
class SymbolIterator {
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,28 @@
//@target: ES6
var array = [...new NumberIterator, ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}
class NumberIterator {
next() {
return {
value: 0,
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,15 @@
//@target: ES6
var array = [...[0, 1], ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,15 @@
//@target: ES6
var array = [0, 1, ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,15 @@
//@target: ES6
var array: number[] = [0, 1, ...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,16 @@
//@target: ES6
var array: number[] = [0, 1];
array.concat([...new SymbolIterator]);
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,16 @@
//@target: ES6
var array: symbol[];
array.concat([...new SymbolIterator]);
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
[Symbol.iterator]() {
return this;
}
}

View file

@ -0,0 +1,11 @@
//@target: ES6
var array = [...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol(),
done: false
};
}
}

View file

@ -0,0 +1,14 @@
//@target: ES6
var array = [...new SymbolIterator];
class SymbolIterator {
next() {
return {
value: Symbol()
};
}
[Symbol.iterator]() {
return this;
}
}