[PATCH 3/5] Fix tests

Javier Jardón javier.jardon at codethink.co.uk
Mon Jan 28 15:59:12 GMT 2013


From: Richard Maw <richard.maw at codethink.co.uk>

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.
---
 morphlib/morph2_tests.py            | 19 +++++++++-
 morphlib/morphologyfactory_tests.py |  6 ++--
 morphlib/yamlparse_tests.py         | 69 +++++++++++++++++++++++++++++++++++++
 3 files changed, 89 insertions(+), 5 deletions(-)
 create mode 100644 morphlib/yamlparse_tests.py

diff --git a/morphlib/morph2_tests.py b/morphlib/morph2_tests.py
index 756873a..34df465 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 b8c89d2..56c6fc5 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 0000000..cb658e1
--- /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))
-- 
1.8.1





More information about the baserock-dev mailing list