From 16b3afab2047436c115257cb955aec6c120a99b8a7275115bcf827c8f7f4320b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Tue, 4 Jun 2019 10:02:44 +0000 Subject: [PATCH] Accepting request 707417 from home:pgajdos - turn on the testsuite - added sources + test.py OBS-URL: https://build.opensuse.org/request/show/707417 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-pyuca?expand=0&rev=5 --- python-pyuca.changes | 7 ++ python-pyuca.spec | 12 ++- test.py | 243 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 259 insertions(+), 3 deletions(-) create mode 100644 test.py diff --git a/python-pyuca.changes b/python-pyuca.changes index 0b5d151..47bbba8 100644 --- a/python-pyuca.changes +++ b/python-pyuca.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Jun 4 08:18:19 UTC 2019 - pgajdos@suse.com + +- turn on the testsuite +- added sources + + test.py + ------------------------------------------------------------------- Thu Aug 2 07:39:26 UTC 2018 - tchvatal@suse.com diff --git a/python-pyuca.spec b/python-pyuca.spec index 8aed7c7..b6edd37 100644 --- a/python-pyuca.spec +++ b/python-pyuca.spec @@ -1,7 +1,7 @@ # # spec file for package python-pyuca # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -25,7 +25,9 @@ Summary: Python implementation of the Unicode Collation Algorithm License: MIT Group: Development/Languages/Python Url: http://github.com/jtauber/pyuca -Source: https://pypi.python.org/packages/source/p/pyuca/pyuca-%{version}.tar.gz +Source0: https://pypi.python.org/packages/source/p/pyuca/pyuca-%{version}.tar.gz +# https://github.com/jtauber/pyuca/issues/21 +Source1: https://raw.githubusercontent.com/jtauber/pyuca/master/test.py BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros @@ -38,6 +40,7 @@ variable-weighting setting of Non-ignorable. %prep %setup -q -n pyuca-%{version} +cp %{SOURCE1} . %build %python_build @@ -46,6 +49,9 @@ variable-weighting setting of Non-ignorable. %python_install %python_expand %fdupes %{buildroot}%{$python_sitelib} +%check +%python_expand $python -munittest discover -v + %files %{python_files} %license LICENSE* %doc README.md diff --git a/test.py b/test.py new file mode 100644 index 0000000..5f7190f --- /dev/null +++ b/test.py @@ -0,0 +1,243 @@ +# coding: utf8 +from __future__ import unicode_literals + +import sys +import unittest + +PYTHON3 = sys.version_info >= (3,) +V8_0_0 = sys.version_info >= (3, 5) +V10_0_0 = sys.version_info >= (3, 7) + + +class SmokeTest(unittest.TestCase): + + def test_cafe(self): + from pyuca import Collator + c = Collator() + + self.assertEqual( + sorted(["cafe", "caff", "café"]), + ["cafe", "caff", "café"] + ) + self.assertEqual( + sorted(["cafe", "caff", "café"], key=c.sort_key), + ["cafe", "café", "caff"] + ) + + +class UtilsTest(unittest.TestCase): + + def test_hexstrings2int(self): + from pyuca.utils import hexstrings2int + self.assertEqual( + hexstrings2int(["0000", "0001", "FFFF"]), + [0, 1, 65535] + ) + + def test_int2hexstrings(self): + from pyuca.utils import int2hexstrings + self.assertEqual( + int2hexstrings([0, 1, 65535]), + ["0000", "0001", "FFFF"] + ) + + def test_format_collation_elements(self): + from pyuca.utils import format_collation_elements + self.assertEqual( + format_collation_elements([[1, 2, 3], [4, 5]]), + "[0001.0002.0003], [0004.0005]" + ) + + def test_format_collation_elements_none(self): + from pyuca.utils import format_collation_elements + self.assertEqual( + format_collation_elements(None), + None + ) + + def test_format_sort_key(self): + from pyuca.utils import format_sort_key + self.assertEqual( + format_sort_key([0, 1, 65535]), + "| 0001 FFFF" + ) + + +class TrieTest(unittest.TestCase): + + def __init__(self, *args, **kwargs): + from pyuca.trie import Trie + super(TrieTest, self).__init__(*args, **kwargs) + self.t = Trie() + + def test_1(self): + self.t.add("foo", "bar") + self.assertEqual(self.t.find_prefix("fo"), ("", None, "fo")) + self.assertEqual(self.t.find_prefix("foo"), ("foo", "bar", "")) + self.assertEqual(self.t.find_prefix("food"), ("foo", "bar", "d")) + + def test_2(self): + self.t.add("a", "yes") + self.t.add("abc", "yes") + self.assertEqual(self.t.find_prefix("abdc"), ("a", "yes", "bdc")) + + +class FromFullTest(unittest.TestCase): + + def __init__(self, *args, **kwargs): + from pyuca import Collator + super(FromFullTest, self).__init__(*args, **kwargs) + self.c = Collator() + (0, 74, 33, 0, 2, 2, 0) + + @unittest.skipIf(not PYTHON3, "only matches Python 3's UCA version") + def test_1(self): + self.assertEqual( + self.c.sort_key("\u0332\u0334"), + (0x0000, 0x004A, 0x0021, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(not PYTHON3, "only matches Python 3's UCA version") + @unittest.skipIf(V8_0_0, "not for UCA version 8.0.0") + @unittest.skipIf(V10_0_0, "not for UCA version 10.0.0") + def test_2(self): + self.assertEqual( + self.c.sort_key("\u0430\u0306\u0334"), + (0x1991, 0x0000, 0x0020, 0x004A, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(not PYTHON3, "only matches Python 3's UCA version") + @unittest.skipIf(V8_0_0, "not for UCA version 8.0.0") + @unittest.skipIf(V10_0_0, "not for UCA version 10.0.0") + def test_3(self): + self.assertEqual( + self.c.sort_key("\u0FB2\u0F71\u0001\u0F80\u0061"), + (0x2571, 0x2587, 0x258A, 0x15EB, 0x0000, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0000, 0x0002, 0x0002, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(not PYTHON3, "only matches Python 3's UCA version") + @unittest.skipIf(V8_0_0, "not for UCA version 8.0.0") + @unittest.skipIf(V10_0_0, "not for UCA version 10.0.0") + def test_4(self): + self.assertEqual( + self.c.sort_key("\u4E00\u0021"), + (0xFB40, 0xCE00, 0x025D, 0x0000, 0x0020, + 0x0020, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(not PYTHON3, "only matches Python 3's UCA version") + @unittest.skipIf(V8_0_0, "not for UCA version 8.0.0") + @unittest.skipIf(V10_0_0, "not for UCA version 10.0.0") + def test_5(self): + self.assertEqual( + self.c.sort_key("\u3400\u0021"), + (0xFB80, 0xB400, 0x025D, 0x0000, 0x0020, + 0x0020, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(PYTHON3, "only matches the older Python 2's UCA version") + def test_1_old(self): + self.assertEqual( + self.c.sort_key("\u0332\u0334"), + (0x0000, 0x007C, 0x0021, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(PYTHON3, "only matches the older Python 2's UCA version") + def test_2_old(self): + self.assertEqual( + self.c.sort_key("\u0430\u0306\u0334"), + (0x15B0, 0x0000, 0x0020, 0x007C, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(PYTHON3, "only matches the older Python 2's UCA version") + def test_3_old(self): + self.assertEqual( + self.c.sort_key("\u0FB2\u0F71\u0001\u0F80\u0061"), + (0x205B, 0x206D, 0x2070, 0x120F, 0x0000, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0000, 0x0002, 0x0002, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(PYTHON3, "only matches the older Python 2's UCA version") + def test_4_old(self): + self.assertEqual( + self.c.sort_key("\u4E00\u0021"), + (0xFB40, 0xCE00, 0x026E, 0x0000, 0x0020, + 0x0020, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + @unittest.skipIf(PYTHON3, "only matches the older Python 2's UCA version") + def test_5_old(self): + self.assertEqual( + self.c.sort_key("\u3400\u0021"), + (0xFB80, 0xB400, 0x026E, 0x0000, 0x0020, + 0x0020, 0x0000, 0x0002, 0x0002, 0x0000) + ) + + +class FromFullTestV8_0_0(unittest.TestCase): + + def __init__(self, *args, **kwargs): + from pyuca.collator import Collator_8_0_0 + super(FromFullTestV8_0_0, self).__init__(*args, **kwargs) + self.c = Collator_8_0_0() + + @unittest.skipIf(not V8_0_0, "only matches UCA version 8.0.0") + def test_1(self): + from pyuca.utils import format_sort_key + self.assertEqual( + format_sort_key(self.c.sort_key("\u9FD5\u0062")), + "FB41 9FD5 1BDB | 0020 0020 | 0002 0002 |", + ) + + @unittest.skipIf(not V8_0_0, "only matches UCA version 8.0.0") + def test_2(self): + from pyuca.utils import format_sort_key + self.assertEqual( + format_sort_key(self.c.sort_key("\U0002CEA1\u0062")), + "FB85 CEA1 1BDB | 0020 0020 | 0002 0002 |", + ) + + @unittest.skipIf(not V8_0_0, "only matches UCA version 8.0.0") + def test_3(self): + from pyuca.utils import format_sort_key + self.assertEqual( + format_sort_key(self.c.sort_key("\U0002B81E\u0062")), + "FBC5 B81E 1BDB | 0020 0020 | 0002 0002 |", + ) + + @unittest.skipIf(not V8_0_0, "only matches UCA version 8.0.0") + def test_4(self): + from pyuca.utils import format_sort_key + self.assertEqual( + format_sort_key(self.c.sort_key("\U0002CEA2\u0021")), + "FBC5 CEA2 025F | 0020 0020 | 0002 0002 |", + ) + + +class FromFullTestV10_0_0(unittest.TestCase): + + def __init__(self, *args, **kwargs): + from pyuca.collator import Collator_10_0_0 + super(FromFullTestV10_0_0, self).__init__(*args, **kwargs) + self.c = Collator_10_0_0() + + @unittest.skipIf(not V10_0_0, "only matches UCA version 10.0.0") + def test_1(self): + from pyuca.utils import format_sort_key + self.assertEqual( + format_sort_key(self.c.sort_key("\u1DF6\u0334")), + "| 004A 0033 | 0002 0002 |", + ) + + @unittest.skipIf(not V10_0_0, "only matches UCA version 10.0.0") + def test_2(self): + from pyuca.utils import format_sort_key + self.assertEqual( + format_sort_key(self.c.sort_key("\u9FEA\u0062")), + "FB41 9FEA 1CC6 | 0020 0020 | 0002 0002 |", + ) + + +if __name__ == "__main__": + unittest.main()