summaryrefslogtreecommitdiff
path: root/tests/test_yamlcrap.py
blob: 738abc7974df23125d402389f9d1691bda479a05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import unittest, yaml, skdb

class Test_dummy_tags(unittest.TestCase):
    def init_tags(self):
        self.preamble='!!python/object:skdb.tag_hack \n tags: "!hello"\n---\n' #init dummy tags
        #self.preamble='!tag_hack \n tags: "hello"\n---\n' #init dummy tags
    def test_default(self):
        test = skdb.load('!!python/object:skdb.tag_hack \n tags: "!hello"\n---\n'+'!hello 1234')
        self.assertEqual(type(test), skdb.Dummy)
    def test_scalar_node(self):
        self.init_tags()
        data='!hello 1234'
        test = skdb.load(self.preamble+data)
        self.assertEqual(type(test), skdb.Dummy)
    def test_run_again(self): #same as above
        self.init_tags()
        data='!hello 1234'
        test = skdb.load(self.preamble+data)
        self.assertEqual(type(test), skdb.Dummy)
    def test_bad_tag(self):
        self.init_tags()
        data='!sometag 123'
        self.assertRaises(yaml.constructor.ConstructorError, skdb.load, self.preamble+data)
    def test_only_dummy_tags_affected(self):
        self.init_tags()
        self.assertEqual(type(skdb.load('!!int 123')), int)
        class Foo(yaml.YAMLObject):
            yaml_tag='!foo'
            def __init__(self, val): pass
        data='!foo\nbar: 123'
        test = skdb.load(self.preamble+data)
        self.assertEqual(type(test), Foo)
    def test_scalar_attrib(self):
        self.init_tags()
        data='!hello\n test: 1234'
        test = skdb.load(self.preamble+data)
        self.assertEqual(type(test), skdb.Dummy)
        
    def test_mapping_attrib(self):
        self.init_tags()
        data='!hello\ntest:\n  test:\n  zonk: 1234'
        test = skdb.load(self.preamble+data)
        self.assertEqual(type(test), skdb.Dummy)
    def init_multiple(self):
        self.preamble='!!python/object:skdb.tag_hack \n tags: ["!hello", "!hi", "!hola"]\n---\n'
    def test_multiple_tags(self):
        self.init_multiple()
        data='- !hello 1234\n- !hi 5678'
        test = skdb.load(self.preamble+data)
        self.assertEqual(type(test[0]), skdb.Dummy)
        self.assertEqual(type(test[1]), skdb.Dummy)
    def test_nested_tags(self):
        self.init_multiple()
        data='!hello\ntest: !hi 5678'
        test = skdb.load(self.preamble+data)
        self.assertEqual(type(test), skdb.Dummy)
        self.assertEqual(type(test.test), skdb.Dummy)

class TestYaml(unittest.TestCase):
    
    def test_implicit(self):
        testrange = skdb.load('1..2')
        self.assertEqual(testrange.min, 1)
        self.assertEqual(testrange.max, 2)
    def test_equals(self):
        self.assertEqual(skdb.load('1..2'), skdb.load('1..2'))
    def test_implicit_equals(self):
        self.assertEqual(skdb.load('1..2'), skdb.Range(1, 2))
    def test_spaces(self):
        testrange = skdb.load('1..2')
        self.assertEqual(testrange, skdb.load('1   ..2'))
        self.assertEqual(testrange, skdb.load('1..   2'))
        self.assertEqual(testrange, skdb.load('1   ..   2'))
        self.assertEqual(testrange, skdb.load('1..2   '))
        self.assertEqual(testrange, skdb.load('   1..2'))
    def test_units(self):
        testrange = skdb.load('1..2m')
        self.assertEqual(testrange.min, skdb.Unit('1m'))
        self.assertEqual(testrange.max, skdb.Unit('2m'))
    def test_both_labeled(self):
        self.assertEqual(skdb.load('1..2m'), skdb.load('1m .. 2m'))
    def test_one_labeled_equal(self):
        self.assertEqual(skdb.load('1..2m'), skdb.Range(skdb.Unit('1m'), skdb.Unit('2m')))
    def test_negative(self):
        testrange = skdb.load('-2.345..1.234')
        self.assertEqual(testrange.min, -2.345)
        self.assertEqual(testrange.max, 1.234)
    def test_ordering(self):
        testrange = skdb.load('1.234 .. -2.345')
        self.assertEqual(testrange.min, -2.345)
        self.assertEqual(testrange.max, 1.234)
    def test_scientific(self):
        testrange = skdb.load('2.345e234 .. 2.345e-1')
        self.assertEqual(testrange.min, 2.345e-1)
        self.assertEqual(testrange.max, 2.345e234)
    def test_yaml_units(self): 
        import yaml
        try: yaml.dump(skdb.Unit('1')) #this blew up once for some reason
        except skdb.UnitError: return False
    def test_uncertainty(self):
        self.assertEqual(skdb.load('+-5e-2m'), skdb.Uncertainty('+-50mm'))

if __name__ == '__main__':
    unittest.main()