Allowed '-' inside keywords. Added an unit test for confparser module.
[confparser-old] / test_confparser.py
1 #!/usr/bin/python
2 # -*- coding:utf-8 -*-
3
4 #
5 # confparser tests
6 # Copyright (C) 2005  Frédéric Jolliton <frederic@jolliton.com>
7 #
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21 #
22
23 # FIXME: Incomplete unit test.
24
25 import unittest
26
27 import confparser
28
29 def serialize( conf ) :
30
31         if isinstance( conf , tuple ) :
32                 name , values , subs = conf[ : 3 ]
33                 if name == '__root__' :
34                         result = serialize( conf[ 2 ] )
35                 else :
36                         result = ':'.join( [ name ] + map( repr , ( values or [] ) ) )
37                         if not subs :
38                                 result += ';'
39                         else :
40                                 result += '{' + serialize( conf[ 2 ] ) + '}'
41         elif isinstance( conf , list ) :
42                 result = ''.join( map( serialize , conf ) )
43         elif conf is None :
44                 result = ''
45         else :
46                 raise Exception( 'Type of node %r unknown.' % conf )
47         return result
48
49 def parseAndSerialize( text ) :
50
51         return serialize( confparser.parse( text ) )
52
53 class ConfParserTestCase( unittest.TestCase ) :
54
55         def testSimple( self ) :
56
57                 tests = [
58                           ( '' , ''     )
59                         , ( 'foo;' , 'foo;' )
60                         , ( '\nfoo\t;\r' , 'foo;' )
61                         , ( 'foo{}' , 'foo;' )
62                         , ( 'foo{bar;}' , 'foo{bar;}' )
63                         , ( 'foo{bar{baz;}}' , 'foo{bar{baz;}}' )
64                         , ( 'foo bar baz;' , "foo:'bar':'baz';" )
65                         , ( 'foo\n\n\nbar\t\n{ baz ; }' , "foo:'bar'{baz;}" )
66                         , ( 'foo-bar-baz;' , 'foo-bar-baz;' )
67                         , ( '_-_;' , '_-_;' ) # Ahem..
68                         , ( "foo 'bar';" , "foo:'bar';" )
69                 ]
70                 for text , resultSerialized in tests :
71                         self.assertEquals( parseAndSerialize( text ) , resultSerialized )
72
73 if __name__ == '__main__' :
74         unittest.main()
75
76 # Local Variables:
77 # tab-width: 4
78 # python-indent: 4
79 # End: