]> mj.ucw.cz Git - moe.git/blob - t/moe/status_test.py
Merge branch 'python-newpipe' into python
[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     s.assertRaises(InvalidStatusFile, s.parse, "a.b:c")
28
29   def test_unique(s):
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")
33
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")
44     # Valid entries
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')
48
49   def test_comments(s):
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")
54
55   def test_update(s):
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)')
60     st4 = s.parse('b:0')
61     st1.update(st2)
62     assert(st1 == st12)
63     s.assertRaises(TypeError, st1.update, st3)
64     s.assertRaises(TypeError, st1.update, st4)
65
66   def test_file_utf8(s):
67     st = Status()
68     f = tempfile.TemporaryFile(mode='w+t')
69     f.write(u'a:ášďëå'.encode('utf8'))
70     f.seek(0)
71     st.read(f=f)
72     assert(st['a'] == '\xc3\xa1\xc5\xa1\xc4\x8f\xc3\xab\xc3\xa5')
73
74   def test_file_w_r_eq_l2(s):
75     st = s.parse('a:' + u'ášďě'.encode('l2') + """
76     b(
77       c(
78         d:esdf
79          :frty
80       )
81       d:
82       x:
83       :
84       :
85     )
86     """)
87     f = tempfile.NamedTemporaryFile()
88     st.write(name = f.name)
89     st2 = Status()
90     st2.read(name = f.name)
91     assert(st['a'] == '\xe1\xb9\xef\xec')
92     print('\n'.join(st.dump()), '\n'.join(st2.dump()))
93     assert(st == st2)
94   
95