[pywin32-checkins] pywin32/com/win32com/test testIterators.py,1.1,1.2
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: <mha...@us...> - 2003-10-24 11:38:42
|
Update of /cvsroot/pywin32/pywin32/com/win32com/test In directory sc8-pr-cvs1:/tmp/cvs-serv9357 Modified Files: testIterators.py Log Message: Add better enumerator tests, and include a PythonCOM server as a test. Index: testIterators.py =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/win32com/test/testIterators.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** testIterators.py 23 Oct 2003 06:26:28 -0000 1.1 --- testIterators.py 23 Oct 2003 23:35:35 -0000 1.2 *************** *** 7,10 **** --- 7,12 ---- from win32com.client.gencache import EnsureDispatch + from win32com.client import Dispatch + import win32com.server.util import pythoncom *************** *** 16,39 **** def test_enumvariant_vb(self): ob, iter = self.iter_factory() ! num=0 for v in iter: ! num += 1 ! self.failUnless(num==self.expected_length, "didnt get the %d items (got %d)" % (self.expected_length, num)) def test_yield(self): ob, i = self.iter_factory() ! num=0 for v in yield_iter(iter(i)): ! num += 1 ! self.failUnless(num==self.expected_length, "didnt get the %d items (got %d)" % (self.expected_length, num)) ! def test_nonenum(self): try: ! for i in self.object: pass self.fail("Could iterate over a non-iterable object") except TypeError: pass # this is expected. ! self.assertRaises(TypeError, iter, self.object) ! self.assertRaises(AttributeError, getattr, self.object, "next") class VBTestCase(_BaseTestCase): --- 18,74 ---- def test_enumvariant_vb(self): ob, iter = self.iter_factory() ! got=[] for v in iter: ! got.append(v) ! self.assertEquals(got, self.expected_data) def test_yield(self): ob, i = self.iter_factory() ! got=[] for v in yield_iter(iter(i)): ! got.append(v) ! self.assertEquals(got, self.expected_data) ! def _do_test_nonenum(self, object): try: ! for i in object: pass self.fail("Could iterate over a non-iterable object") except TypeError: pass # this is expected. ! self.assertRaises(TypeError, iter, object) ! self.assertRaises(AttributeError, getattr, object, "next") ! ! def test_nonenum_wrapper(self): ! # Check our raw PyIDispatch ! ob = self.object._oleobj_ ! try: ! for i in ob: ! pass ! self.fail("Could iterate over a non-iterable object") ! except TypeError: ! pass # this is expected. ! self.assertRaises(TypeError, iter, ob) ! self.assertRaises(AttributeError, getattr, ob, "next") ! ! # And our Dispatch wrapper ! ob = self.object ! try: ! for i in ob: ! pass ! self.fail("Could iterate over a non-iterable object") ! except TypeError: ! pass # this is expected. ! # Note that as our object may be dynamic, we *do* have a __getitem__ ! # method, meaning we *can* call iter() on the object. In this case ! # actual iteration is what fails. ! # So either the 'iter(); will raise a type error, or an attempt to ! # fetch it ! try: ! iter(ob).next() ! self.fail("Expected a TypeError fetching this iterator") ! except TypeError: ! pass ! # And it should never have a 'next' method ! self.assertRaises(AttributeError, getattr, ob, "next") class VBTestCase(_BaseTestCase): *************** *** 42,48 **** # Our VB test harness exposes a property with IEnumVariant. ob = self.object.EnumerableCollectionProperty ! ob.Add(1) ! ob.Add("Two") ! ob.Add("3") # Get the raw IEnumVARIANT. invkind = pythoncom.DISPATCH_METHOD | pythoncom.DISPATCH_PROPERTYGET --- 77,82 ---- # Our VB test harness exposes a property with IEnumVariant. ob = self.object.EnumerableCollectionProperty ! for i in self.expected_data: ! ob.Add(i) # Get the raw IEnumVARIANT. invkind = pythoncom.DISPATCH_METHOD | pythoncom.DISPATCH_PROPERTYGET *************** *** 52,57 **** # don't get in the way of our tests. self.object = EnsureDispatch("PyCOMVBTest.Tester") self.iter_factory = factory - self.expected_length = 3 def tearDown(self): --- 86,117 ---- # don't get in the way of our tests. self.object = EnsureDispatch("PyCOMVBTest.Tester") + self.expected_data = [1, "Two", "3"] + self.iter_factory = factory + + def tearDown(self): + self.object = None + + # Test our client semantics, but using a wrapped Python list object. + # This has the effect of re-using our client specific tests, but in this + # case is exercising the server side. + class SomeObject: + _public_methods_ = ["GetCollection"] + def __init__(self, data): + self.data = data + def GetCollection(self): + return win32com.server.util.NewCollection(self.data) + + class WrappedPythonCOMServerTestCase(_BaseTestCase): + def setUp(self): + def factory(): + ob = self.object.GetCollection() + flags = pythoncom.DISPATCH_METHOD | pythoncom.DISPATCH_PROPERTYGET + enum = ob._oleobj_.Invoke(pythoncom.DISPID_NEWENUM, 0, flags, 1) + return ob, enum.QueryInterface(pythoncom.IID_IEnumVARIANT) + + self.expected_data = [1,'Two',3] + sv = win32com.server.util.wrap(SomeObject(self.expected_data)) + self.object = Dispatch(sv) self.iter_factory = factory def tearDown(self): *************** *** 61,65 **** # We dont want our base class run suite = unittest.TestSuite() ! suite.addTest(unittest.makeSuite(VBTestCase)) return suite --- 121,129 ---- # We dont want our base class run suite = unittest.TestSuite() ! for item in globals().values(): ! if type(item)==type(unittest.TestCase) and \ ! issubclass(item, unittest.TestCase) and \ ! item != _BaseTestCase: ! suite.addTest(unittest.makeSuite(item)) return suite |