test_exception_variations.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. import unittest
  2. class ExceptTestCases(unittest.TestCase):
  3. def test_try_except_else_finally(self):
  4. hit_except = False
  5. hit_else = False
  6. hit_finally = False
  7. try:
  8. raise Exception('nyaa!')
  9. except:
  10. hit_except = True
  11. else:
  12. hit_else = True
  13. finally:
  14. hit_finally = True
  15. self.assertTrue(hit_except)
  16. self.assertTrue(hit_finally)
  17. self.assertFalse(hit_else)
  18. def test_try_except_else_finally_no_exception(self):
  19. hit_except = False
  20. hit_else = False
  21. hit_finally = False
  22. try:
  23. pass
  24. except:
  25. hit_except = True
  26. else:
  27. hit_else = True
  28. finally:
  29. hit_finally = True
  30. self.assertFalse(hit_except)
  31. self.assertTrue(hit_finally)
  32. self.assertTrue(hit_else)
  33. def test_try_except_finally(self):
  34. hit_except = False
  35. hit_finally = False
  36. try:
  37. raise Exception('yarr!')
  38. except:
  39. hit_except = True
  40. finally:
  41. hit_finally = True
  42. self.assertTrue(hit_except)
  43. self.assertTrue(hit_finally)
  44. def test_try_except_finally_no_exception(self):
  45. hit_except = False
  46. hit_finally = False
  47. try:
  48. pass
  49. except:
  50. hit_except = True
  51. finally:
  52. hit_finally = True
  53. self.assertFalse(hit_except)
  54. self.assertTrue(hit_finally)
  55. def test_try_except(self):
  56. hit_except = False
  57. try:
  58. raise Exception('ahoy!')
  59. except:
  60. hit_except = True
  61. self.assertTrue(hit_except)
  62. def test_try_except_no_exception(self):
  63. hit_except = False
  64. try:
  65. pass
  66. except:
  67. hit_except = True
  68. self.assertFalse(hit_except)
  69. def test_try_except_else(self):
  70. hit_except = False
  71. hit_else = False
  72. try:
  73. raise Exception('foo!')
  74. except:
  75. hit_except = True
  76. else:
  77. hit_else = True
  78. self.assertFalse(hit_else)
  79. self.assertTrue(hit_except)
  80. def test_try_except_else_no_exception(self):
  81. hit_except = False
  82. hit_else = False
  83. try:
  84. pass
  85. except:
  86. hit_except = True
  87. else:
  88. hit_else = True
  89. self.assertFalse(hit_except)
  90. self.assertTrue(hit_else)
  91. def test_try_finally_no_exception(self):
  92. hit_finally = False
  93. try:
  94. pass
  95. finally:
  96. hit_finally = True
  97. self.assertTrue(hit_finally)
  98. def test_nested(self):
  99. hit_finally = False
  100. hit_inner_except = False
  101. hit_inner_finally = False
  102. try:
  103. try:
  104. raise Exception('inner exception')
  105. except:
  106. hit_inner_except = True
  107. finally:
  108. hit_inner_finally = True
  109. finally:
  110. hit_finally = True
  111. self.assertTrue(hit_inner_except)
  112. self.assertTrue(hit_inner_finally)
  113. self.assertTrue(hit_finally)
  114. def test_nested_else(self):
  115. hit_else = False
  116. hit_finally = False
  117. hit_except = False
  118. hit_inner_except = False
  119. hit_inner_else = False
  120. try:
  121. try:
  122. pass
  123. except:
  124. hit_inner_except = True
  125. else:
  126. hit_inner_else = True
  127. raise Exception('outer exception')
  128. except:
  129. hit_except = True
  130. else:
  131. hit_else = True
  132. finally:
  133. hit_finally = True
  134. self.assertFalse(hit_inner_except)
  135. self.assertTrue(hit_inner_else)
  136. self.assertFalse(hit_else)
  137. self.assertTrue(hit_finally)
  138. self.assertTrue(hit_except)
  139. def test_nested_exception_in_except(self):
  140. hit_else = False
  141. hit_finally = False
  142. hit_except = False
  143. hit_inner_except = False
  144. hit_inner_else = False
  145. try:
  146. try:
  147. raise Exception('inner exception')
  148. except:
  149. hit_inner_except = True
  150. raise Exception('outer exception')
  151. else:
  152. hit_inner_else = True
  153. except:
  154. hit_except = True
  155. else:
  156. hit_else = True
  157. finally:
  158. hit_finally = True
  159. self.assertTrue(hit_inner_except)
  160. self.assertFalse(hit_inner_else)
  161. self.assertFalse(hit_else)
  162. self.assertTrue(hit_finally)
  163. self.assertTrue(hit_except)
  164. def test_nested_exception_in_else(self):
  165. hit_else = False
  166. hit_finally = False
  167. hit_except = False
  168. hit_inner_except = False
  169. hit_inner_else = False
  170. try:
  171. try:
  172. pass
  173. except:
  174. hit_inner_except = True
  175. else:
  176. hit_inner_else = True
  177. raise Exception('outer exception')
  178. except:
  179. hit_except = True
  180. else:
  181. hit_else = True
  182. finally:
  183. hit_finally = True
  184. self.assertFalse(hit_inner_except)
  185. self.assertTrue(hit_inner_else)
  186. self.assertFalse(hit_else)
  187. self.assertTrue(hit_finally)
  188. self.assertTrue(hit_except)
  189. def test_nested_exception_in_finally_no_exception(self):
  190. hit_else = False
  191. hit_finally = False
  192. hit_except = False
  193. hit_inner_except = False
  194. hit_inner_else = False
  195. hit_inner_finally = False
  196. try:
  197. try:
  198. pass
  199. except:
  200. hit_inner_except = True
  201. else:
  202. hit_inner_else = True
  203. finally:
  204. hit_inner_finally = True
  205. raise Exception('outer exception')
  206. except:
  207. hit_except = True
  208. else:
  209. hit_else = True
  210. finally:
  211. hit_finally = True
  212. self.assertFalse(hit_inner_except)
  213. self.assertTrue(hit_inner_else)
  214. self.assertTrue(hit_inner_finally)
  215. self.assertFalse(hit_else)
  216. self.assertTrue(hit_finally)
  217. self.assertTrue(hit_except)
  218. def test_nested_exception_in_finally_with_exception(self):
  219. hit_else = False
  220. hit_finally = False
  221. hit_except = False
  222. hit_inner_except = False
  223. hit_inner_else = False
  224. hit_inner_finally = False
  225. try:
  226. try:
  227. raise Exception('inner exception')
  228. except:
  229. hit_inner_except = True
  230. else:
  231. hit_inner_else = True
  232. finally:
  233. hit_inner_finally = True
  234. raise Exception('outer exception')
  235. except:
  236. hit_except = True
  237. else:
  238. hit_else = True
  239. finally:
  240. hit_finally = True
  241. self.assertTrue(hit_inner_except)
  242. self.assertFalse(hit_inner_else)
  243. self.assertTrue(hit_inner_finally)
  244. self.assertFalse(hit_else)
  245. self.assertTrue(hit_finally)
  246. self.assertTrue(hit_except)
  247. class ExceptStarTestCases(unittest.TestCase):
  248. def test_try_except_else_finally(self):
  249. hit_except = False
  250. hit_else = False
  251. hit_finally = False
  252. try:
  253. raise Exception('nyaa!')
  254. except* BaseException:
  255. hit_except = True
  256. else:
  257. hit_else = True
  258. finally:
  259. hit_finally = True
  260. self.assertTrue(hit_except)
  261. self.assertTrue(hit_finally)
  262. self.assertFalse(hit_else)
  263. def test_try_except_else_finally_no_exception(self):
  264. hit_except = False
  265. hit_else = False
  266. hit_finally = False
  267. try:
  268. pass
  269. except* BaseException:
  270. hit_except = True
  271. else:
  272. hit_else = True
  273. finally:
  274. hit_finally = True
  275. self.assertFalse(hit_except)
  276. self.assertTrue(hit_finally)
  277. self.assertTrue(hit_else)
  278. def test_try_except_finally(self):
  279. hit_except = False
  280. hit_finally = False
  281. try:
  282. raise Exception('yarr!')
  283. except* BaseException:
  284. hit_except = True
  285. finally:
  286. hit_finally = True
  287. self.assertTrue(hit_except)
  288. self.assertTrue(hit_finally)
  289. def test_try_except_finally_no_exception(self):
  290. hit_except = False
  291. hit_finally = False
  292. try:
  293. pass
  294. except* BaseException:
  295. hit_except = True
  296. finally:
  297. hit_finally = True
  298. self.assertFalse(hit_except)
  299. self.assertTrue(hit_finally)
  300. def test_try_except(self):
  301. hit_except = False
  302. try:
  303. raise Exception('ahoy!')
  304. except* BaseException:
  305. hit_except = True
  306. self.assertTrue(hit_except)
  307. def test_try_except_no_exception(self):
  308. hit_except = False
  309. try:
  310. pass
  311. except* BaseException:
  312. hit_except = True
  313. self.assertFalse(hit_except)
  314. def test_try_except_else(self):
  315. hit_except = False
  316. hit_else = False
  317. try:
  318. raise Exception('foo!')
  319. except* BaseException:
  320. hit_except = True
  321. else:
  322. hit_else = True
  323. self.assertFalse(hit_else)
  324. self.assertTrue(hit_except)
  325. def test_try_except_else_no_exception(self):
  326. hit_except = False
  327. hit_else = False
  328. try:
  329. pass
  330. except* BaseException:
  331. hit_except = True
  332. else:
  333. hit_else = True
  334. self.assertFalse(hit_except)
  335. self.assertTrue(hit_else)
  336. def test_try_finally_no_exception(self):
  337. hit_finally = False
  338. try:
  339. pass
  340. finally:
  341. hit_finally = True
  342. self.assertTrue(hit_finally)
  343. def test_nested(self):
  344. hit_finally = False
  345. hit_inner_except = False
  346. hit_inner_finally = False
  347. try:
  348. try:
  349. raise Exception('inner exception')
  350. except* BaseException:
  351. hit_inner_except = True
  352. finally:
  353. hit_inner_finally = True
  354. finally:
  355. hit_finally = True
  356. self.assertTrue(hit_inner_except)
  357. self.assertTrue(hit_inner_finally)
  358. self.assertTrue(hit_finally)
  359. def test_nested_else(self):
  360. hit_else = False
  361. hit_finally = False
  362. hit_except = False
  363. hit_inner_except = False
  364. hit_inner_else = False
  365. try:
  366. try:
  367. pass
  368. except* BaseException:
  369. hit_inner_except = True
  370. else:
  371. hit_inner_else = True
  372. raise Exception('outer exception')
  373. except* BaseException:
  374. hit_except = True
  375. else:
  376. hit_else = True
  377. finally:
  378. hit_finally = True
  379. self.assertFalse(hit_inner_except)
  380. self.assertTrue(hit_inner_else)
  381. self.assertFalse(hit_else)
  382. self.assertTrue(hit_finally)
  383. self.assertTrue(hit_except)
  384. def test_nested_mixed1(self):
  385. hit_except = False
  386. hit_finally = False
  387. hit_inner_except = False
  388. hit_inner_finally = False
  389. try:
  390. try:
  391. raise Exception('inner exception')
  392. except* BaseException:
  393. hit_inner_except = True
  394. finally:
  395. hit_inner_finally = True
  396. except:
  397. hit_except = True
  398. finally:
  399. hit_finally = True
  400. self.assertTrue(hit_inner_except)
  401. self.assertTrue(hit_inner_finally)
  402. self.assertFalse(hit_except)
  403. self.assertTrue(hit_finally)
  404. def test_nested_mixed2(self):
  405. hit_except = False
  406. hit_finally = False
  407. hit_inner_except = False
  408. hit_inner_finally = False
  409. try:
  410. try:
  411. raise Exception('inner exception')
  412. except:
  413. hit_inner_except = True
  414. finally:
  415. hit_inner_finally = True
  416. except* BaseException:
  417. hit_except = True
  418. finally:
  419. hit_finally = True
  420. self.assertTrue(hit_inner_except)
  421. self.assertTrue(hit_inner_finally)
  422. self.assertFalse(hit_except)
  423. self.assertTrue(hit_finally)
  424. def test_nested_else_mixed1(self):
  425. hit_else = False
  426. hit_finally = False
  427. hit_except = False
  428. hit_inner_except = False
  429. hit_inner_else = False
  430. try:
  431. try:
  432. pass
  433. except* BaseException:
  434. hit_inner_except = True
  435. else:
  436. hit_inner_else = True
  437. raise Exception('outer exception')
  438. except:
  439. hit_except = True
  440. else:
  441. hit_else = True
  442. finally:
  443. hit_finally = True
  444. self.assertFalse(hit_inner_except)
  445. self.assertTrue(hit_inner_else)
  446. self.assertFalse(hit_else)
  447. self.assertTrue(hit_finally)
  448. self.assertTrue(hit_except)
  449. def test_nested_else_mixed2(self):
  450. hit_else = False
  451. hit_finally = False
  452. hit_except = False
  453. hit_inner_except = False
  454. hit_inner_else = False
  455. try:
  456. try:
  457. pass
  458. except:
  459. hit_inner_except = True
  460. else:
  461. hit_inner_else = True
  462. raise Exception('outer exception')
  463. except* BaseException:
  464. hit_except = True
  465. else:
  466. hit_else = True
  467. finally:
  468. hit_finally = True
  469. self.assertFalse(hit_inner_except)
  470. self.assertTrue(hit_inner_else)
  471. self.assertFalse(hit_else)
  472. self.assertTrue(hit_finally)
  473. self.assertTrue(hit_except)
  474. if __name__ == '__main__':
  475. unittest.main()