From 3d5c113bee2d75cc0aa754b6c43cf3773b116310 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Mon, 23 Feb 2015 19:07:45 -0800 Subject: [PATCH] Iterator tests --- tests/baselines/reference/for-of14.errors.txt | 14 ++++++++ tests/baselines/reference/for-of14.js | 21 +++++++++++ tests/baselines/reference/for-of15.errors.txt | 17 +++++++++ tests/baselines/reference/for-of15.js | 27 ++++++++++++++ tests/baselines/reference/for-of16.errors.txt | 14 ++++++++ tests/baselines/reference/for-of16.js | 21 +++++++++++ tests/baselines/reference/for-of17.errors.txt | 20 +++++++++++ tests/baselines/reference/for-of17.js | 33 +++++++++++++++++ tests/baselines/reference/for-of18.js | 33 +++++++++++++++++ tests/baselines/reference/for-of18.types | 35 +++++++++++++++++++ .../es6/for-ofStatements/for-of14.ts | 2 +- .../es6/for-ofStatements/for-of15.ts | 4 +-- .../es6/for-ofStatements/for-of16.ts | 7 ++-- .../es6/for-ofStatements/for-of17.ts | 9 +++-- .../es6/for-ofStatements/for-of18.ts | 2 +- .../es6/for-ofStatements/for-of19.ts | 15 -------- 16 files changed, 247 insertions(+), 27 deletions(-) create mode 100644 tests/baselines/reference/for-of14.errors.txt create mode 100644 tests/baselines/reference/for-of14.js create mode 100644 tests/baselines/reference/for-of15.errors.txt create mode 100644 tests/baselines/reference/for-of15.js create mode 100644 tests/baselines/reference/for-of16.errors.txt create mode 100644 tests/baselines/reference/for-of16.js create mode 100644 tests/baselines/reference/for-of17.errors.txt create mode 100644 tests/baselines/reference/for-of17.js create mode 100644 tests/baselines/reference/for-of18.js create mode 100644 tests/baselines/reference/for-of18.types delete mode 100644 tests/cases/conformance/es6/for-ofStatements/for-of19.ts diff --git a/tests/baselines/reference/for-of14.errors.txt b/tests/baselines/reference/for-of14.errors.txt new file mode 100644 index 0000000000..5e8223381c --- /dev/null +++ b/tests/baselines/reference/for-of14.errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/es6/for-ofStatements/for-of14.ts(2,11): error TS2488: The right-hand side of a 'for...of' statement must have a '[Symbol.iterator]()' method that returns an iterator. + + +==== tests/cases/conformance/es6/for-ofStatements/for-of14.ts (1 errors) ==== + var v: string; + for (v of new StringIterator) { } // Should fail because the iterator is not iterable + ~~~~~~~~~~~~~~~~~~ +!!! error TS2488: The right-hand side of a 'for...of' statement must have a '[Symbol.iterator]()' method that returns an iterator. + + class StringIterator { + next() { + return ""; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/for-of14.js b/tests/baselines/reference/for-of14.js new file mode 100644 index 0000000000..d5f9e29b76 --- /dev/null +++ b/tests/baselines/reference/for-of14.js @@ -0,0 +1,21 @@ +//// [for-of14.ts] +var v: string; +for (v of new StringIterator) { } // Should fail because the iterator is not iterable + +class StringIterator { + next() { + return ""; + } +} + +//// [for-of14.js] +var v; +for (v of new StringIterator) { } // Should fail because the iterator is not iterable +var StringIterator = (function () { + function StringIterator() { + } + StringIterator.prototype.next = function () { + return ""; + }; + return StringIterator; +})(); diff --git a/tests/baselines/reference/for-of15.errors.txt b/tests/baselines/reference/for-of15.errors.txt new file mode 100644 index 0000000000..ab6b6c03ea --- /dev/null +++ b/tests/baselines/reference/for-of15.errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/es6/for-ofStatements/for-of15.ts(2,11): error TS2490: The object returned by the next method of the iterator must have a 'value' property. + + +==== tests/cases/conformance/es6/for-ofStatements/for-of15.ts (1 errors) ==== + var v: string; + for (v of new StringIterator) { } // Should fail + ~~~~~~~~~~~~~~~~~~ +!!! error TS2490: The object returned by the next method of the iterator must have a 'value' property. + + class StringIterator { + next() { + return ""; + } + [Symbol.iterator]() { + return this; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/for-of15.js b/tests/baselines/reference/for-of15.js new file mode 100644 index 0000000000..3695538975 --- /dev/null +++ b/tests/baselines/reference/for-of15.js @@ -0,0 +1,27 @@ +//// [for-of15.ts] +var v: string; +for (v of new StringIterator) { } // Should fail + +class StringIterator { + next() { + return ""; + } + [Symbol.iterator]() { + return this; + } +} + +//// [for-of15.js] +var v; +for (v of new StringIterator) { } // Should fail +var StringIterator = (function () { + function StringIterator() { + } + StringIterator.prototype.next = function () { + return ""; + }; + StringIterator.prototype[Symbol.iterator] = function () { + return this; + }; + return StringIterator; +})(); diff --git a/tests/baselines/reference/for-of16.errors.txt b/tests/baselines/reference/for-of16.errors.txt new file mode 100644 index 0000000000..e3ecca1a25 --- /dev/null +++ b/tests/baselines/reference/for-of16.errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/es6/for-ofStatements/for-of16.ts(2,11): error TS2489: The iterator returned by the right-hand side of a 'for...of' statement must have a 'next()' method. + + +==== tests/cases/conformance/es6/for-ofStatements/for-of16.ts (1 errors) ==== + var v: string; + for (v of new StringIterator) { } // Should fail + ~~~~~~~~~~~~~~~~~~ +!!! error TS2489: The iterator returned by the right-hand side of a 'for...of' statement must have a 'next()' method. + + class StringIterator { + [Symbol.iterator]() { + return this; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/for-of16.js b/tests/baselines/reference/for-of16.js new file mode 100644 index 0000000000..21ba2adb75 --- /dev/null +++ b/tests/baselines/reference/for-of16.js @@ -0,0 +1,21 @@ +//// [for-of16.ts] +var v: string; +for (v of new StringIterator) { } // Should fail + +class StringIterator { + [Symbol.iterator]() { + return this; + } +} + +//// [for-of16.js] +var v; +for (v of new StringIterator) { } // Should fail +var StringIterator = (function () { + function StringIterator() { + } + StringIterator.prototype[Symbol.iterator] = function () { + return this; + }; + return StringIterator; +})(); diff --git a/tests/baselines/reference/for-of17.errors.txt b/tests/baselines/reference/for-of17.errors.txt new file mode 100644 index 0000000000..dfdeb8db00 --- /dev/null +++ b/tests/baselines/reference/for-of17.errors.txt @@ -0,0 +1,20 @@ +tests/cases/conformance/es6/for-ofStatements/for-of17.ts(2,6): error TS2322: Type 'number' is not assignable to type 'string'. + + +==== tests/cases/conformance/es6/for-ofStatements/for-of17.ts (1 errors) ==== + var v: string; + for (v of new NumberIterator) { } // Should succeed + ~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + + class NumberIterator { + next() { + return { + value: 0, + done: false + }; + } + [Symbol.iterator]() { + return this; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/for-of17.js b/tests/baselines/reference/for-of17.js new file mode 100644 index 0000000000..5c56cdab44 --- /dev/null +++ b/tests/baselines/reference/for-of17.js @@ -0,0 +1,33 @@ +//// [for-of17.ts] +var v: string; +for (v of new NumberIterator) { } // Should succeed + +class NumberIterator { + next() { + return { + value: 0, + done: false + }; + } + [Symbol.iterator]() { + return this; + } +} + +//// [for-of17.js] +var v; +for (v of new NumberIterator) { } // Should succeed +var NumberIterator = (function () { + function NumberIterator() { + } + NumberIterator.prototype.next = function () { + return { + value: 0, + done: false + }; + }; + NumberIterator.prototype[Symbol.iterator] = function () { + return this; + }; + return NumberIterator; +})(); diff --git a/tests/baselines/reference/for-of18.js b/tests/baselines/reference/for-of18.js new file mode 100644 index 0000000000..57168d9bf0 --- /dev/null +++ b/tests/baselines/reference/for-of18.js @@ -0,0 +1,33 @@ +//// [for-of18.ts] +var v: string; +for (v of new StringIterator) { } // Should succeed + +class StringIterator { + next() { + return { + value: "", + done: false + }; + } + [Symbol.iterator]() { + return this; + } +} + +//// [for-of18.js] +var v; +for (v of new StringIterator) { } // Should succeed +var StringIterator = (function () { + function StringIterator() { + } + StringIterator.prototype.next = function () { + return { + value: "", + done: false + }; + }; + StringIterator.prototype[Symbol.iterator] = function () { + return this; + }; + return StringIterator; +})(); diff --git a/tests/baselines/reference/for-of18.types b/tests/baselines/reference/for-of18.types new file mode 100644 index 0000000000..9ade935947 --- /dev/null +++ b/tests/baselines/reference/for-of18.types @@ -0,0 +1,35 @@ +=== tests/cases/conformance/es6/for-ofStatements/for-of18.ts === +var v: string; +>v : string + +for (v of new StringIterator) { } // Should succeed +>v : string +>new StringIterator : StringIterator +>StringIterator : typeof StringIterator + +class StringIterator { +>StringIterator : StringIterator + + next() { +>next : () => { value: string; done: boolean; } + + return { +>{ value: "", done: false } : { value: string; done: boolean; } + + value: "", +>value : string + + done: false +>done : boolean + + }; + } + [Symbol.iterator]() { +>Symbol.iterator : symbol +>Symbol : SymbolConstructor +>iterator : symbol + + return this; +>this : StringIterator + } +} diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of14.ts b/tests/cases/conformance/es6/for-ofStatements/for-of14.ts index 8bb3e95950..84fbda4825 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of14.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of14.ts @@ -2,7 +2,7 @@ var v: string; for (v of new StringIterator) { } // Should fail because the iterator is not iterable -class StringIterator implements Iterator { +class StringIterator { next() { return ""; } diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of15.ts b/tests/cases/conformance/es6/for-ofStatements/for-of15.ts index 87ff3e9603..1973e7ff95 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of15.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of15.ts @@ -1,8 +1,8 @@ //@target: ES6 var v: string; -for (v of new StringIterator) { } // Should succeed +for (v of new StringIterator) { } // Should fail -class StringIterator implements Iterator { +class StringIterator { next() { return ""; } diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of16.ts b/tests/cases/conformance/es6/for-ofStatements/for-of16.ts index 92b3b4e6de..8f7bd6d848 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of16.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of16.ts @@ -1,11 +1,8 @@ //@target: ES6 var v: string; -for (v of (new StringIterator)[Symbol.iterator]()) { } // Should succeed +for (v of new StringIterator) { } // Should fail -class StringIterator implements Iterator { - next() { - return ""; - } +class StringIterator { [Symbol.iterator]() { return this; } diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of17.ts b/tests/cases/conformance/es6/for-ofStatements/for-of17.ts index 819e9218bd..431f066d47 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of17.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of17.ts @@ -1,10 +1,13 @@ //@target: ES6 -var v: number; -for (v of (new NumberIterator)[Symbol.iterator]().next()) { } // Should fail +var v: string; +for (v of new NumberIterator) { } // Should succeed class NumberIterator { next() { - return 0; + return { + value: 0, + done: false + }; } [Symbol.iterator]() { return this; diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of18.ts b/tests/cases/conformance/es6/for-ofStatements/for-of18.ts index 10e566cf64..407ad7f0ed 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of18.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of18.ts @@ -1,6 +1,6 @@ //@target: ES6 var v: string; -for (v of (new StringIterator)[Symbol.iterator]().next()) { } // Should succeed +for (v of new StringIterator) { } // Should succeed class StringIterator { next() { diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of19.ts b/tests/cases/conformance/es6/for-ofStatements/for-of19.ts deleted file mode 100644 index 1e45c32e8a..0000000000 --- a/tests/cases/conformance/es6/for-ofStatements/for-of19.ts +++ /dev/null @@ -1,15 +0,0 @@ -//@target: ES6 -var v: string; -for (v of (new StringIterator)[Symbol.iterator]().next()) { } // Should fail - -class StringIterator { - next() { - return { - value: 0, - done: false - }; - } - [Symbol.iterator]() { - return this; - } -} \ No newline at end of file