1 # -*- coding: utf-8 -*-
3 from moe.status import Status, InvalidStatusFile
7 class TestStatus(unittest.TestCase):
14 st.read(lines=string.split('\n'))
17 def test_basic_read(s):
18 st = s.parse(""); assert(not st.d)
19 st = s.parse("\t\t \n \t a\t \t :\t b\t"); assert(st['a'] == '\t b\t')
20 st = s.parse("a:\t\n"); assert(st['a'] == '\t')
21 st = s.parse("\t\t \n \t a\t \t (\nb:\n)"); assert(st['a']['b'] == '')
22 st = s.parse("a(\nz:\n:\na(\na(\na(\na(\n)\n)\nx:y\n)\n)\n)")
23 assert(st['a']['a']['a']['x'] == 'y')
24 assert(st['a']['z'] == '\n')
25 s.assertRaises(InvalidStatusFile, s.parse, "a")
26 s.assertRaises(InvalidStatusFile, s.parse, "a\n(\n)")
27 s.assertRaises(InvalidStatusFile, s.parse, "a.b:c")
30 s.assertRaises(InvalidStatusFile, s.parse, "a:1\na:1")
31 s.assertRaises(InvalidStatusFile, s.parse, "a(\n)\na(\n)")
32 s.assertRaises(InvalidStatusFile, s.parse, "a(\n)\na:0")
34 def test_multiline(s):
35 s.assertRaises(InvalidStatusFile, s.parse, ":\na:b\n")
36 s.assertRaises(InvalidStatusFile, s.parse, "x:1\na(\n:\n)\n")
37 s.assertRaises(InvalidStatusFile, s.parse, "a(\na:b\n)\n:c")
38 # the continuation of entry must be at consecutive lines
39 s.assertRaises(InvalidStatusFile, s.parse, "a:\n:\n\n:z")
40 s.assertRaises(InvalidStatusFile, s.parse, "a:\n#\n:\n")
41 # All subtrees must be closed
42 s.assertRaises(InvalidStatusFile, s.parse, "a(")
43 s.assertRaises(InvalidStatusFile, s.parse, "a(\nb(\n)\n")
45 st = s.parse("a:\t\n\t \t : \t\n:"); assert(st['a'] == '\t\n \t\n')
46 st = s.parse(" a : \n :x"); assert(st['a'] == ' \nx')
47 st = s.parse("a :\n :\n \t:"); assert(st['a'] == '\n\n')
50 st = s.parse("#a:b"); assert(not st.d)
51 st = s.parse("a:b#c:d"); assert(st['a'] == 'b#c:d')
52 s.assertRaises(InvalidStatusFile, s.parse, "a( #comm\n)")
53 s.assertRaises(InvalidStatusFile, s.parse, "a(\n)#comm")
56 st1 = s.parse('a:1\nb(\nc:3\n:4\nz:0\n)\nd:5')
57 st2 = s.parse('a:A\nb(\nc:C\nx:y\n)\ne:E')
58 st12 = s.parse('a:A\nb(\nc:C\nx:y\nz:0\n)\nd:5\ne:E')
59 st3 = s.parse('a(\n)')
63 s.assertRaises(TypeError, st1.update, st3)
64 s.assertRaises(TypeError, st1.update, st4)
66 def test_file_utf8(s):
68 f = tempfile.TemporaryFile(mode='w+t')
69 f.write(u'a:ášďëå'.encode('utf8'))
72 assert(st['a'] == '\xc3\xa1\xc5\xa1\xc4\x8f\xc3\xab\xc3\xa5')
74 def test_file_w_r_eq_l2(s):
75 st = s.parse('a:' + u'ášďě'.encode('l2') + """
87 f = tempfile.NamedTemporaryFile()
88 st.write(name = f.name)
90 st2.read(name = f.name)
91 assert(st['a'] == '\xe1\xb9\xef\xec')
92 print('\n'.join(st.dump()), '\n'.join(st2.dump()))