1*273c26a3SBaptiste Daroussinfrom .compat import unittest
2*273c26a3SBaptiste Daroussinimport ucl
3*273c26a3SBaptiste Daroussin
4*273c26a3SBaptiste Daroussinclass LoadTest(unittest.TestCase):
5*273c26a3SBaptiste Daroussin    def test_no_args(self):
6*273c26a3SBaptiste Daroussin        with self.assertRaises(TypeError):
7*273c26a3SBaptiste Daroussin            ucl.load()
8*273c26a3SBaptiste Daroussin
9*273c26a3SBaptiste Daroussin    def test_multi_args(self):
10*273c26a3SBaptiste Daroussin        with self.assertRaises(TypeError):
11*273c26a3SBaptiste Daroussin            ucl.load(0,0)
12*273c26a3SBaptiste Daroussin
13*273c26a3SBaptiste Daroussin    def test_none(self):
14*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(None), None)
15*273c26a3SBaptiste Daroussin
16*273c26a3SBaptiste Daroussin    def test_null(self):
17*273c26a3SBaptiste Daroussin        data  = "a: null"
18*273c26a3SBaptiste Daroussin        valid = { "a" : None }
19*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
20*273c26a3SBaptiste Daroussin
21*273c26a3SBaptiste Daroussin    def test_int(self):
22*273c26a3SBaptiste Daroussin        data  = "a : 1"
23*273c26a3SBaptiste Daroussin        valid = { "a" : 1 }
24*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
25*273c26a3SBaptiste Daroussin
26*273c26a3SBaptiste Daroussin    def test_braced_int(self):
27*273c26a3SBaptiste Daroussin        data  = "{a : 1}"
28*273c26a3SBaptiste Daroussin        valid = { "a" : 1 }
29*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
30*273c26a3SBaptiste Daroussin
31*273c26a3SBaptiste Daroussin    def test_nested_int(self):
32*273c26a3SBaptiste Daroussin        data  = "a : { b : 1 }"
33*273c26a3SBaptiste Daroussin        valid = { "a" : { "b" : 1 } }
34*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
35*273c26a3SBaptiste Daroussin
36*273c26a3SBaptiste Daroussin    def test_str(self):
37*273c26a3SBaptiste Daroussin        data  = "a : b"
38*273c26a3SBaptiste Daroussin        valid = { "a" : "b" }
39*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
40*273c26a3SBaptiste Daroussin
41*273c26a3SBaptiste Daroussin    def test_float(self):
42*273c26a3SBaptiste Daroussin        data  = "a : 1.1"
43*273c26a3SBaptiste Daroussin        valid = {"a" : 1.1}
44*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
45*273c26a3SBaptiste Daroussin
46*273c26a3SBaptiste Daroussin    def test_boolean(self):
47*273c26a3SBaptiste Daroussin        data = (
48*273c26a3SBaptiste Daroussin            "a : True;" \
49*273c26a3SBaptiste Daroussin            "b : False"
50*273c26a3SBaptiste Daroussin        )
51*273c26a3SBaptiste Daroussin        valid = { "a" : True, "b" : False }
52*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
53*273c26a3SBaptiste Daroussin
54*273c26a3SBaptiste Daroussin    def test_empty_ucl(self):
55*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load("{}"), {})
56*273c26a3SBaptiste Daroussin
57*273c26a3SBaptiste Daroussin    def test_single_brace(self):
58*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load("{"), {})
59*273c26a3SBaptiste Daroussin
60*273c26a3SBaptiste Daroussin    def test_single_back_brace(self):
61*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load("}"), {})
62*273c26a3SBaptiste Daroussin
63*273c26a3SBaptiste Daroussin    def test_single_square_forward(self):
64*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load("["), [])
65*273c26a3SBaptiste Daroussin
66*273c26a3SBaptiste Daroussin    def test_invalid_ucl(self):
67*273c26a3SBaptiste Daroussin        with self.assertRaisesRegex(ValueError, "unfinished key$"):
68*273c26a3SBaptiste Daroussin            ucl.load('{ "var"')
69*273c26a3SBaptiste Daroussin
70*273c26a3SBaptiste Daroussin    def test_comment_ignored(self):
71*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load("{/*1*/}"), {})
72*273c26a3SBaptiste Daroussin
73*273c26a3SBaptiste Daroussin    def test_1_in(self):
74*273c26a3SBaptiste Daroussin        valid = { 'key1': 'value' }
75*273c26a3SBaptiste Daroussin        with open("../tests/basic/1.in", "r") as in1:
76*273c26a3SBaptiste Daroussin            self.assertEqual(ucl.load(in1.read()), valid)
77*273c26a3SBaptiste Daroussin
78*273c26a3SBaptiste Daroussin    def test_every_type(self):
79*273c26a3SBaptiste Daroussin        data = ("""{
80*273c26a3SBaptiste Daroussin            "key1": value;
81*273c26a3SBaptiste Daroussin            "key2": value2;
82*273c26a3SBaptiste Daroussin            "key3": "value;"
83*273c26a3SBaptiste Daroussin            "key4": 1.0,
84*273c26a3SBaptiste Daroussin            "key5": -0xdeadbeef
85*273c26a3SBaptiste Daroussin            "key6": 0xdeadbeef.1
86*273c26a3SBaptiste Daroussin            "key7": 0xreadbeef
87*273c26a3SBaptiste Daroussin            "key8": -1e-10,
88*273c26a3SBaptiste Daroussin            "key9": 1
89*273c26a3SBaptiste Daroussin            "key10": true
90*273c26a3SBaptiste Daroussin            "key11": no
91*273c26a3SBaptiste Daroussin            "key12": yes
92*273c26a3SBaptiste Daroussin        }""")
93*273c26a3SBaptiste Daroussin        valid = {
94*273c26a3SBaptiste Daroussin            'key1': 'value',
95*273c26a3SBaptiste Daroussin            'key2': 'value2',
96*273c26a3SBaptiste Daroussin            'key3': 'value;',
97*273c26a3SBaptiste Daroussin            'key4': 1.0,
98*273c26a3SBaptiste Daroussin            'key5': -3735928559,
99*273c26a3SBaptiste Daroussin            'key6': '0xdeadbeef.1',
100*273c26a3SBaptiste Daroussin            'key7': '0xreadbeef',
101*273c26a3SBaptiste Daroussin            'key8': -1e-10,
102*273c26a3SBaptiste Daroussin            'key9': 1,
103*273c26a3SBaptiste Daroussin            'key10': True,
104*273c26a3SBaptiste Daroussin            'key11': False,
105*273c26a3SBaptiste Daroussin            'key12': True,
106*273c26a3SBaptiste Daroussin            }
107*273c26a3SBaptiste Daroussin        self.assertEqual(ucl.load(data), valid)
108