Mercurial > nagslang
annotate nagslang/tests/test_yamlish.py @ 120:e6e7a471146a
Support numeric types
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Mon, 02 Sep 2013 15:31:19 +0200 |
parents | b75de48a618c |
children | 423266f0b9e4 |
rev | line source |
---|---|
114
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
1 from unittest import TestCase |
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
2 |
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
3 from nagslang.yamlish import load_s, dump_s |
89
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
4 |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
5 try: |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
6 import yaml |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
7 except ImportError: |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
8 yaml = None # pyflakes:ignore |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
9 |
114
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
10 try: |
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
11 from unittest import SkipTest |
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
12 except ImportError: |
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
13 from pytest import skip |
d1a96fc62d26
Fallback to pytest's skip exception
Stefano Rivera <stefano@rivera.za.net>
parents:
112
diff
changeset
|
14 SkipTest = skip.Exception # pyflakes:ignore |
103
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
15 |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
16 |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
17 class TestParse(TestCase): |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
18 def assertParsesAs(self, text, expected): |
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
19 self.assertEqual(load_s(text.strip()), expected) |
103
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
20 |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
21 def test_dict_list_1(self): |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
22 self.assertParsesAs(''' |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
23 foo: |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
24 - bar |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
25 - baz |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
26 ''', {'foo': ['bar', 'baz']}) |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
27 |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
28 def test_dict_list_2(self): |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
29 self.assertParsesAs(''' |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
30 foo: |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
31 - bar |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
32 - baz |
adf3cd83bf7a
Support a common stylistic variation
Stefano Rivera <stefano@rivera.za.net>
parents:
90
diff
changeset
|
33 ''', {'foo': ['bar', 'baz']}) |
89
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
34 |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
35 |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
36 class TestRoundTrip(TestCase): |
89
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
37 def roundtrip(self, data): |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
38 text = self.dump_s(data) |
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
39 print '\n=== Begin ===\n%s\n=== End ===' % text |
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
40 self.assertEqual(self.load_s(text), data) |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
41 |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
42 def dump_s(self, data): |
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
43 return dump_s(data) |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
44 |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
45 def load_s(self, text): |
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
46 return load_s(text) |
89
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
47 |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
48 def test_simple_dict(self): |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
49 self.roundtrip({'foo': 'bar'}) |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
50 |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
51 def test_dict_of_dicts(self): |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
52 self.roundtrip({'foo': {'bar': 'baz'}}) |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
53 |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
54 def test_dict_tree(self): |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
55 self.roundtrip({ |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
56 'foo': { |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
57 'bar': { |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
58 'baz': 'qux' |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
59 }, |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
60 'quux': 'corge', |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
61 } |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
62 }) |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
63 |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
64 def test_dict_list(self): |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
65 self.roundtrip({ |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
66 'foo': ['bar', 'baz'], |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
67 }) |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
68 |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
69 def test_nested_lists(self): |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
70 self.roundtrip({ |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
71 'foo': [['bar', 'baz', 'qux'], 'quux'], |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
72 }) |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
73 |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
74 def test_list_of_dicts(self): |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
75 self.roundtrip({ |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
76 'foo': [ |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
77 {'bar': 'baz'}, |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
78 {'qux': 'quux'}, |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
79 ], |
102043902451
Simple (subset of) YAML parser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
80 }) |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
81 |
119
b75de48a618c
Support boolean and None types
Stefano Rivera <stefano@rivera.za.net>
parents:
114
diff
changeset
|
82 def test_quoted(self): |
b75de48a618c
Support boolean and None types
Stefano Rivera <stefano@rivera.za.net>
parents:
114
diff
changeset
|
83 # a literal true is True, but 'true' is a string |
b75de48a618c
Support boolean and None types
Stefano Rivera <stefano@rivera.za.net>
parents:
114
diff
changeset
|
84 self.roundtrip({'foo': 'true'}) |
b75de48a618c
Support boolean and None types
Stefano Rivera <stefano@rivera.za.net>
parents:
114
diff
changeset
|
85 |
b75de48a618c
Support boolean and None types
Stefano Rivera <stefano@rivera.za.net>
parents:
114
diff
changeset
|
86 def test_literals(self): |
b75de48a618c
Support boolean and None types
Stefano Rivera <stefano@rivera.za.net>
parents:
114
diff
changeset
|
87 self.roundtrip({'foo': [True, False, None]}) |
b75de48a618c
Support boolean and None types
Stefano Rivera <stefano@rivera.za.net>
parents:
114
diff
changeset
|
88 |
120
e6e7a471146a
Support numeric types
Stefano Rivera <stefano@rivera.za.net>
parents:
119
diff
changeset
|
89 def test_numeric(self): |
e6e7a471146a
Support numeric types
Stefano Rivera <stefano@rivera.za.net>
parents:
119
diff
changeset
|
90 self.roundtrip({'foo': [1, 2.0, -1, -2.5]}) |
e6e7a471146a
Support numeric types
Stefano Rivera <stefano@rivera.za.net>
parents:
119
diff
changeset
|
91 |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
92 |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
93 class TestFromPyYAML(TestRoundTrip): |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
94 def dump_s(self, data): |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
95 if yaml is None: |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
96 raise SkipTest('yaml module unavailable') |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
97 return yaml.dump(data, default_flow_style=False) |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
98 |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
99 |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
100 class TestToPyYAML(TestRoundTrip): |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
101 def load_s(self, text): |
90
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
102 if yaml is None: |
a8d83de5b460
Dump our YAML subset too
Stefano Rivera <stefano@rivera.za.net>
parents:
89
diff
changeset
|
103 raise SkipTest('yaml module unavailable') |
112
c28f2fc2bb05
Test with dump_s and load_s
Stefano Rivera <stefano@rivera.za.net>
parents:
103
diff
changeset
|
104 return yaml.load(text) |