/examples/libtest/UnitTest.py
Python | 126 lines | 111 code | 14 blank | 1 comment | 3 complexity | b616a09de09212dda0f42eaaecf190bb MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
- from write import write, writebr
-
- class UnitTest:
- def __init__(self):
- self.tests_completed=0
- self.tests_failed=0
- self.tests_passed=0
- self.test_methods=[]
-
- # define alternate names for methods
- self.assertEqual = self.failUnlessEqual
- self.assertEquals = self.failUnlessEqual
-
- self.assertNotEqual = self.failIfEqual
- self.assertFalse = self.failIf
- self.assertTrue = self.failUnless
-
- def run(self):
- self.getTestMethods()
- for test_method_name in self.test_methods:
- test_method=getattr(self, test_method_name)
- self.setUp()
- test_method()
- self.tearDown()
-
- self.displayStats()
-
- def setUp(self):
- pass
-
- def tearDown(self):
- pass
-
- def getName(self):
- return ""
-
- def getNameFmt(self, msg=""):
- if self.getName():
- if msg:
- msg=" " + msg
- return self.getName() + msg + ": "
- return ""
-
- def getTestMethods(self):
- self.test_methods=filter(self, self.isTestMethod, dir(self))
-
- def isTestMethod(self, method):
- if callable(getattr(self, method)):
- if method.find("test")==0:
- return True
- return False
-
- def fail(self, msg=None):
- self.tests_failed+=1
-
- if not msg:
- msg="assertion failed"
-
- title="<b>" + self.getNameFmt("Test failed") + "</b>"
- writebr(title + msg)
- if console:
- console.error(msg)
- console.trace()
- return False
-
- def startTest(self):
- self.tests_completed+=1
-
- def failIf(self, expr, msg=None):
- self.startTest()
- if expr:
- return self.fail(msg)
-
- def failUnless(self, expr, msg=None):
- self.startTest()
- if not expr:
- return self.fail(msg)
-
- def failUnlessEqual(self, first, second, msg=None):
- self.startTest()
- if not first == second:
- if not msg:
- msg=str(first) + " != " + str(second)
- return self.fail(msg)
-
- def failIfEqual(self, first, second, msg=None):
- self.startTest()
- if first == second:
- if not msg:
- msg=str(first) + " == " + str(second)
- return self.fail(msg)
-
- def failUnlessAlmostEqual(self, first, second, places=7, msg=None):
- self.startTest()
- if round(second-first, places) != 0:
- if not msg:
- msg=str(first) + " != " + str(second) + " within " + str(places) + " places"
- return self.fail(msg)
-
- def failIfAlmostEqual(self, first, second, places=7, msg=None):
- self.startTest()
- if round(second-first, places) == 0:
- if not msg:
- msg=str(first) + " == " + str(second) + " within " + str(places) + " places"
- return self.fail(msg)
-
- def displayStats(self):
- if self.tests_failed:
- bg_colour="#ff0000"
- fg_colour="#ffffff"
- else:
- bg_colour="#00ff00"
- fg_colour="#000000"
-
- tests_passed=self.tests_completed - self.tests_failed
-
- output="<table cellpadding=4 width=100%><tr><td bgcolor='" + bg_colour + "'><font face='arial' size=4 color='" + fg_colour + "'><b>"
- output+=self.getNameFmt() + "Passed " + tests_passed + "/" + self.tests_completed + " tests"
-
- if self.tests_failed:
- output+=" (" + self.tests_failed + " failed)"
-
- output+="</b></font></td></tr></table>"
-
- write(output)
-