[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
|