summaryrefslogtreecommitdiff
path: root/morphlib/morph2_tests.py
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-04-09 19:30:19 +0100
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-04-09 19:30:19 +0100
commit63074d67d3338ecddded1a5915f5b501a58b56a9 (patch)
tree21cb1eaaee0da00946ece8703e95ac7b2593f13b /morphlib/morph2_tests.py
parenta53bf56bd034b082c816ba58977a2daa0d70c144 (diff)
downloadmorph-63074d67d3338ecddded1a5915f5b501a58b56a9.tar.gz
Add a new morphology parser class
The old morphlib.morphology.Morphlogy class is entangled by having treeish and requires reading from an open file. This is a bad design for the class: the treeish is unnecessary coupling, and the open file makes is harder than necessary to parse a morphology which we don't have as a file on disk. The new class gets the text of the morphology and does not care about treeishes at all. It also acts more like a dictionary, giving more uniform access to the various items, while reducing the amount of code we have in the class. The old class will remain until all uses of it have been eradicated.
Diffstat (limited to 'morphlib/morph2_tests.py')
-rw-r--r--morphlib/morph2_tests.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/morphlib/morph2_tests.py b/morphlib/morph2_tests.py
new file mode 100644
index 00000000..65ab89cf
--- /dev/null
+++ b/morphlib/morph2_tests.py
@@ -0,0 +1,80 @@
+# Copyright (C) 2012 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
+
+from morphlib.morph2 import Morphology
+
+
+class MorphologyTests(unittest.TestCase):
+
+ def test_parses_simple_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'], [])
+ self.assertEqual(m['build-commands'], [])
+ self.assertEqual(m['test-commands'], [])
+ self.assertEqual(m['install-commands'], [])
+ self.assertEqual(m['max-jobs'], None)
+
+ def test_makes_max_jobs_be_an_integer(self):
+ m = Morphology('''
+ {
+ "name": "foo",
+ "kind": "chunk",
+ "max-jobs": "42"
+ }
+ ''')
+
+ self.assertEqual(m['max-jobs'], 42)
+
+ def test_sets_stratum_sources_repo_and_morph_from_name(self):
+ m = Morphology('''
+ {
+ "name": "foo",
+ "kind": "stratum",
+ "sources": [
+ {
+ "name": "le-chunk"
+ }
+ ]
+ }
+ ''')
+
+ self.assertEqual(m['sources'][0]['repo'], 'le-chunk')
+ self.assertEqual(m['sources'][0]['morph'], 'le-chunk')
+ self.assertEqual(m['sources'][0]['build-depends'], None)
+
+ def test_parses_system_disk_size(self):
+ m = Morphology('''
+ {
+ "name": "foo",
+ "kind": "system",
+ "disk-size": "1g"
+ }
+ ''')
+
+ self.assertEqual(m['disk-size'], 1024**3)
+