test_.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. [u'¥ 4.27', dingguo.Sum(4.27, u'CNY')],
  56. ])
  57. def test_sum_parse_text(text, sum):
  58. assert dingguo.Sum.parse_text(text) == sum
  59. @pytest.mark.parametrize(('text'), [
  60. u'pre$1.23 USD',
  61. u'$1.23 USDpost',
  62. u'$1#23 USD',
  63. u'1#23 USD',
  64. ])
  65. def test_sum_parse_text_fail(text):
  66. with pytest.raises(Exception):
  67. dingguo.Sum.parse_text(text)
  68. @pytest.mark.parametrize(('minuend', 'subtrahend', 'difference'), [
  69. [dingguo.Sum(5.0, u'USD'), dingguo.Sum(2.0, u'USD'), dingguo.Sum(3.0, u'USD')],
  70. [dingguo.ScalarFigure(5.0, u'cm'), dingguo.ScalarFigure(2.0, u'cm'), dingguo.ScalarFigure(3.0, u'cm')],
  71. [dingguo.ScalarFigure(1.0, u'kg'), dingguo.ScalarFigure(2.0, u'kg'), dingguo.ScalarFigure(-1.0, u'kg')],
  72. ])
  73. def test_figure_sub(minuend, subtrahend, difference):
  74. minuend_copy = copy.deepcopy(minuend)
  75. subtrahend_copy = copy.deepcopy(subtrahend)
  76. assert (minuend - subtrahend) == difference
  77. assert minuend_copy == minuend
  78. assert subtrahend_copy == subtrahend
  79. @pytest.mark.parametrize(('minuend', 'subtrahend'), [
  80. [dingguo.Sum(5.0, u'USD'), dingguo.Sum(2.0, u'EUR')],
  81. [dingguo.ScalarFigure(5.0, u'cm'), dingguo.ScalarFigure(2.0, u'kg')],
  82. ])
  83. def test_figure_sub_fail(minuend, subtrahend):
  84. with pytest.raises(Exception):
  85. (minuend - subtrahend)
  86. @pytest.mark.parametrize(('factor_a', 'factor_b', 'product'), [
  87. [dingguo.Sum(5.0, u'USD'), 1.5, dingguo.Sum(7.5, u'USD')],
  88. [dingguo.Sum(5.0, u'USD'), 2, dingguo.Sum(10.0, u'USD')],
  89. [dingguo.ScalarFigure(5.0, u'cm'), -0.5, dingguo.ScalarFigure(-2.5, u'cm')],
  90. [dingguo.ScalarFigure(1.0, u'kg'), 10, dingguo.ScalarFigure(10.0, u'kg')],
  91. ])
  92. def test_scalar_figure_mul(factor_a, factor_b, product):
  93. factor_a_copy = copy.deepcopy(factor_a)
  94. factor_b_copy = copy.deepcopy(factor_b)
  95. assert (factor_a * factor_b) == product
  96. assert factor_a_copy == factor_a
  97. assert factor_b_copy == factor_b
  98. @pytest.mark.parametrize(('dividend', 'divisor', 'quotient'), [
  99. [dingguo.Sum(5.0, u'USD'), 2.5, dingguo.Sum(2.0, u'USD')],
  100. [dingguo.Sum(5.0, u'USD'), 2, dingguo.Sum(2.5, u'USD')],
  101. [dingguo.ScalarFigure(5.0, u'cm'), -0.5, dingguo.ScalarFigure(-10.0, u'cm')],
  102. [dingguo.ScalarFigure(1.0, u'kg'), 10, dingguo.ScalarFigure(0.1, u'kg')],
  103. ])
  104. def test_scalar_figure_div(dividend, divisor, quotient):
  105. dividend_copy = copy.deepcopy(dividend)
  106. divisor_copy = copy.deepcopy(divisor)
  107. assert (dividend / divisor) == quotient
  108. assert dividend_copy == dividend
  109. assert divisor_copy == divisor
  110. @pytest.mark.parametrize(('factor_a', 'factor_b'), [
  111. [dingguo.Sum(5.0, u'USD'), dingguo.Sum(2.0, u'EUR')],
  112. [dingguo.ScalarFigure(5.0, u'cm'), dingguo.ScalarFigure(2.0, u'cm')],
  113. ])
  114. def test_figure_mul_fail(factor_a, factor_b):
  115. with pytest.raises(Exception):
  116. (factor_a * factor_b)