]> mj.ucw.cz Git - moe.git/blob - t/moe/status_test.py
Tests for status, status.py fixes, minor changes
[moe.git] / t / moe / status_test.py
1 # -*- coding: utf-8 -*-
2
3 from moe.status import Status, InvalidStatusFile
4 import unittest
5 import tempfile
6
7 class TestStatus(unittest.TestCase):
8
9 #  def setUp(s):
10 #    s.st = st.Status()    
11
12   def parse(s, string):
13     st = Status()
14     st.read(lines=string.split('\n'))
15     return st
16
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
28   def test_unique(s):
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")
32
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")
40     # Valid entries
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')
44
45   def test_comments(s):
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")
50
51   def test_file_utf8(s):
52     st = Status()
53     f = tempfile.TemporaryFile(mode='w+t')
54     f.write(u'a:ášďëå'.encode('utf8'))
55     f.seek(0)
56     st.read(f=f)
57     assert(st['a'] == '\xc3\xa1\xc5\xa1\xc4\x8f\xc3\xab\xc3\xa5')
58
59   def test_file_wr_eq_l2(s):
60     st = s.parse('a:' + u'ášďě'.encode('l2') + """
61     b(
62       c(
63         d:esdf
64          :frty
65       )
66       d:
67       x:
68       :
69       :
70     )
71     """)
72     f = tempfile.NamedTemporaryFile()
73     st.write(name = f.name)
74     st2 = Status()
75     st2.read(name = f.name)
76     assert(st['a'] == '\xe1\xb9\xef\xec')
77     print('\n'.join(st.dump()), '\n'.join(st2.dump()))
78     assert(st == st2)
79   
80