From b09a41f0891c041ad4fcecca59d03f52fe9ee9e8 Mon Sep 17 00:00:00 2001 From: rcoh Date: Sat, 25 Dec 2010 16:32:29 -0500 Subject: some testcode that should be in the testing branch, but w/e. A method to composite to xml trees, and a unit test to test it. --- TestAll.py | 5 +++++ behaviors/AllPixelsLeft.py | 1 - tests/TestConfigLoaders.py | 19 ++++++++++++++-- tests/testdata/compositeTEST.xml | 10 +++++++++ tests/testdata/compositeTRUTH.xml | 10 +++++++++ tests/testdata/override.xml | 8 +++++++ tests/testdata/parent.xml | 10 +++++++++ util/Config.py | 46 ++++++++++++--------------------------- 8 files changed, 74 insertions(+), 35 deletions(-) create mode 100644 TestAll.py create mode 100644 tests/testdata/compositeTEST.xml create mode 100644 tests/testdata/compositeTRUTH.xml create mode 100644 tests/testdata/override.xml create mode 100644 tests/testdata/parent.xml 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 @@ + + + overide parameter + + + taht + this +blah + + \ 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 @@ + + + overide parameter + + + taht + this +blah + + \ 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 @@ + + + overide parameter + + + blah + + 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 @@ + + + test + bar + + + taht + this + + 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 -- cgit v1.2.3