1# -*- coding: utf-8 -*-
2
3from mutagen._tools._util import split_escape
4from mutagen._compat import text_type
5
6from tests import TestCase
7
8
9class Tsplit_escape(TestCase):
10    def test_split_escape(self):
11        inout = [
12            (("", ":"), [""]),
13            ((":", ":"), ["", ""]),
14            ((":", ":", 0), [":"]),
15            ((":b:c:", ":", 0), [":b:c:"]),
16            ((":b:c:", ":", 1), ["", "b:c:"]),
17            ((":b:c:", ":", 2), ["", "b", "c:"]),
18            ((":b:c:", ":", 3), ["", "b", "c", ""]),
19            (("a\\:b:c", ":"), ["a:b", "c"]),
20            (("a\\\\:b:c", ":"), ["a\\", "b", "c"]),
21            (("a\\\\\\:b:c\\:", ":"), ["a\\:b", "c:"]),
22            (("\\", ":"), [""]),
23            (("\\\\", ":"), ["\\"]),
24            (("\\\\a\\b", ":"), ["\\a\\b"]),
25        ]
26
27        for inargs, out in inout:
28            self.assertEqual(split_escape(*inargs), out)
29
30    def test_types(self):
31        parts = split_escape(b"\xff:\xff", b":")
32        self.assertEqual(parts, [b"\xff", b"\xff"])
33        self.assertTrue(isinstance(parts[0], bytes))
34
35        parts = split_escape(b"", b":")
36        self.assertEqual(parts, [b""])
37        self.assertTrue(isinstance(parts[0], bytes))
38
39        parts = split_escape(u"a:b", u":")
40        self.assertEqual(parts, [u"a", u"b"])
41        self.assertTrue(all(isinstance(p, text_type) for p in parts))
42
43        parts = split_escape(u"", u":")
44        self.assertEqual(parts, [u""])
45        self.assertTrue(all(isinstance(p, text_type) for p in parts))
46
47        parts = split_escape(u":", u":")
48        self.assertEqual(parts, [u"", u""])
49        self.assertTrue(all(isinstance(p, text_type) for p in parts))
50