def testEventTypeSourceDictIterate(self):
     Trace("testEventTypeSourceDictIterate","TestEventPubSub")
     ed = EventTypeSourceDict()
     ed.insert("et","es","A1")
     ed.insert(None,None,"N1")
     ed.insert(None,"es","A1")
     ed.insert("et",None,"A1")
     cnt1 = 0
     for entry in ed.iterate("et","es"):
         cnt1 = cnt1 + 1
     self.assertEqual(cnt1, 4)
     cnt1 = 0
     for entry in ed.iterate("et",None):
         cnt1 = cnt1 + 1
     self.assertEqual(cnt1, 2)
     cnt1 = 0
     for entry in ed.iterate(None,"es"):
         cnt1 = cnt1 + 1
     self.assertEqual(cnt1, 2)
     cnt1 = 0
     for entry in ed.iterate(None,None):
         cnt1 = cnt1 + 1
     self.assertEqual(cnt1, 1)
 def testEventTypeSourceDict2(self):
     Trace("testEventTypeSourceDict2","TestEventPubSub")
     # Construct a test dinctionary
     ed = EventTypeSourceDict()
     tsvs = [ ("bt","bs","B1"), ("bt","bs","B2")
            , ("at","as","A1"), ("at","as","A2")
            , (None,None,"N1"), (None,None,"N2")
            ]
     for (t,s,v) in tsvs: ed.insert(t, s, v)
     self.assertEqual(list(ed.iterateAll()), tsvs)
     self.assertEqual(ed.count(), 6)
     # Test wildcard scanning operations
     self.assertEqual(list(ed.iterateWild(None,None)), tsvs)
     self.assertEqual(list(ed.iterateWild("at","as")),
                      [("at","as","A1"), ("at","as","A2"), (None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild("at",None)),
                      [("at","as","A1"), ("at","as","A2"), (None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild(None,"as")),
                      [("at","as","A1"), ("at","as","A2"), (None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild("bt","bs")),
                      [("bt","bs","B1"), ("bt","bs","B2"), (None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild("bt",None)),
                      [("bt","bs","B1"), ("bt","bs","B2"), (None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild(None,"bs")),
                      [("bt","bs","B1"), ("bt","bs","B2"), (None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild("ct","cs")),
                      [(None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild("ct",None)),
                      [(None,None,"N1"), (None,None,"N2")])
     self.assertEqual(list(ed.iterateWild(None,"cs")),
                      [(None,None,"N1"), (None,None,"N2")])
     return
 def testEventTypeSourceDict1(self):
     Trace("testEventTypeSourceDict1","TestEventPubSub")
     ed = EventTypeSourceDict()
     # Basic insertion tests
     self.assertEqual(ed.find("at","as"), [])
     self.assertEqual(ed.find("bt","bs"), [])
     ed.insert("at","as","A1")
     ed.insert(None,None,"N1")
     self.assertEqual(ed.find("at","as"), ["A1","N1"])
     self.assertEqual(ed.find("bt","bs"), ["N1"])
     ed.insert("at","as","A2")
     ed.insert("bt","bs","B1")
     ed.insert("bt","bs","B2")
     ed.insert(None,None,"N2")
     self.assertEqual(ed.find("at","as"), ["A1","A2","N1","N2"])
     self.assertEqual(ed.find("bt","bs"), ["B1","B2","N1","N2"])
     # Scan contents
     tsvs = [ ("bt","bs","B1"), ("bt","bs","B2")
            , ("at","as","A1"), ("at","as","A2")
            , (None,None,"N1"), (None,None,"N2")
            ]
     self.assertEqual(list(ed.iterateAll()), tsvs)
     self.assertEqual(ed.count(), 6)
     # Basic removal tests
     b1 = ed.remove("bt","bs","B1")
     self.assertEqual(b1, ["B1"])
     self.assertEqual(ed.find("bt","bs"), ["B2","N1","N2"])
     b2 = ed.remove("bt","bs","B2")
     self.assertEqual(b2, ["B2"])
     self.assertEqual(ed.find("bt","bs"), ["N1","N2"])
     n2 = ed.remove(None,None,"N2")
     self.assertEqual(n2, ["N2"])
     self.assertEqual(ed.find("at","as"), ["A1","A2","N1"])
     self.assertEqual(ed.find("bt","bs"), ["N1"])
     n1 = ed.remove(None,None,"N1")
     self.assertEqual(n1, ["N1"])
     self.assertEqual(ed.find("at","as"), ["A1","A2"])
     self.assertEqual(ed.find("bt","bs"), [])
     # Scan contents
     tsvs = [ ("at","as","A1"), ("at","as","A2") ]
     self.assertEqual(list(ed.iterateAll()), tsvs)
     self.assertEqual(ed.count(), 2)
     # Multiple-value insertion tests
     ed.insert("ct","cs","C")
     ed.insert(None,None,"N")
     ed.insert("ct","cs","C")
     ed.insert(None,None,"N")
     self.assertEqual(ed.find("ct","cs"), ["C","C","N","N"])
     # Scan contents
     tsvs = [ ("at","as","A1"), ("at","as","A2")
            , ("ct","cs","C"),  ("ct","cs","C")
            , (None,None,"N"),  (None,None,"N")
            ]
     self.assertEqual(list(ed.iterateAll()), tsvs)
     self.assertEqual(ed.count(), 6)
     # Multiple-value removal tests
     el = ed.remove("ct","cs","C1")
     self.assertEqual(el, [])
     self.assertEqual(ed.find("ct","cs"), ["C","C","N","N"])
     cc = ed.remove("ct","cs","C")
     self.assertEqual(cc, ["C","C"])
     self.assertEqual(ed.find("ct","cs"), ["N","N"])
     el = ed.remove("ct","cs","C")
     self.assertEqual(el, [])
     self.assertEqual(ed.find("ct","cs"), ["N","N"])
     el = ed.remove(None,None,"C")
     self.assertEqual(el, [])
     self.assertEqual(ed.find("ct","cs"), ["N","N"])
     nn = ed.remove(None,None,"N")
     self.assertEqual(nn, ["N","N"])
     self.assertEqual(ed.find("ct","cs"), [])
     el = ed.remove(None,None,"N")
     self.assertEqual(el, [])
     self.assertEqual(ed.find("at","as"), ["A1","A2"])
     self.assertEqual(ed.find("bt","bs"), [])
     self.assertEqual(ed.find("ct","cs"), [])
     # Scan contents
     tsvs = [ ("at","as","A1"), ("at","as","A2") ]
     self.assertEqual(list(ed.iterateAll()), tsvs)
     self.assertEqual(ed.count(), 2)
     # Partial wildcard tests
     ed.insert("dt","ds","D1ts")
     ed.insert("dt","ds","D2ts")
     ed.insert("dt",None,"D1tn")
     ed.insert(None,"ds","D1ns")
     ed.insert(None,None,"D1nn")
     self.assertEqual(ed.find("dt","ds"), ["D1ts","D2ts","D1tn","D1ns","D1nn"])
     # Scan contents
     tsvs = [ ("dt","ds","D1ts"), ("dt","ds","D2ts")
            , ("dt",None,"D1tn")
            , ("at","as","A1"),   ("at","as","A2")
            , (None,"ds","D1ns")
            , (None,None,"D1nn")
            ]
     self.assertEqual(list(ed.iterateAll()), tsvs)
     self.assertEqual(ed.count(), 7)
     # Partial wildcard tests in opposite order of insertion
     ed.insert(None,None,"E3nn")
     ed.insert(None,"es","E3ns")
     ed.insert("et",None,"E3tn")
     ed.insert("et","es","E4ts")
     ed.insert("et","es","E3ts")
     self.assertEqual(ed.find("et","es"), ["E4ts","E3ts","E3tn","E3ns","D1nn","E3nn"])        
     return