@@ -172,6 +172,94 @@ def test_get_items_from_response_raises_NotImplementedError(self):
172172 iterator .get_items_from_response , object ())
173173
174174
175+ class TestMethodIterator (unittest2 .TestCase ):
176+
177+ def _getTargetClass (self ):
178+ from gcloud .iterator import MethodIterator
179+ return MethodIterator
180+
181+ def _makeOne (self , * args , ** kw ):
182+ return self ._getTargetClass ()(* args , ** kw )
183+
184+ def test_ctor_defaults (self ):
185+ wlm = _WithListMethod ()
186+ iterator = self ._makeOne (wlm .list_foo )
187+ self .assertEqual (iterator ._method , wlm .list_foo )
188+ self .assertEqual (iterator ._token , None )
189+ self .assertEqual (iterator ._page_size , None )
190+ self .assertEqual (iterator ._kw , {})
191+ self .assertEqual (iterator ._max_calls , None )
192+ self .assertEqual (iterator ._page_num , 0 )
193+
194+ def test_ctor_explicit (self ):
195+ wlm = _WithListMethod ()
196+ TOKEN = wlm ._letters
197+ SIZE = 4
198+ CALLS = 2
199+ iterator = self ._makeOne (wlm .list_foo , TOKEN , SIZE , CALLS ,
200+ foo_type = 'Bar' )
201+ self .assertEqual (iterator ._method , wlm .list_foo )
202+ self .assertEqual (iterator ._token , TOKEN )
203+ self .assertEqual (iterator ._page_size , SIZE )
204+ self .assertEqual (iterator ._kw , {'foo_type' : 'Bar' })
205+ self .assertEqual (iterator ._max_calls , CALLS )
206+ self .assertEqual (iterator ._page_num , 0 )
207+
208+ def test___iter___defaults (self ):
209+ import string
210+ wlm = _WithListMethod ()
211+ iterator = self ._makeOne (wlm .list_foo )
212+ found = []
213+ for char in iterator :
214+ found .append (char )
215+ self .assertEqual (found , list (string .printable ))
216+ self .assertEqual (len (wlm ._called_with ), len (found ) // 10 )
217+ for i , (token , size , kw ) in enumerate (wlm ._called_with ):
218+ if i == 0 :
219+ self .assertEqual (token , None )
220+ else :
221+ self .assertEqual (token , string .printable [i * 10 :])
222+ self .assertEqual (size , None )
223+ self .assertEqual (kw , {})
224+
225+ def test___iter___explicit_size_and_maxcalls_and_kw (self ):
226+ import string
227+ wlm = _WithListMethod ()
228+ iterator = self ._makeOne (wlm .list_foo , page_size = 2 , max_calls = 3 ,
229+ foo_type = 'Bar' )
230+ found = []
231+ for char in iterator :
232+ found .append (char )
233+ self .assertEqual (found , list (string .printable [:2 * 3 ]))
234+ self .assertEqual (len (wlm ._called_with ), len (found ) // 2 )
235+ for i , (token , size , kw ) in enumerate (wlm ._called_with ):
236+ if i == 0 :
237+ self .assertEqual (token , None )
238+ else :
239+ self .assertEqual (token , string .printable [i * 2 :])
240+ self .assertEqual (size , 2 )
241+ self .assertEqual (kw , {'foo_type' : 'Bar' })
242+
243+
244+ class _WithListMethod (object ):
245+
246+ def __init__ (self ):
247+ import string
248+ self ._called_with = []
249+ self ._letters = string .printable
250+
251+ def list_foo (self , page_token , page_size , ** kw ):
252+ if page_token is not None :
253+ assert page_token == self ._letters
254+ self ._called_with .append ((page_token , page_size , kw ))
255+ if page_size is None :
256+ page_size = 10
257+ page , self ._letters = (
258+ self ._letters [:page_size ], self ._letters [page_size :])
259+ token = self ._letters or None
260+ return page , token
261+
262+
175263class _Connection (object ):
176264
177265 def __init__ (self , * responses ):
0 commit comments