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)")
29 s.assertRaises(InvalidStatusFile, s.parse, "a:1\na:1")
30 s.assertRaises(InvalidStatusFile, s.parse, "a(\n)\na(\n)")
31 s.assertRaises(InvalidStatusFile, s.parse, "a(\n)\na:0")
33 def test_multiline(s):
34 s.assertRaises(InvalidStatusFile, s.parse, ":\na:b\n")
35 s.assertRaises(InvalidStatusFile, s.parse, "x:1\na(\n:\n)\n")
36 s.assertRaises(InvalidStatusFile, s.parse, "a(\na:b\n)\n:c")
37 # the continuation of entry must be at consecutive lines
38 s.assertRaises(InvalidStatusFile, s.parse, "a:\n:\n\n:z")
39 s.assertRaises(InvalidStatusFile, s.parse, "a:\n#\n:\n")
41 st = s.parse("a:\t\n\t \t : \t\n:"); assert(st['a'] == '\t\n \t\n')
42 st = s.parse(" a : \n :x"); assert(st['a'] == ' \nx')
43 st = s.parse("a :\n :\n \t:"); assert(st['a'] == '\n\n')
46 st = s.parse("#a:b"); assert(not st.d)
47 st = s.parse("a:b#c:d"); assert(st['a'] == 'b#c:d')
48 s.assertRaises(InvalidStatusFile, s.parse, "a( #comm\n)")
49 s.assertRaises(InvalidStatusFile, s.parse, "a(\n)#comm")
51 def test_file_utf8(s):
53 f = tempfile.TemporaryFile(mode='w+t')
54 f.write(u'a:ášďëå'.encode('utf8'))
57 assert(st['a'] == '\xc3\xa1\xc5\xa1\xc4\x8f\xc3\xab\xc3\xa5')
59 def test_file_wr_eq_l2(s):
60 st = s.parse('a:' + u'ášďě'.encode('l2') + """
72 f = tempfile.NamedTemporaryFile()
73 st.write(name = f.name)
75 st2.read(name = f.name)
76 assert(st['a'] == '\xe1\xb9\xef\xec')
77 print('\n'.join(st.dump()), '\n'.join(st2.dump()))