Beispiel #1
0
 def test_7_400_2(self):
     '''Test changes related to the 7.400.2 version of master.xml
     '''
     coad = COAD('coad/master_7.400.2.xml')
     # Test model first, as the horizons will attach themselves to the copied base model
     oldobj = coad['Model']['Base']
     newobj = oldobj.copy('Test Base Model')
     self.assertIn('Test Base Model', coad['Model'])
     should_contain = [
         coad['Horizon']['Base'], coad['Report']['Base'],
         coad['ST Schedule']['Base']
     ]
     self.assertItemsEqual(should_contain,
                           coad['Model']['Test Base Model'].get_children())
     oldobj = coad['Horizon']['Base']
     newobj = oldobj.copy('New Horizon')
     self.assertNotEqual(oldobj.meta['name'], newobj.meta['name'])
     for (k, v) in oldobj.items():
         self.assertEqual(v, newobj[k])
     self.assertEqual(['Base', 'New Horizon'], coad.list('Horizon'))
     self.assertNotEqual(coad['Horizon']['Base'].meta['GUID'],
                         coad['Horizon']['New Horizon'].meta['GUID'])
     newobj = oldobj.copy()
     self.assertNotEqual(oldobj.meta['name'], newobj.meta['name'])
Beispiel #2
0
class TestObjectDict(unittest.TestCase):
    def setUp(self):
        # TODO: Move into setupclass for big files
        # May have to copy data in the write tests to avoid poisoning the other tests
        filename = 'coad/master.xml'
        #filename='test/118-Bus.xml'
        #filename='test/Solar33P.xml'
        #filename='test/WFIP-MISO.xml'
        #filename='test/WWSIS.xml'
        self.coad = COAD(filename)
        # Fix bad api for python 3.2
        if not hasattr(self, 'assertItemsEqual'):
            self.assertItemsEqual = self.assertCountEqual

    def test_copy(self):
        oldobj = self.coad['Performance']['Gurobi']
        newobj = oldobj.copy()
        self.assertNotEqual(oldobj.meta['name'], newobj.meta['name'])
        for (k, v) in oldobj.items():
            self.assertEqual(v, newobj[k])
        self.coad.list('Performance')
        newobj = oldobj.copy()
        self.assertNotEqual(oldobj.meta['name'], newobj.meta['name'])
        oldobj = self.coad['Model']['Base']
        newobj = oldobj.copy('Test Base Model')
        self.assertIn('Test Base Model', self.coad['Model'])
        should_contain = [
            self.coad['Horizon']['Base'], self.coad['Report']['Base'],
            self.coad['ST Schedule']['Base']
        ]
        self.assertItemsEqual(
            should_contain,
            self.coad['Model']['Test Base Model'].get_children())
        self.assertItemsEqual(
            [self.coad['System']['System']],
            self.coad['Model']['Test Base Model'].get_parents())
        self.assertRaises(Exception, self.coad['Model']['Base'].copy,
                          'Test Base Model')

    def test_get_parents(self):
        should_contain = [
            master_coad['System']['System'], master_coad['Model']['Base']
        ]
        self.assertItemsEqual(should_contain,
                              master_coad['Horizon']['Base'].get_parents())
        self.assertItemsEqual(
            [master_coad['Model']['Base']],
            master_coad['Horizon']['Base'].get_parents('Model'))

    def test_get_children(self):
        should_contain = [
            self.coad['Horizon']['Base'], self.coad['Report']['Base'],
            self.coad['ST Schedule']['Base']
        ]
        self.assertItemsEqual(should_contain,
                              self.coad['Model']['Base'].get_children())
        self.assertItemsEqual(
            [self.coad['Horizon']['Base']],
            self.coad['Model']['Base'].get_children('Horizon'))

    def test_set_children(self):
        # Single new child
        self.coad['Model']['Base'].set_children(
            self.coad['Performance']['Gurobi'])
        should_contain = [
            self.coad['Horizon']['Base'], self.coad['Report']['Base'],
            self.coad['ST Schedule']['Base'],
            self.coad['Performance']['Gurobi']
        ]
        self.assertEqual(should_contain,
                         self.coad['Model']['Base'].get_children())
        # Duplicates
        self.coad['Model']['Base'].set_children(
            self.coad['Performance']['Gurobi'], replace=False)
        self.assertEqual(
            1, len(self.coad['Model']['Base'].get_children('Performance')))
        # TODO: Test multiple new children of different classes that overwrites existing
        # TODO: Test adding new child once collection functionality is understood
        # TODO: Add mix of new child classes once collection functionality is understood
        # Children with multiple collections available
        filename = 'coad/test/RTS-96.xml'
        coad = COAD(filename)
        self.assertRaises(Exception, coad['Node']['101'].set_children,
                          coad['Zone'].meta['class_id'])
        self.assertEqual(
            178, coad['Node']['101'].get_collection_id(
                coad['Zone'].meta['class_id'], name="Zone"))
        dzone = coad['Zone'].new("Dummy Zone")
        coad['Node']['101'].set_children(dzone, name="Zone")

    def test_get_class(self):
        g_class = self.coad['Performance']['Gurobi'].get_class()
        self.assertItemsEqual(self.coad['Performance'], g_class)

    def test_del(self):
        # Existing attribute
        del (self.coad['Model']['Base']['Enabled'])
        # Make sure the db has been modified
        fresh_obj = ObjectDict(self.coad, self.coad['Model']['Base'].meta)
        #print(fresh_obj)
        self.assertNotIn('Enabled', fresh_obj.keys())
        #self.coad.save('master_noenable.xml')

    def test_get_category_id(self):
        '''Test get category id for class
        '''
        self.assertEqual("1", self.coad['System'].get_category_id('-'))

    def test_get_categories(self):
        '''Test class and object category retrieval
        '''
        self.assertEqual("-",
                         self.coad['Performance'].get_categories()[0]['name'])
        self.assertEqual("-",
                         self.coad['Performance']['Gurobi'].get_category())

    def test_7_400_2(self):
        '''Test changes related to the 7.400.2 version of master.xml
        '''
        coad = COAD('coad/master_7.400.2.xml')
        # Test model first, as the horizons will attach themselves to the copied base model
        oldobj = coad['Model']['Base']
        newobj = oldobj.copy('Test Base Model')
        self.assertIn('Test Base Model', coad['Model'])
        should_contain = [
            coad['Horizon']['Base'], coad['Report']['Base'],
            coad['ST Schedule']['Base']
        ]
        self.assertItemsEqual(should_contain,
                              coad['Model']['Test Base Model'].get_children())
        oldobj = coad['Horizon']['Base']
        newobj = oldobj.copy('New Horizon')
        self.assertNotEqual(oldobj.meta['name'], newobj.meta['name'])
        for (k, v) in oldobj.items():
            self.assertEqual(v, newobj[k])
        self.assertEqual(['Base', 'New Horizon'], coad.list('Horizon'))
        self.assertNotEqual(coad['Horizon']['Base'].meta['GUID'],
                            coad['Horizon']['New Horizon'].meta['GUID'])
        newobj = oldobj.copy()
        self.assertNotEqual(oldobj.meta['name'], newobj.meta['name'])

    def test_blank_elements(self):
        '''Make sure blank elements are saved properly
        '''
        filename = 'coad/test/118-Bus_with_blanks.xml'
        pre = COAD(filename)
        cur = pre.dbcon.execute(
            "SELECT name FROM category WHERE category_id=49")
        val = cur.fetchone()[0]
        self.assertEqual(val, "")
        pre.save('coad/test/118-Bus_with_blanks_test.xml')
        post = COAD('coad/test/118-Bus_with_blanks_test.xml')
        cur = post.dbcon.execute(
            "SELECT name FROM category WHERE category_id=49")
        val = cur.fetchone()[0]
        self.assertEqual(val, "")