예제 #1
0
class TestGraphSerialize(unittest.TestCase):
    def setUp(self):
        self.out1 = tempfile()
        self.out2 = tempfile()
        self.g1 = Graph()
        self.g2 = Graph()

    def tearDown(self):
        self.g1.destroy()
        self.g2.destroy()

        try: os.unlink(self.out1.name)
        except: pass
        try: os.unlink(self.out2.name)
        except: pass

    def inout(self):
        lgs.gSerialize(self.g1.soul, self.out1.name, self.out2.name)
        lgs.gDeserialize(self.g2.soul, self.out1.name, self.out2.name)
    

    def test_errors(self):
       self.assertRaises(IOError, self.g1.serialize, "/dev/asdfafsdaf")
       self.assertRaises(IOError, self.g1.serialize, "/dev/asdfafsdaf", True)
       self.g1.add_vertices(('a','b'))
       self.g1.add_edge('a','b', NoOpPyPayload(5))
       self.assertRaises(Exception, self.g1.serialize, self.out1.name)
       self.g2.add_vertices(('a','b'))
       self.g2.add_edge('a','b', Link())
       self.g2.serialize("cows")
       # bad sig
       with open("cows.gbin", 'r+b') as foo:
           foo.seek(1)
           foo.write("afdasdf")
       self.assertRaises(IOError, self.g1.deserialize, "cows")
       # bad file
       self.assertRaises(IOError, self.g1.deserialize, self.out2.name)

    def test_vertices(self):
        nv = 10
        for i in xrange(10):
            self.g1.add_vertex(str(i))
        self.inout()
        self.assertEquals(self.g2.size, nv);

    def test_link_edge(self):
        self.g1.add_vertex("A")
        self.g1.add_vertex("B")
        self.g1.add_edge("A","B", Link())
        self.inout()
        self.assertEquals(self.g2.size, 2)
        print self.g2.vertices
        self.assertTrue(self.g2.get_vertex("A") != None)
        self.assertEquals(len(self.g2.get_vertex("A").outgoing), 1)
        self.assertEquals(len(self.g2.get_vertex("B").outgoing), 0)
        self.assertEquals(len(self.g2.get_vertex("B").incoming), 1)
        self.assertEquals(self.g2.get_vertex("A").outgoing[0].payload.__class__, Link)

    def test_street_edge(self):
        self.g1.add_vertex("A")
        self.g1.add_vertex("B")
        s1_args = ("s1", 2, 2, 2, False)
        s2_args = ("s2", 3, 3, 3, True)
        self.g1.add_edge("A","B", Street(*s1_args))
        self.assertEquals(self.g1.get_vertex("A").outgoing[0].payload.reverse_of_source, False)
        
        self.g1.add_edge("B","A", Street(*s2_args))
        self.inout()
        self.assertEquals(self.g2.size, 2)
        print self.g2.vertices
        self.assertTrue(self.g2.get_vertex("A") != None)
        self.assertEquals(len(self.g2.get_vertex("A").outgoing), 1)
        self.assertEquals(len(self.g2.get_vertex("B").outgoing), 1)
        self.assertEquals(len(self.g2.get_vertex("B").incoming), 1)
        self.assertEquals(self.g2.get_vertex("A").outgoing[0].payload.__class__, Street)
        s1 = self.g2.get_vertex("A").outgoing[0].payload
        s2 = self.g2.get_vertex("B").outgoing[0].payload
        self.assertEquals(s1.name, "s1")
        for e,args in ((s1, s1_args), (s2, s2_args)):
            for f,v in zip(("name","length","rise","fall","reverse_of_source"),args):
                print f,v, getattr(e,f)
                self.assertEquals(getattr(e,f), v)