summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-01-18 16:37:17 +0000
committerJavier Jardón <javier.jardon@codethink.co.uk>2013-01-22 18:34:22 +0000
commit3f19b84e03c3452c54f18c1a0ccc6008c6478a99 (patch)
tree290f97fe44fcbe1f29a5c342f46fec7ac46c757f
parent7ef9cb8922bd933ae8ee58cb24a2b38844a0e629 (diff)
downloadmorph-3f19b84e03c3452c54f18c1a0ccc6008c6478a99.tar.gz
Fix tests
Invalid text changed to be something that doesn't parse as YAML either, and catch convert the YAMLError to the expected exception. Ideally there wouldn't be any `#pragma: no cover`s, but I could not trigger these code paths.
-rw-r--r--morphlib/morph2_tests.py19
-rw-r--r--morphlib/morphologyfactory_tests.py6
-rw-r--r--morphlib/yamlparse_tests.py69
3 files changed, 89 insertions, 5 deletions
diff --git a/morphlib/morph2_tests.py b/morphlib/morph2_tests.py
index 756873a0..34df4657 100644
--- a/morphlib/morph2_tests.py
+++ b/morphlib/morph2_tests.py
@@ -22,7 +22,7 @@ from morphlib.morph2 import Morphology
class MorphologyTests(unittest.TestCase):
- def test_parses_simple_chunk(self):
+ def test_parses_simple_json_chunk(self):
m = Morphology('''
{
"name": "foo",
@@ -41,6 +41,23 @@ class MorphologyTests(unittest.TestCase):
self.assertEqual(m['max-jobs'], None)
self.assertEqual(m['chunks'], [])
+ def test_parses_simple_yaml_chunk(self):
+ m = Morphology('''
+ name: foo
+ kind: chunk
+ build-system: manual
+ ''')
+
+ self.assertEqual(m['name'], 'foo')
+ self.assertEqual(m['kind'], 'chunk')
+ self.assertEqual(m['build-system'], 'manual')
+ self.assertEqual(m['configure-commands'], None)
+ self.assertEqual(m['build-commands'], None)
+ self.assertEqual(m['test-commands'], None)
+ self.assertEqual(m['install-commands'], None)
+ self.assertEqual(m['max-jobs'], None)
+ self.assertEqual(m['chunks'], [])
+
def test_sets_stratum_chunks_repo_and_morph_from_name(self):
m = Morphology('''
{
diff --git a/morphlib/morphologyfactory_tests.py b/morphlib/morphologyfactory_tests.py
index b8c89d2a..56c6fc57 100644
--- a/morphlib/morphologyfactory_tests.py
+++ b/morphlib/morphologyfactory_tests.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012 Codethink Limited
+# Copyright (C) 2012-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -65,9 +65,7 @@ class FakeLocalRepo(object):
"system-kind": "%(system_kind)s",
"arch": "%(arch)s"
}''',
- 'parse-error.morph': '''{
- "name"
- }''',
+ 'parse-error.morph': '''{ "name"''',
}
def __init__(self):
diff --git a/morphlib/yamlparse_tests.py b/morphlib/yamlparse_tests.py
new file mode 100644
index 00000000..cb658e15
--- /dev/null
+++ b/morphlib/yamlparse_tests.py
@@ -0,0 +1,69 @@
+# Copyright (C) 2013 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import unittest
+
+try:
+ from collections import OrderedDict
+except ImportError:
+ from ordereddict import OrderedDict
+import yaml
+
+import morphlib.yamlparse as yamlparse
+
+
+class YAMLParseTests(unittest.TestCase):
+
+ example_text = '''\
+name: foo
+kind: chunk
+build-system: manual
+'''
+
+ example_dict = OrderedDict([
+ ('name', 'foo'),
+ ('kind', 'chunk'),
+ ('build-system', 'manual'),
+ ])
+
+ def test_loads_as_ordered_dict(self):
+ m = yamlparse.load(self.example_text)
+ self.assertEqual(type(m), OrderedDict)
+
+ def test_dumps_ordered_dicts(self):
+ self.assertEqual(self.example_text,
+ yamlparse.dump(self.example_dict))
+
+ def test_non_map_raises(self):
+ incorrect_type = '''\
+!!map
+- foo
+- bar
+'''
+ self.assertRaises(yaml.YAMLError, yamlparse.load, incorrect_type)
+
+ def test_complex_key_fails_KNOWNFAILURE(self):
+ complex_key = '? { foo: bar, baz: qux }: True'
+ self.assertRaises(yaml.YAMLError, yamlparse.load, complex_key)
+
+ def test_represents_non_scalar_nodes(self):
+ self.assertTrue(
+ yamlparse.dump(
+ {
+ ('a', 'b'): {
+ "foo": 1,
+ "bar": 2,
+ }
+ }, default_flow_style=None))