1+ describe ( "forAwaitOfEvaluation" , ( ) => {
2+ it ( "sync (es5)" , async ( ) => {
3+ const result = evaluator . evaluateTypeScript ( `
4+ let i = 0;
5+ const iterator = {
6+ [Symbol.iterator]() { return this; },
7+ next() {
8+ switch (i++) {
9+ case 0: return { value: 1, done: false };
10+ case 1: return { value: Promise.resolve(2), done: false };
11+ case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
12+ default: return { value: undefined: done: true };
13+ }
14+ }
15+ };
16+ export const output: any[] = [];
17+ export async function main() {
18+ for await (const item of iterator) {
19+ output.push(item);
20+ }
21+ }` ) ;
22+ await result . main ( ) ;
23+ assert . strictEqual ( result . output [ 0 ] , 1 ) ;
24+ assert . strictEqual ( result . output [ 1 ] , 2 ) ;
25+ assert . strictEqual ( result . output [ 2 ] , 3 ) ;
26+ } ) ;
27+
28+ it ( "sync (es2015)" , async ( ) => {
29+ const result = evaluator . evaluateTypeScript ( `
30+ let i = 0;
31+ const iterator = {
32+ [Symbol.iterator]() { return this; },
33+ next() {
34+ switch (i++) {
35+ case 0: return { value: 1, done: false };
36+ case 1: return { value: Promise.resolve(2), done: false };
37+ case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
38+ default: return { value: undefined: done: true };
39+ }
40+ }
41+ };
42+ export const output: any[] = [];
43+ export async function main() {
44+ for await (const item of iterator) {
45+ output.push(item);
46+ }
47+ }` , { target : ts . ScriptTarget . ES2015 } ) ;
48+ await result . main ( ) ;
49+ assert . strictEqual ( result . output [ 0 ] , 1 ) ;
50+ assert . strictEqual ( result . output [ 1 ] , 2 ) ;
51+ assert . strictEqual ( result . output [ 2 ] , 3 ) ;
52+ } ) ;
53+
54+ it ( "async (es5)" , async ( ) => {
55+ const result = evaluator . evaluateTypeScript ( `
56+ let i = 0;
57+ const iterator = {
58+ [Symbol.asyncIterator]() { return this; },
59+ async next() {
60+ switch (i++) {
61+ case 0: return { value: 1, done: false };
62+ case 1: return { value: Promise.resolve(2), done: false };
63+ case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
64+ default: return { value: undefined: done: true };
65+ }
66+ }
67+ };
68+ export const output: any[] = [];
69+ export async function main() {
70+ for await (const item of iterator) {
71+ output.push(item);
72+ }
73+ }` ) ;
74+ await result . main ( ) ;
75+ assert . strictEqual ( result . output [ 0 ] , 1 ) ;
76+ assert . instanceOf ( result . output [ 1 ] , Promise ) ;
77+ assert . instanceOf ( result . output [ 2 ] , Promise ) ;
78+ } ) ;
79+
80+ it ( "async (es2015)" , async ( ) => {
81+ const result = evaluator . evaluateTypeScript ( `
82+ let i = 0;
83+ const iterator = {
84+ [Symbol.asyncIterator]() { return this; },
85+ async next() {
86+ switch (i++) {
87+ case 0: return { value: 1, done: false };
88+ case 1: return { value: Promise.resolve(2), done: false };
89+ case 2: return { value: new Promise<number>(resolve => setTimeout(resolve, 100, 3)), done: false };
90+ default: return { value: undefined: done: true };
91+ }
92+ }
93+ };
94+ export const output: any[] = [];
95+ export async function main() {
96+ for await (const item of iterator) {
97+ output.push(item);
98+ }
99+ }` , { target : ts . ScriptTarget . ES2015 } ) ;
100+ await result . main ( ) ;
101+ assert . strictEqual ( result . output [ 0 ] , 1 ) ;
102+ assert . instanceOf ( result . output [ 1 ] , Promise ) ;
103+ assert . instanceOf ( result . output [ 2 ] , Promise ) ;
104+ } ) ;
105+ } ) ;
0 commit comments