def test_eq(self):
     assert CaseInsensitiveDict(a=1) == CaseInsensitiveDict(a=1)
     assert CaseInsensitiveDict(a=1) == CaseInsensitiveDict(A=1)
     assert CaseInsensitiveDict(A=1) == CaseInsensitiveDict(a=1)
     assert CaseInsensitiveDict(A=1) == CaseInsensitiveDict(A=1)
     assert CaseInsensitiveDict(a=1) == {'A': 1}
     assert {'a': 1} == CaseInsensitiveDict(A=1)
 def test_norm(self):
     assert 'à' in CaseInsensitiveDict({'a\u0300': 1})
     assert 'à' in CaseInsensitiveDict({'A\u0300': 1})
     assert 'a\u0301\u0300' not in CaseInsensitiveDict({'a\u0300\u0301': 1})
     assert 'a\u0316\u0300' in CaseInsensitiveDict({'a\u0300\u0316': 1})
     assert 'क़' in CaseInsensitiveDict({'क़': 1})
     assert '⫝̸' in CaseInsensitiveDict({'⫝\u0338': 1})
     assert 'Ω' in CaseInsensitiveDict({'Ω': 1})
     assert '\u0344' in CaseInsensitiveDict({'\u0308\u0301': 1})
     assert 'Å' in CaseInsensitiveDict({'Å': 1})
 def test_mut(self):
     d = CaseInsensitiveDict()
     assert list(d.items()) == []
     d['A'] = 1
     assert list(d.items()) == [('A', 1)]
     d['B'] = 2
     assert list(d.items()) == [('A', 1), ('B', 2)]
     d['a'] = 3
     assert list(d.items()) == [('A', 3), ('B', 2)]
     del d['b']
 def test_ord(self):
     assert CaseInsensitiveDict(a=1) == OrderedDict({'A': 1})
     # This can only work because OrderedDict.__eq__ returns NotImplemented
     assert OrderedDict({'a': 1}) == CaseInsensitiveDict(A=1)
 def test_cherokee(self):
     assert CaseInsensitiveDict({'ꭰ': 1}) == {'ꭰ': 1}
     assert CaseInsensitiveDict({'ꭰ': 1}) == {'Ꭰ': 1}
     assert CaseInsensitiveDict({'Ꭰ': 1}) == {'ꭰ': 1}
     assert CaseInsensitiveDict({'Ꭰ': 1}) == {'Ꭰ': 1}
    def test_intl(self):
        assert CaseInsensitiveDict({'ss': 1}) == {'ß': 1}
        assert CaseInsensitiveDict({'sS': 1}) == {'ß': 1}
        assert CaseInsensitiveDict({'Ss': 1}) == {'ß': 1}
        assert CaseInsensitiveDict({'SS': 1}) == {'ß': 1}
        assert CaseInsensitiveDict({'ß': 1}) == {'ss': 1}
        assert CaseInsensitiveDict({'ß': 1}) == {'sS': 1}
        assert CaseInsensitiveDict({'ß': 1}) == {'Ss': 1}
        assert CaseInsensitiveDict({'ß': 1}) == {'SS': 1}

        assert CaseInsensitiveDict({'ς': 1}) == {'σ': 1}
        assert CaseInsensitiveDict({'Σ': 1}) == {'σ': 1}
        assert CaseInsensitiveDict({'Σ': 1}) == {'ς': 1}
Пример #7
0
    def test_intl_nfd(self):
        # combining iota is nasty if there are also accents
        # insert an accent at *every* position to test
        strings = [
            # E I
            ('\u0389\u0399', True),  # Ea I (NFC)
            ('\u0397\u0301\u0399', True),  # E a I (NFD)
            ('\u0397\u038a', False),  # E Ia (NFC)
            ('\u0397\u0399\u0301', False),  # E I a (NFD)

            # E i
            ('\u0389\u03b9', True),  # Ea i (NFC)
            ('\u0397\u0301\u03b9', True),  # E a i (NFD)
            ('\u0397\u03af', False),  # E ia (NFC)
            ('\u0397\u03b9\u0301', False),  # E i a (NFD)

            # EP, E P (note P always NFx's to i)
            ('\u0389\u1fbe', True),  # Ea P
            ('\u0397\u0301\u1fbe', True),  # E a P
            ('\u1fcc\u0301', True),  # EP a
            ('\u0397\u1fbe\u0301', False),  # E P a

            # E y
            # no triple for uppercase
            ('\u0389\u0345', True),  # Ea y (NFC)
            ('\u0397\u0301\u0345', True),  # E a y (NFD)
            # there is no Ey a - EP a instead
            ('\u0397\u0345\u0301', True),  # E y a

            # e I
            ('\u03ae\u0399', True),  # ea I (NFC)
            ('\u03b7\u0301\u0399', True),  # e a I (NFD)
            ('\u03b7\u038a', False),  # e Ia (NFC)
            ('\u03b7\u0399\u0301', False),  # e I a (NFD)

            # e i
            ('\u03ae\u03b9', True),  # ea i (NFC)
            ('\u03b7\u0301\u03b9', True),  # e a i (NFD)
            ('\u03b7\u03af', False),  # e ia (NFC)
            ('\u03b7\u03b9\u0301', False),  # e i a (NFD)

            # e P (note P always NFx's to i)
            ('\u03ae\u1fbe', True),  # ea P
            ('\u03b7\u0301\u1fbe', True),  # e a P
            # there is no eP a - ey a instead
            ('\u03b7\u1fbe\u0301', False),  # e P a

            # ey, e y
            ('\u1fc4', True),  # eay (NFC)
            ('\u03ae\u0345', True),  # ea y
            ('\u03b7\u0301\u0345', True),  # e a y (NFD)
            ('\u1fc3\u0301', True),  # ey a
            ('\u03b7\u0345\u0301', True),  # e y a
        ]
        n = ['ηί', 'ήι']
        assert len(n[0]) == 2
        assert len(n[1]) == 2
        for a, c in strings:
            assert unicodedata.normalize(
                'NFC',
                unicodedata.normalize('NFD', a).casefold()) == n[c]
            d = CaseInsensitiveDict({a: 1})
            for b, e in strings:
                assert (b in d) == (c == e)