/lib-python/2.7/unittest/test/test_assertions.py

https://github.com/alemacgo/pypy · Python · 292 lines · 233 code · 52 blank · 7 comment · 28 complexity · bad57743ab8b770aa05627effacfafb0 MD5 · raw file

  1. import datetime
  2. import unittest
  3. class Test_Assertions(unittest.TestCase):
  4. def test_AlmostEqual(self):
  5. self.assertAlmostEqual(1.00000001, 1.0)
  6. self.assertNotAlmostEqual(1.0000001, 1.0)
  7. self.assertRaises(self.failureException,
  8. self.assertAlmostEqual, 1.0000001, 1.0)
  9. self.assertRaises(self.failureException,
  10. self.assertNotAlmostEqual, 1.00000001, 1.0)
  11. self.assertAlmostEqual(1.1, 1.0, places=0)
  12. self.assertRaises(self.failureException,
  13. self.assertAlmostEqual, 1.1, 1.0, places=1)
  14. self.assertAlmostEqual(0, .1+.1j, places=0)
  15. self.assertNotAlmostEqual(0, .1+.1j, places=1)
  16. self.assertRaises(self.failureException,
  17. self.assertAlmostEqual, 0, .1+.1j, places=1)
  18. self.assertRaises(self.failureException,
  19. self.assertNotAlmostEqual, 0, .1+.1j, places=0)
  20. self.assertAlmostEqual(float('inf'), float('inf'))
  21. self.assertRaises(self.failureException, self.assertNotAlmostEqual,
  22. float('inf'), float('inf'))
  23. def test_AmostEqualWithDelta(self):
  24. self.assertAlmostEqual(1.1, 1.0, delta=0.5)
  25. self.assertAlmostEqual(1.0, 1.1, delta=0.5)
  26. self.assertNotAlmostEqual(1.1, 1.0, delta=0.05)
  27. self.assertNotAlmostEqual(1.0, 1.1, delta=0.05)
  28. self.assertRaises(self.failureException, self.assertAlmostEqual,
  29. 1.1, 1.0, delta=0.05)
  30. self.assertRaises(self.failureException, self.assertNotAlmostEqual,
  31. 1.1, 1.0, delta=0.5)
  32. self.assertRaises(TypeError, self.assertAlmostEqual,
  33. 1.1, 1.0, places=2, delta=2)
  34. self.assertRaises(TypeError, self.assertNotAlmostEqual,
  35. 1.1, 1.0, places=2, delta=2)
  36. first = datetime.datetime.now()
  37. second = first + datetime.timedelta(seconds=10)
  38. self.assertAlmostEqual(first, second,
  39. delta=datetime.timedelta(seconds=20))
  40. self.assertNotAlmostEqual(first, second,
  41. delta=datetime.timedelta(seconds=5))
  42. def test_assertRaises(self):
  43. def _raise(e):
  44. raise e
  45. self.assertRaises(KeyError, _raise, KeyError)
  46. self.assertRaises(KeyError, _raise, KeyError("key"))
  47. try:
  48. self.assertRaises(KeyError, lambda: None)
  49. except self.failureException as e:
  50. self.assertIn("KeyError not raised", e.args)
  51. else:
  52. self.fail("assertRaises() didn't fail")
  53. try:
  54. self.assertRaises(KeyError, _raise, ValueError)
  55. except ValueError:
  56. pass
  57. else:
  58. self.fail("assertRaises() didn't let exception pass through")
  59. with self.assertRaises(KeyError) as cm:
  60. try:
  61. raise KeyError
  62. except Exception, e:
  63. raise
  64. self.assertIs(cm.exception, e)
  65. with self.assertRaises(KeyError):
  66. raise KeyError("key")
  67. try:
  68. with self.assertRaises(KeyError):
  69. pass
  70. except self.failureException as e:
  71. self.assertIn("KeyError not raised", e.args)
  72. else:
  73. self.fail("assertRaises() didn't fail")
  74. try:
  75. with self.assertRaises(KeyError):
  76. raise ValueError
  77. except ValueError:
  78. pass
  79. else:
  80. self.fail("assertRaises() didn't let exception pass through")
  81. def testAssertNotRegexpMatches(self):
  82. self.assertNotRegexpMatches('Ala ma kota', r'r+')
  83. try:
  84. self.assertNotRegexpMatches('Ala ma kota', r'k.t', 'Message')
  85. except self.failureException, e:
  86. self.assertIn("'kot'", e.args[0])
  87. self.assertIn('Message', e.args[0])
  88. else:
  89. self.fail('assertNotRegexpMatches should have failed.')
  90. class TestLongMessage(unittest.TestCase):
  91. """Test that the individual asserts honour longMessage.
  92. This actually tests all the message behaviour for
  93. asserts that use longMessage."""
  94. def setUp(self):
  95. class TestableTestFalse(unittest.TestCase):
  96. longMessage = False
  97. failureException = self.failureException
  98. def testTest(self):
  99. pass
  100. class TestableTestTrue(unittest.TestCase):
  101. longMessage = True
  102. failureException = self.failureException
  103. def testTest(self):
  104. pass
  105. self.testableTrue = TestableTestTrue('testTest')
  106. self.testableFalse = TestableTestFalse('testTest')
  107. def testDefault(self):
  108. self.assertFalse(unittest.TestCase.longMessage)
  109. def test_formatMsg(self):
  110. self.assertEqual(self.testableFalse._formatMessage(None, "foo"), "foo")
  111. self.assertEqual(self.testableFalse._formatMessage("foo", "bar"), "foo")
  112. self.assertEqual(self.testableTrue._formatMessage(None, "foo"), "foo")
  113. self.assertEqual(self.testableTrue._formatMessage("foo", "bar"), "bar : foo")
  114. # This blows up if _formatMessage uses string concatenation
  115. self.testableTrue._formatMessage(object(), 'foo')
  116. def test_formatMessage_unicode_error(self):
  117. one = ''.join(chr(i) for i in range(255))
  118. # this used to cause a UnicodeDecodeError constructing msg
  119. self.testableTrue._formatMessage(one, u'\uFFFD')
  120. def assertMessages(self, methodName, args, errors):
  121. def getMethod(i):
  122. useTestableFalse = i < 2
  123. if useTestableFalse:
  124. test = self.testableFalse
  125. else:
  126. test = self.testableTrue
  127. return getattr(test, methodName)
  128. for i, expected_regexp in enumerate(errors):
  129. testMethod = getMethod(i)
  130. kwargs = {}
  131. withMsg = i % 2
  132. if withMsg:
  133. kwargs = {"msg": "oops"}
  134. with self.assertRaisesRegexp(self.failureException,
  135. expected_regexp=expected_regexp):
  136. testMethod(*args, **kwargs)
  137. def testAssertTrue(self):
  138. self.assertMessages('assertTrue', (False,),
  139. ["^False is not True$", "^oops$", "^False is not True$",
  140. "^False is not True : oops$"])
  141. def testAssertFalse(self):
  142. self.assertMessages('assertFalse', (True,),
  143. ["^True is not False$", "^oops$", "^True is not False$",
  144. "^True is not False : oops$"])
  145. def testNotEqual(self):
  146. self.assertMessages('assertNotEqual', (1, 1),
  147. ["^1 == 1$", "^oops$", "^1 == 1$",
  148. "^1 == 1 : oops$"])
  149. def testAlmostEqual(self):
  150. self.assertMessages('assertAlmostEqual', (1, 2),
  151. ["^1 != 2 within 7 places$", "^oops$",
  152. "^1 != 2 within 7 places$", "^1 != 2 within 7 places : oops$"])
  153. def testNotAlmostEqual(self):
  154. self.assertMessages('assertNotAlmostEqual', (1, 1),
  155. ["^1 == 1 within 7 places$", "^oops$",
  156. "^1 == 1 within 7 places$", "^1 == 1 within 7 places : oops$"])
  157. def test_baseAssertEqual(self):
  158. self.assertMessages('_baseAssertEqual', (1, 2),
  159. ["^1 != 2$", "^oops$", "^1 != 2$", "^1 != 2 : oops$"])
  160. def testAssertSequenceEqual(self):
  161. # Error messages are multiline so not testing on full message
  162. # assertTupleEqual and assertListEqual delegate to this method
  163. self.assertMessages('assertSequenceEqual', ([], [None]),
  164. ["\+ \[None\]$", "^oops$", r"\+ \[None\]$",
  165. r"\+ \[None\] : oops$"])
  166. def testAssertSetEqual(self):
  167. self.assertMessages('assertSetEqual', (set(), set([None])),
  168. ["None$", "^oops$", "None$",
  169. "None : oops$"])
  170. def testAssertIn(self):
  171. self.assertMessages('assertIn', (None, []),
  172. ['^None not found in \[\]$', "^oops$",
  173. '^None not found in \[\]$',
  174. '^None not found in \[\] : oops$'])
  175. def testAssertNotIn(self):
  176. self.assertMessages('assertNotIn', (None, [None]),
  177. ['^None unexpectedly found in \[None\]$', "^oops$",
  178. '^None unexpectedly found in \[None\]$',
  179. '^None unexpectedly found in \[None\] : oops$'])
  180. def testAssertDictEqual(self):
  181. self.assertMessages('assertDictEqual', ({}, {'key': 'value'}),
  182. [r"\+ \{'key': 'value'\}$", "^oops$",
  183. "\+ \{'key': 'value'\}$",
  184. "\+ \{'key': 'value'\} : oops$"])
  185. def testAssertDictContainsSubset(self):
  186. self.assertMessages('assertDictContainsSubset', ({'key': 'value'}, {}),
  187. ["^Missing: 'key'$", "^oops$",
  188. "^Missing: 'key'$",
  189. "^Missing: 'key' : oops$"])
  190. def testAssertItemsEqual(self):
  191. self.assertMessages('assertItemsEqual', ([], [None]),
  192. [r"\[None\]$", "^oops$",
  193. r"\[None\]$",
  194. r"\[None\] : oops$"])
  195. def testAssertMultiLineEqual(self):
  196. self.assertMessages('assertMultiLineEqual', ("", "foo"),
  197. [r"\+ foo$", "^oops$",
  198. r"\+ foo$",
  199. r"\+ foo : oops$"])
  200. def testAssertLess(self):
  201. self.assertMessages('assertLess', (2, 1),
  202. ["^2 not less than 1$", "^oops$",
  203. "^2 not less than 1$", "^2 not less than 1 : oops$"])
  204. def testAssertLessEqual(self):
  205. self.assertMessages('assertLessEqual', (2, 1),
  206. ["^2 not less than or equal to 1$", "^oops$",
  207. "^2 not less than or equal to 1$",
  208. "^2 not less than or equal to 1 : oops$"])
  209. def testAssertGreater(self):
  210. self.assertMessages('assertGreater', (1, 2),
  211. ["^1 not greater than 2$", "^oops$",
  212. "^1 not greater than 2$",
  213. "^1 not greater than 2 : oops$"])
  214. def testAssertGreaterEqual(self):
  215. self.assertMessages('assertGreaterEqual', (1, 2),
  216. ["^1 not greater than or equal to 2$", "^oops$",
  217. "^1 not greater than or equal to 2$",
  218. "^1 not greater than or equal to 2 : oops$"])
  219. def testAssertIsNone(self):
  220. self.assertMessages('assertIsNone', ('not None',),
  221. ["^'not None' is not None$", "^oops$",
  222. "^'not None' is not None$",
  223. "^'not None' is not None : oops$"])
  224. def testAssertIsNotNone(self):
  225. self.assertMessages('assertIsNotNone', (None,),
  226. ["^unexpectedly None$", "^oops$",
  227. "^unexpectedly None$",
  228. "^unexpectedly None : oops$"])
  229. def testAssertIs(self):
  230. self.assertMessages('assertIs', (None, 'foo'),
  231. ["^None is not 'foo'$", "^oops$",
  232. "^None is not 'foo'$",
  233. "^None is not 'foo' : oops$"])
  234. def testAssertIsNot(self):
  235. self.assertMessages('assertIsNot', (None, None),
  236. ["^unexpectedly identical: None$", "^oops$",
  237. "^unexpectedly identical: None$",
  238. "^unexpectedly identical: None : oops$"])
  239. if __name__ == '__main__':
  240. unittest.main()