1import os
2
3import pytest
4
5from pint import UnitRegistry
6from pint.testsuite import helpers
7
8
9@helpers.requires_not_babel()
10def test_no_babel(sess_registry):
11    ureg = sess_registry
12    distance = 24.0 * ureg.meter
13    with pytest.raises(Exception):
14        distance.format_babel(locale="fr_FR", length="long")
15
16
17@helpers.requires_babel()
18def test_format(sess_registry):
19    ureg = sess_registry
20    dirname = os.path.dirname(__file__)
21    ureg.load_definitions(os.path.join(dirname, "../xtranslated.txt"))
22
23    distance = 24.0 * ureg.meter
24    assert distance.format_babel(locale="fr_FR", length="long") == "24.0 mètres"
25    time = 8.0 * ureg.second
26    assert time.format_babel(locale="fr_FR", length="long") == "8.0 secondes"
27    assert time.format_babel(locale="ro", length="short") == "8.0 s"
28    acceleration = distance / time ** 2
29    assert (
30        acceleration.format_babel(locale="fr_FR", length="long")
31        == "0.375 mètre par seconde²"
32    )
33    mks = ureg.get_system("mks")
34    assert mks.format_babel(locale="fr_FR") == "métrique"
35
36
37@helpers.requires_babel()
38def test_registry_locale():
39    ureg = UnitRegistry(fmt_locale="fr_FR")
40    dirname = os.path.dirname(__file__)
41    ureg.load_definitions(os.path.join(dirname, "../xtranslated.txt"))
42
43    distance = 24.0 * ureg.meter
44    assert distance.format_babel(length="long") == "24.0 mètres"
45    time = 8.0 * ureg.second
46    assert time.format_babel(length="long") == "8.0 secondes"
47    assert time.format_babel(locale="ro", length="short") == "8.0 s"
48    acceleration = distance / time ** 2
49    assert acceleration.format_babel(length="long") == "0.375 mètre par seconde²"
50    mks = ureg.get_system("mks")
51    assert mks.format_babel(locale="fr_FR") == "métrique"
52
53
54@helpers.requires_babel()
55def test_unit_format_babel():
56    ureg = UnitRegistry(fmt_locale="fr_FR")
57    volume = ureg.Unit("ml")
58    assert volume.format_babel() == "millilitre"
59
60
61@helpers.requires_babel()
62def test_no_registry_locale(sess_registry):
63    ureg = sess_registry
64    distance = 24.0 * ureg.meter
65    with pytest.raises(Exception):
66        distance.format_babel()
67
68
69@helpers.requires_babel()
70def test_str(func_registry):
71    ureg = func_registry
72    d = 24.0 * ureg.meter
73
74    s = "24.0 meter"
75    assert str(d) == s
76    assert "%s" % d == s
77    assert "{}".format(d) == s
78
79    ureg.set_fmt_locale("fr_FR")
80    s = "24.0 mètres"
81    assert str(d) == s
82    assert "%s" % d == s
83    assert "{}".format(d) == s
84
85    ureg.set_fmt_locale(None)
86    s = "24.0 meter"
87    assert str(d) == s
88    assert "%s" % d == s
89    assert "{}".format(d) == s
90