def test_localize(self): formatter = i18n.LocalizingFormatter() translator = unittest.mock.Mock() s = "abc {a} def {} ghi {foo}" ls = i18n.LocalizableString(s) with unittest.mock.patch.object(formatter, "vformat") as vformat: ls.localize( formatter, translator, "foobar", a=123, foo=34.5 ) self.assertSequenceEqual( [ unittest.mock.call.gettext(s) ], translator.mock_calls ) self.assertSequenceEqual( [ unittest.mock.call( translator.gettext(), ("foobar",), { "a": 123, "foo": 34.5, }, ) ], vformat.mock_calls )
def test_localize_plural(self): formatter = i18n.LocalizingFormatter() translator = unittest.mock.Mock() s1 = "{a} thing" sn = "{a} things" ls = i18n.LocalizableString(s1, sn, "a") with contextlib.ExitStack() as stack: vformat = stack.enter_context( unittest.mock.patch.object(formatter, "vformat")) get_field = stack.enter_context( unittest.mock.patch.object(formatter, "get_field")) get_field.return_value = 123, "a" ls.localize(formatter, translator, "foobar", a=123, foo=34.5) self.assertSequenceEqual([ unittest.mock.call("a", ("foobar", ), { "a": 123, "foo": 34.5 }), ], get_field.mock_calls) self.assertSequenceEqual([unittest.mock.call.ngettext(s1, sn, 123)], translator.mock_calls) self.assertSequenceEqual([ unittest.mock.call( translator.ngettext(), ("foobar", ), { "a": 123, "foo": 34.5, }, ) ], vformat.mock_calls)
def test_init(self): s = "foobar baz" ls = i18n.LocalizableString(s) self.assertNotEqual(ls, s) self.assertEqual(ls.singular, s) self.assertIsNone(ls.plural) self.assertIsNone(ls.number_index)
def test_immutable(self): ls = i18n.LocalizableString("foo", "bar", "baz") with self.assertRaises(AttributeError): ls.singular = "fnord" with self.assertRaises(AttributeError): ls.plural = "fnord" with self.assertRaises(AttributeError): ls.number_index = "fnord" with self.assertRaises(AttributeError): ls.foobar = "fnord"
def test_init_plural_number_index_defaults_to_zero(self): sing = "{:d} thing" plural = "{:d} things" ls = i18n.LocalizableString(sing, plural) self.assertEqual( sing, ls.singular, ) self.assertEqual(plural, ls.plural) self.assertEqual("0", ls.number_index)
def test_init_plural(self): sing = "{1:d} thing" plural = "{1:d} things" ls = i18n.LocalizableString(sing, plural, 1) self.assertEqual( sing, ls.singular, ) self.assertEqual(plural, ls.plural) self.assertEqual("1", ls.number_index)
def test_compares_to_other_localizable_strings_with_plural_eq(self): s1 = "foobar baz" s2 = "fnord" ls1 = i18n.LocalizableString(s1, "plural") ls2 = i18n.LocalizableString(s1, "plural") ls3 = i18n.LocalizableString(s2, "plural") self.assertTrue(ls1 == ls2) self.assertTrue(ls2 == ls1) self.assertFalse(ls1 != ls2) self.assertFalse(ls2 != ls1) self.assertTrue(ls1 != ls3) self.assertTrue(ls3 != ls1) self.assertFalse(ls1 == ls3) self.assertFalse(ls3 == ls1) self.assertTrue(ls2 != ls3) self.assertTrue(ls3 != ls2) self.assertFalse(ls2 == ls3) self.assertFalse(ls3 == ls2)
def test_hashable(self): s1 = i18n.LocalizableString("foo") s2 = i18n.LocalizableString("foo") self.assertEqual(hash(s1), hash(s2))
def test_repr_plural(self): ls = i18n.LocalizableString("foobar", "baz", "a") self.assertEqual( "ngettext({!r}, {!r}, {!r})".format("foobar", "baz", "a"), repr(ls), )
def test_repr_singular(self): ls = i18n.LocalizableString("foobar") self.assertEqual( "_({!r})".format("foobar"), repr(ls), )
def test_str_plural(self): ls = i18n.LocalizableString("foobar", "baz") self.assertEqual( "foobar", str(ls), )
def test_str_singular(self): ls = i18n.LocalizableString("foobar") self.assertEqual( "foobar", str(ls), )
def test_init_rejects_number_index_without_plural_string(self): with self.assertRaisesRegex(ValueError, "plural is required"): i18n.LocalizableString("abc", number_index=12)