@@ -55,6 +55,75 @@ suite("CachedAsyncIterable", function() {
5555 } ) ;
5656 } ) ;
5757
58+ suite ( "sync iteration over cached elements" , function ( ) {
59+ let o1 , o2 ;
60+
61+ suiteSetup ( function ( ) {
62+ o1 = Object ( ) ;
63+ o2 = Object ( ) ;
64+ } ) ;
65+
66+ test ( "sync iterable with no cached elements yet" , function ( ) {
67+ function * generate ( ) {
68+ yield * [ o1 , o2 ] ;
69+ }
70+
71+ const iterable = new CachedAsyncIterable ( generate ( ) ) ;
72+ assert . deepEqual ( [ ...iterable ] , [ ] ) ;
73+ } ) ;
74+
75+ test ( "sync iterable with a few elements cached so far" , async function ( ) {
76+ function * generate ( ) {
77+ yield * [ o1 , o2 ] ;
78+ }
79+
80+ const iterable = new CachedAsyncIterable ( generate ( ) ) ;
81+ await iterable . touchNext ( ) ;
82+ assert . deepEqual ( [ ...iterable ] , [ o1 ] ) ;
83+ } ) ;
84+
85+ test ( "iterable with all cached elements" , async function ( ) {
86+ function * generate ( ) {
87+ yield * [ o1 , o2 ] ;
88+ }
89+
90+ const iterable = new CachedAsyncIterable ( generate ( ) ) ;
91+ await iterable . touchNext ( ) ;
92+ await iterable . touchNext ( ) ;
93+ assert . deepEqual ( [ ...iterable ] , [ o1 , o2 ] ) ;
94+ } ) ;
95+
96+ test ( "async iterable with no cached elements yet" , async function ( ) {
97+ async function * generate ( ) {
98+ yield * [ o1 , o2 ] ;
99+ }
100+
101+ const iterable = new CachedAsyncIterable ( generate ( ) ) ;
102+ assert . deepEqual ( [ ...iterable ] , [ ] ) ;
103+ } ) ;
104+
105+ test ( "async iterable with a few elements cached so far" , async function ( ) {
106+ async function * generate ( ) {
107+ yield * [ o1 , o2 ] ;
108+ }
109+
110+ const iterable = new CachedAsyncIterable ( generate ( ) ) ;
111+ await iterable . touchNext ( ) ;
112+ assert . deepEqual ( [ ...iterable ] , [ o1 ] ) ;
113+ } ) ;
114+
115+ test ( "async iterable with all cached elements" , async function ( ) {
116+ async function * generate ( ) {
117+ yield * [ o1 , o2 ] ;
118+ }
119+
120+ const iterable = new CachedAsyncIterable ( generate ( ) ) ;
121+ await iterable . touchNext ( ) ;
122+ await iterable . touchNext ( ) ;
123+ assert . deepEqual ( [ ...iterable ] , [ o1 , o2 ] ) ;
124+ } ) ;
125+ } ) ;
126+
58127 suite ( "async iteration" , function ( ) {
59128 let o1 , o2 ;
60129
@@ -172,5 +241,21 @@ suite("CachedAsyncIterable", function() {
172241 }
173242 assert . deepEqual ( values , [ o1 , o2 ] ) ;
174243 } ) ;
244+
245+ test ( "returns the most recent {value, done} object" , async function ( ) {
246+ const iterable = new CachedAsyncIterable ( [ o1 , o2 ] ) ;
247+ assert . deepEqual (
248+ await iterable . touchNext ( ) ,
249+ { value : o1 , done : false } ) ;
250+ assert . deepEqual (
251+ await iterable . touchNext ( ) ,
252+ { value : o2 , done : false } ) ;
253+ assert . deepEqual (
254+ await iterable . touchNext ( ) ,
255+ { value : undefined , done : true } ) ;
256+ assert . deepEqual (
257+ await iterable . touchNext ( ) ,
258+ { value : undefined , done : true } ) ;
259+ } ) ;
175260 } ) ;
176261} ) ;
0 commit comments