2012-05-22 21:00:12 -04:00
|
|
|
import nilmdb
|
2012-12-31 15:52:28 -05:00
|
|
|
from nilmdb.utils.printf import *
|
2012-05-22 21:00:12 -04:00
|
|
|
|
|
|
|
import nose
|
|
|
|
from nose.tools import *
|
|
|
|
from nose.tools import assert_raises
|
|
|
|
import threading
|
|
|
|
import time
|
|
|
|
|
|
|
|
from test_helpers import *
|
|
|
|
|
|
|
|
def func_with_callback(a, b, callback):
|
|
|
|
callback(a)
|
|
|
|
callback(b)
|
|
|
|
callback(a+b)
|
|
|
|
|
|
|
|
class TestIteratorizer(object):
|
|
|
|
def test(self):
|
|
|
|
|
|
|
|
# First try it with a normal callback
|
|
|
|
self.result = ""
|
|
|
|
def cb(x):
|
|
|
|
self.result += str(x)
|
|
|
|
func_with_callback(1, 2, cb)
|
|
|
|
eq_(self.result, "123")
|
|
|
|
|
|
|
|
# Now make it an iterator
|
2012-12-31 15:52:28 -05:00
|
|
|
it = nilmdb.utils.Iteratorizer(
|
|
|
|
lambda x:
|
|
|
|
func_with_callback(1, 2, x))
|
2012-05-22 21:00:12 -04:00
|
|
|
result = ""
|
|
|
|
for i in it:
|
|
|
|
result += str(i)
|
|
|
|
eq_(result, "123")
|
|
|
|
|
|
|
|
# Make sure things work when an exception occurs
|
2012-12-31 15:52:28 -05:00
|
|
|
it = nilmdb.utils.Iteratorizer(
|
|
|
|
lambda x:
|
|
|
|
func_with_callback(1, "a", x))
|
2012-05-22 21:00:12 -04:00
|
|
|
result = ""
|
|
|
|
with assert_raises(TypeError) as e:
|
|
|
|
for i in it:
|
|
|
|
result += str(i)
|
|
|
|
eq_(result, "1a")
|
|
|
|
|
|
|
|
# Now try to trigger the case where we stop iterating
|
|
|
|
# mid-generator, and expect the iteratorizer to clean up after
|
|
|
|
# itself. This doesn't have a particular result in the test,
|
|
|
|
# but gains coverage.
|
|
|
|
def foo():
|
2012-12-31 15:52:28 -05:00
|
|
|
it = nilmdb.utils.Iteratorizer(
|
|
|
|
lambda x:
|
|
|
|
func_with_callback(1, 2, x))
|
2012-05-22 21:00:12 -04:00
|
|
|
it.next()
|
|
|
|
foo()
|