| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -158,6 +158,14 @@ def _parse(tokens, priority=-1): | |||
| 158 | 158 | ||
| 159 | 159 | return result, nexttok | |
| 160 | 160 | ||
| 161 | + def _as_int(n): | ||
| 162 | + try: | ||
| 163 | + i = round(n) | ||
| 164 | + except TypeError: | ||
| 165 | + raise TypeError('Plural value must be an integer, got %s' % | ||
| 166 | + (n.__class__.__name__,)) from None | ||
| 167 | + return n | ||
| 168 | + | ||
| 161 | 169 | def c2py(plural): | |
| 162 | 170 | """Gets a C expression as used in PO files for plural forms and returns a | |
| 163 | 171 | Python function that implements an equivalent expression. | |
@@ -181,11 +189,11 @@ def c2py(plural): | |||
| 181 | 189 | elif c == ')': | |
| 182 | 190 | depth -= 1 | |
| 183 | 191 | ||
| 184 | - ns = {} | ||
| 192 | + ns = {'_as_int': _as_int} | ||
| 185 | 193 | exec('''if True: | |
| 186 | 194 | def func(n): | |
| 187 | 195 | if not isinstance(n, int): | |
| 188 | - raise ValueError('Plural value must be an integer.') | ||
| 196 | + n = _as_int(n) | ||
| 189 | 197 | return int(%s) | |
| 190 | 198 | ''' % result, ns) | |
| 191 | 199 | return ns['func'] | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -441,12 +441,16 @@ def test_division(self): | |||
| 441 | 441 | self.assertRaises(ZeroDivisionError, f, 0) | |
| 442 | 442 | ||
| 443 | 443 | def test_plural_number(self): | |
| 444 | - f = gettext.c2py('1') | ||
| 445 | - self.assertEqual(f(1), 1) | ||
| 446 | - self.assertRaises(ValueError, f, 1.0) | ||
| 447 | - self.assertRaises(ValueError, f, '1') | ||
| 448 | - self.assertRaises(ValueError, f, []) | ||
| 449 | - self.assertRaises(ValueError, f, object()) | ||
| 444 | + f = gettext.c2py('n != 1') | ||
| 445 | + self.assertEqual(f(1), 0) | ||
| 446 | + self.assertEqual(f(2), 1) | ||
| 447 | + self.assertEqual(f(1.0), 0) | ||
| 448 | + self.assertEqual(f(2.0), 1) | ||
| 449 | + self.assertEqual(f(1.1), 1) | ||
| 450 | + self.assertRaises(TypeError, f, '2') | ||
| 451 | + self.assertRaises(TypeError, f, b'2') | ||
| 452 | + self.assertRaises(TypeError, f, []) | ||
| 453 | + self.assertRaises(TypeError, f, object()) | ||
| 450 | 454 | ||
| 451 | 455 | ||
| 452 | 456 | class GNUTranslationParsingTest(GettextBaseTest): | |
| Back | FazBrowse Home | New Git URL |
0 commit comments