test.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. '''
  2. Created on 18 nov. 2016
  3. @author: olinox
  4. '''
  5. import unittest
  6. import dice
  7. class Test(unittest.TestCase):
  8. """unitests for DiceRollParser"""
  9. def test_secured_eval(self):
  10. # refused
  11. self.assertRaises(TypeError, dice._secured_eval, "open('foo', 'r')")
  12. # accepted
  13. dice._secured_eval("1 + max([1,2,3])")
  14. dice._secured_eval("1 + min([1,2,3])")
  15. def test_patterns_validation(self):
  16. """check the with behaviour with valid / invalid patterns"""
  17. # check valid expressions
  18. dice.roll("3")
  19. dice.roll("0d6")
  20. dice.roll("1d6")
  21. dice.roll("1d66")
  22. dice.roll("1d4+2")
  23. dice.roll("1d4-2")
  24. dice.roll("1d4 - 2 ")
  25. dice.roll("6d102+123")
  26. dice.roll("6d102+123+8d6")
  27. dice.roll("6d102+123+8d6+2+1+1-8-6d4+8-2d101+100d2")
  28. dice.roll("32+3-0-2")
  29. dice.roll("1d1-3")
  30. dice.roll("1000d1000")
  31. dice.roll("10 d 10")
  32. dice.roll("10*1d10/2")
  33. dice.roll("1d20**2")
  34. dice.roll("abs(1d6-1d10)")
  35. dice.roll("max(1d6,2d4)")
  36. dice.roll("min(1d6,2d4)")
  37. # test invalid expressions
  38. self.assertRaises(SyntaxError, dice.roll, "1d-8")
  39. self.assertRaises(SyntaxError, dice.roll, "1d")
  40. self.assertRaises(ValueError, dice.roll, "")
  41. self.assertRaises(ValueError, dice.roll, "1d0")
  42. self.assertRaises(TypeError, dice.roll, "d6")
  43. self.assertRaises(TypeError, dice.roll, "abc")
  44. self.assertRaises(TypeError, dice.roll, "1d2,3")
  45. def test_dice_object(self):
  46. d = dice.Dice(6, 6)
  47. self.assertEqual(d.sides, 6)
  48. self.assertEqual(d.amount, 6)
  49. self.assertEqual(d.__repr__(), "<Dice; sides=6; amount=6>")
  50. self.assertRaises(ValueError, setattr, d, "sides", -1)
  51. self.assertRaises(ValueError, setattr, d, "sides", "a")
  52. self.assertRaises(ValueError, setattr, d, "sides", None)
  53. self.assertRaises(ValueError, setattr, d, "amount", -1)
  54. self.assertRaises(ValueError, setattr, d, "amount", "a")
  55. self.assertRaises(ValueError, setattr, d, "amount", None)
  56. self.assertEqual(dice.Dice(1, 6).roll(), 6)
  57. self.assertEqual(dice.Dice.parse("6d1").roll(), 6)
  58. def test_score_object(self):
  59. s = dice.Score([1, 2, 3])
  60. self.assertEqual(s, 6)
  61. self.assertEqual(str(s), "6")
  62. self.assertEqual(list(s), [1, 2, 3])
  63. self.assertEqual(s.detail, [1, 2, 3])
  64. self.assertTrue(1 in s)
  65. self.assertEqual(s.__repr__(), "<Score; score=6; detail=[1, 2, 3]>")
  66. def test_pattern_object(self):
  67. p = dice.Pattern("6d1+6")
  68. self.assertEqual(p._normalize("1 D 6"), "1d6")
  69. p.compile()
  70. self.assertEqual(p.format_string, "{0}+6")
  71. self.assertEqual(p.dices, [dice.Dice(1, 6)])
  72. self.assertEqual(p.roll(), 12)
  73. def test_patternscore_objet(self):
  74. ps = dice.PatternScore("{0}+6", [dice.Score([1, 1, 1, 1, 1, 1])])
  75. self.assertEqual(ps, 12)
  76. self.assertEqual(ps.score(0), 6)
  77. self.assertEqual(ps.scores(), [6])
  78. self.assertEqual(ps.format(), "[1, 1, 1, 1, 1, 1]+6")
  79. def test_compile(self):
  80. p1 = dice.compile("6d1+6")
  81. p2 = dice.Pattern("6d1+6")
  82. p2.compile()
  83. self.assertEqual(p1.format_string, p2.format_string)
  84. self.assertEqual(p1.dices, p2.dices)
  85. def test_roll(self):
  86. ps1 = dice.roll("6d1+6")
  87. ps2 = dice.PatternScore("{0}+6", [dice.Score([1, 1, 1, 1, 1, 1])])
  88. self.assertEqual(ps1, ps2)
  89. def test_rolldice(self):
  90. self.assertEqual(dice.rolldice(1, 6), dice.Dice(1, 6).roll())
  91. if __name__ == "__main__":
  92. unittest.main()