12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import sys
- import unittest
-
- import pythoncom
- from win32com.client import Dispatch
- from win32com.client.gencache import EnsureDispatch
-
-
- class PippoTester(unittest.TestCase):
- def setUp(self):
- from win32com.test import pippo_server
- from win32com.test.util import RegisterPythonServer
-
- RegisterPythonServer(pippo_server.__file__, "Python.Test.Pippo")
- # create it.
- self.object = Dispatch("Python.Test.Pippo")
-
- def testLeaks(self):
- try:
- gtrc = sys.gettotalrefcount
- except AttributeError:
- print("Please run this with python_d for leak tests")
- gtrc = lambda: 0
- # note creating self.object() should have consumed our "one time" leaks
- self.object.Method1()
- start = gtrc()
- for i in range(1000):
- object = Dispatch("Python.Test.Pippo")
- object.Method1()
- object = None
- end = gtrc()
- if end - start > 5:
- self.fail("We lost %d references!" % (end - start,))
-
- def testResults(self):
- rc, out1 = self.object.Method2(123, 111)
- self.assertEqual(rc, 123)
- self.assertEqual(out1, 222)
-
- def testPythonArrays(self):
- self._testArray([-3, -2, -1, 0, 1, 2, 3])
- self._testArray([-3.14, -2, -0.1, 0.0, 1.1, 2.5, 3])
-
- def testNumpyArrays(self):
- try:
- import numpy
- except:
- print("Numpy test not possible because numpy module failed to import")
- return
- self._testArray(numpy.array([-3, -2, -1, 0, 1, 2, 3]))
- self._testArray(numpy.array([-3.14, -2, -0.1, 0.0, 1.1, 2.5, 3]))
-
- def testByteArrays(self):
- if "bytes" in dir(__builtins__):
- # Use eval to avoid compilation error in Python 2.
- self._testArray(eval("b'abcdef'"))
- self._testArray(eval("bytearray(b'abcdef')"))
-
- def _testArray(self, inArray):
- outArray = self.object.Method3(inArray)
- self.assertEqual(list(outArray), list(inArray))
-
- def testLeaksGencache(self):
- try:
- gtrc = sys.gettotalrefcount
- except AttributeError:
- print("Please run this with python_d for leak tests")
- gtrc = lambda: 0
- # note creating self.object() should have consumed our "one time" leaks
- object = EnsureDispatch("Python.Test.Pippo")
- start = gtrc()
- for i in range(1000):
- object = EnsureDispatch("Python.Test.Pippo")
- object.Method1()
- object = None
- end = gtrc()
- if end - start > 10:
- self.fail("We lost %d references!" % (end - start,))
-
-
- if __name__ == "__main__":
- unittest.main()
|