aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TestAll.py5
-rw-r--r--behaviors/AllPixelsLeft.py1
-rw-r--r--tests/TestConfigLoaders.py19
-rw-r--r--tests/testdata/compositeTEST.xml10
-rw-r--r--tests/testdata/compositeTRUTH.xml10
-rw-r--r--tests/testdata/override.xml8
-rw-r--r--tests/testdata/parent.xml10
-rw-r--r--util/Config.py46
8 files changed, 74 insertions, 35 deletions
diff --git a/TestAll.py b/TestAll.py
new file mode 100644
index 0000000..9921c7e
--- /dev/null
+++ b/TestAll.py
@@ -0,0 +1,5 @@
+import unittest
+from unittest import TestLoader
+import tests.TestConfigLoaders
+testSuite = TestLoader().loadTestsFromModule(tests.TestConfigLoaders)
+unittest.TextTestRunner(verbosity=2).run(testSuite)
diff --git a/behaviors/AllPixelsLeft.py b/behaviors/AllPixelsLeft.py
index 7f731e9..0c66f2f 100644
--- a/behaviors/AllPixelsLeft.py
+++ b/behaviors/AllPixelsLeft.py
@@ -6,6 +6,5 @@ class AllPixelsLeft(Behavior):
for sensory in sensorInputs:
xLoc = sensory['Location'][0]
if type(xLoc) == type(tuple()):
- pdb.set_trace()
sensory['Location'] = '[{x}<' + str(xLoc) + ']'
return (sensorInputs, recursiveInputs)
diff --git a/tests/TestConfigLoaders.py b/tests/TestConfigLoaders.py
index 6ea4f59..73b4987 100644
--- a/tests/TestConfigLoaders.py
+++ b/tests/TestConfigLoaders.py
@@ -1,10 +1,25 @@
import unittest
+import util.Config as Config
+import pdb
+from xml.etree.ElementTree import *
+import filecmp
+import xml
class TestConfigLoaders(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
- def test_something(self):
- pass
+ def test_composite(self):
+ parent = ElementTree()
+ overrider = ElementTree()
+
+ parent.parse('tests/testdata/parent.xml')
+ overrider.parse('tests/testdata/override.xml')
+
+ result = Config.compositeXMLTrees(parent,overrider)
+ result = ElementTree(result)
+ result.write('tests/testdata/compositeTEST.xml')
+ assert filecmp.cmp('tests/testdata/compositeTEST.xml','tests/testdata/compositeTRUTH.xml')
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/testdata/compositeTEST.xml b/tests/testdata/compositeTEST.xml
new file mode 100644
index 0000000..ded1666
--- /dev/null
+++ b/tests/testdata/compositeTEST.xml
@@ -0,0 +1,10 @@
+<Override>
+<A>
+ <override>overide parameter</override>
+</A>
+<B OverrideBehavior="Merge">
+ <this>taht</this>
+ <that>this</that>
+<SomeNewParam>blah</SomeNewParam>
+</B>
+</Override> \ No newline at end of file
diff --git a/tests/testdata/compositeTRUTH.xml b/tests/testdata/compositeTRUTH.xml
new file mode 100644
index 0000000..ded1666
--- /dev/null
+++ b/tests/testdata/compositeTRUTH.xml
@@ -0,0 +1,10 @@
+<Override>
+<A>
+ <override>overide parameter</override>
+</A>
+<B OverrideBehavior="Merge">
+ <this>taht</this>
+ <that>this</that>
+<SomeNewParam>blah</SomeNewParam>
+</B>
+</Override> \ No newline at end of file
diff --git a/tests/testdata/override.xml b/tests/testdata/override.xml
new file mode 100644
index 0000000..5d703ed
--- /dev/null
+++ b/tests/testdata/override.xml
@@ -0,0 +1,8 @@
+<Override>
+<A>
+ <override>overide parameter</override>
+</A>
+<B OverrideBehavior="Merge">
+ <SomeNewParam>blah</SomeNewParam>
+</B>
+</Override>
diff --git a/tests/testdata/parent.xml b/tests/testdata/parent.xml
new file mode 100644
index 0000000..740edf0
--- /dev/null
+++ b/tests/testdata/parent.xml
@@ -0,0 +1,10 @@
+<Parent>
+<A>
+ <blah>test</blah>
+ <foo>bar</foo>
+</A>
+<B>
+ <this>taht</this>
+ <that>this</that>
+</B>
+</Parent>
diff --git a/util/Config.py b/util/Config.py
index 0349e3e..36ff104 100644
--- a/util/Config.py
+++ b/util/Config.py
@@ -1,4 +1,6 @@
-from xml.etree.ElementTree import ElementTree
+from xml.etree.ElementTree import *
+import xml
+import pdb
import util.Strings as Strings
classArgsMem = {}
CONFIG_PATH = 'config/'
@@ -17,20 +19,26 @@ def loadConfigFile(fileName): #TODO: error handling etc.
return config
#except:
return None
+def getElement(el):
+ if xml.etree.ElementTree.iselement(el):
+ return el
+ elif el.__class__ == ElementTree:
+ return el.getroot()
def compositeXMLTrees(parentTree, overridingTree):
#type checking -- convert ElementTrees to their root elements
+ parentTree = getElement(parentTree)
+ overridingTree = getElement(overridingTree)
parentItems = parentTree.getchildren()
overrideItems = overridingTree.getchildren()
#first, lets figure out what tags we have in the override tree:
tagCollection = [el.tag for el in overrideItems] #we can speed this up with a dict if necessary
- overrideRoot = overridingTree.getroot()
for item in parentItems:
if not item.tag in tagCollection: #no override
- overrideRoot.insert(-1, item) #insert the new item at the end
+ overridingTree.insert(-1, item) #insert the new item at the end
else:
#do we merge or replace?
intersectingElements = findElementsByTag(item.tag, overrideItems)
- if len(intersectingItems) > 1:
+ if len(intersectingElements) > 1:
print 'ABUSE!'
interEl = intersectingElements[0]
mode = 'Replace'
@@ -42,8 +50,8 @@ def compositeXMLTrees(parentTree, overridingTree):
if mode == 'Replace':
pass #we don't need to do anything
if mode == 'Merge':
- pass #TODO: code this
-
+ interEl = compositeXMLTrees(item, interEl)
+ return overridingTree
def findElementsByTag(tag, eList):
return [el for el in eList if el.tag == tag]
def fileToDict(fileName):
@@ -81,29 +89,3 @@ def generateArgDict(parentNode, recurse=False):
if len(args.keys()) == 1 and recurse:
return args[args.keys()[0]]
return args
-def compositeXMLTrees(parentTree, overridingTree):
- #type checking -- convert ElementTrees to their root elements
- parentItems = parentTree.getchildren()
- overrideItems = overridingTree.getchildren()
- #first, lets figure out what tags we have in the override tree:
- tagCollection = [el.tag for el in overrideItems] #we can speed this up with a dict if necessary
- overrideRoot = overridingTree.getroot()
- for item in parentItems:
- if not item.tag in tagCollection: #no override
- overrideRoot.insert(-1, item) #insert the new item at the end
- else:
- #do we merge or replace?
- intersectingElements = findElementsByTag(item.tag, overrideItems)
- if len(intersectingItems) > 1:
- print 'ABUSE!'
- interEl = intersectingElements[0]
- mode = 'Replace'
- if Strings.OVERRIDE_BEHAVIOR in interEl.attrib:
- mode = interEl.attrib[Strings.OVERRIDE_BEHAVIOR]
- if mode != 'Replace' and mode != 'Merge':
- print 'Bad Mode. Replacing'
- mode = 'Replace'
- if mode = 'Replace':
- pass #we don't need to do anything
- if mode = 'Merge':
- pass #TODO: code this