test_.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. import copy
  4. import datetime
  5. import dingguo
  6. import os
  7. import yaml
  8. def test_sum_init_eur():
  9. assert dingguo.Sum(1.23, u'EUR') == dingguo.Sum(1.23, u'€')
  10. def test_sum_init_usd():
  11. assert dingguo.Sum(1.23, u'USD') == dingguo.Sum(1.23, u'US$')
  12. def test_distance_metres():
  13. assert int(dingguo.Distance(1.23, u'km').metres) == 1230
  14. def test_person_first_name():
  15. p = dingguo.Person()
  16. p.first_name = u'äbc'
  17. assert p.first_name == u'äbc'
  18. p.first_name = u'qrßtuvw'
  19. assert p.first_name == u'qrßtuvw'
  20. def test_person_first_name_string():
  21. p = dingguo.Person()
  22. with pytest.raises(Exception):
  23. p.first_name = 'äbc'
  24. def test_person_last_name():
  25. p = dingguo.Person()
  26. p.last_name = u'歌曲'
  27. assert p.last_name == u'歌曲'
  28. p.last_name = u'bär'
  29. assert p.last_name == u'bär'
  30. def test_person_last_name_string():
  31. p = dingguo.Person()
  32. with pytest.raises(Exception):
  33. p.last_name = 'äbc'
  34. @pytest.mark.parametrize(('text', 'sum'), [
  35. [u'$-1,23 USD', dingguo.Sum(-1.23, u'USD')],
  36. [u'$-1.23 USD', dingguo.Sum(-1.23, u'USD')],
  37. [u'$-30 USD', dingguo.Sum(-30.0, u'USD')],
  38. [u'$-30,00 USD', dingguo.Sum(-30.0, u'USD')],
  39. [u'$-30.00 USD', dingguo.Sum(-30.0, u'USD')],
  40. [u'$-8', dingguo.Sum(-8.0, u'USD')],
  41. [u'$-8,00', dingguo.Sum(-8.0, u'USD')],
  42. [u'$-8.00', dingguo.Sum(-8.0, u'USD')],
  43. [u'$1,23 USD', dingguo.Sum(1.23, u'USD')],
  44. [u'$1.23 USD', dingguo.Sum(1.23, u'USD')],
  45. [u'$30 USD', dingguo.Sum(30.0, u'USD')],
  46. [u'$30,00 USD', dingguo.Sum(30.0, u'USD')],
  47. [u'$30.00 USD', dingguo.Sum(30.0, u'USD')],
  48. [u'$8', dingguo.Sum(8.0, u'USD')],
  49. [u'$8,00', dingguo.Sum(8.0, u'USD')],
  50. [u'$8.00', dingguo.Sum(8.0, u'USD')],
  51. [u'US$-0.50', dingguo.Sum(-0.5, u'USD')],
  52. [u'US$0.50', dingguo.Sum(0.5, u'USD')],
  53. [u'€-0.25', dingguo.Sum(-0.25, u'EUR')],
  54. [u'€1.20', dingguo.Sum(1.2, u'EUR')],
  55. ])
  56. def test_sum_parse_text(text, sum):
  57. assert dingguo.Sum.parse_text(text) == sum
  58. @pytest.mark.parametrize(('text'), [
  59. u'pre$1.23 USD',
  60. u'$1.23 USDpost',
  61. u'$1#23 USD',
  62. u'1#23 USD',
  63. ])
  64. def test_sum_parse_text_fail(text):
  65. with pytest.raises(Exception):
  66. dingguo.Sum.parse_text(text)
  67. @pytest.mark.parametrize(('minuend', 'subtrahend', 'difference'), [
  68. [dingguo.Sum(5.0, u'USD'), dingguo.Sum(2.0, u'USD'), dingguo.Sum(3.0, u'USD')],
  69. [dingguo.ScalarFigure(5.0, u'cm'), dingguo.ScalarFigure(2.0, u'cm'), dingguo.ScalarFigure(3.0, u'cm')],
  70. [dingguo.ScalarFigure(1.0, u'kg'), dingguo.ScalarFigure(2.0, u'kg'), dingguo.ScalarFigure(-1.0, u'kg')],
  71. ])
  72. def test_figure_sub(minuend, subtrahend, difference):
  73. minuend_copy = copy.deepcopy(minuend)
  74. subtrahend_copy = copy.deepcopy(subtrahend)
  75. assert (minuend - subtrahend) == difference
  76. assert minuend_copy == minuend
  77. assert subtrahend_copy == subtrahend
  78. @pytest.mark.parametrize(('minuend', 'subtrahend'), [
  79. [dingguo.Sum(5.0, u'USD'), dingguo.Sum(2.0, u'EUR')],
  80. [dingguo.ScalarFigure(5.0, u'cm'), dingguo.ScalarFigure(2.0, u'kg')],
  81. ])
  82. def test_figure_sub_fail(minuend, subtrahend):
  83. with pytest.raises(Exception):
  84. (minuend - subtrahend)
  85. @pytest.mark.parametrize(('factor_a', 'factor_b', 'product'), [
  86. [dingguo.Sum(5.0, u'USD'), 1.5, dingguo.Sum(7.5, u'USD')],
  87. [dingguo.Sum(5.0, u'USD'), 2, dingguo.Sum(10.0, u'USD')],
  88. [dingguo.ScalarFigure(5.0, u'cm'), -0.5, dingguo.ScalarFigure(-2.5, u'cm')],
  89. [dingguo.ScalarFigure(1.0, u'kg'), 10, dingguo.ScalarFigure(10.0, u'kg')],
  90. ])
  91. def test_scalar_figure_mul(factor_a, factor_b, product):
  92. factor_a_copy = copy.deepcopy(factor_a)
  93. factor_b_copy = copy.deepcopy(factor_b)
  94. assert (factor_a * factor_b) == product
  95. assert factor_a_copy == factor_a
  96. assert factor_b_copy == factor_b
  97. @pytest.mark.parametrize(('factor_a', 'factor_b'), [
  98. [dingguo.Sum(5.0, u'USD'), dingguo.Sum(2.0, u'EUR')],
  99. [dingguo.ScalarFigure(5.0, u'cm'), dingguo.ScalarFigure(2.0, u'cm')],
  100. ])
  101. def test_figure_mul_fail(factor_a, factor_b):
  102. with pytest.raises(Exception):
  103. (factor_a * factor_b)