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