def testIdentityCriterion(self):
     ob = object()
     i = Pointer(ob)
     validateCriterion(i,
         strategy.make_node_type(strategy.dispatch_by_identity))
     i = ISeededCriterion(i)
     self.assertEqual(list(i.seeds()),[None,id(ob)&maxint])
 def testIdentityCriterion(self):
     ob = object()
     i = Pointer(ob)
     validateCriterion(
         i, strategy.make_node_type(strategy.dispatch_by_identity))
     i = ISeededCriterion(i)
     self.assertEqual(list(i.seeds()), [None, id(ob) & maxint])
 def testClassCriteriaSeedsAndDispatchFunctions(self):
     for klass in (Vehicle,LandVehicle,WaterVehicle,HumanPowered,GasPowered):
         seeds = list(ISeededCriterion(klass).seeds())
         self.failUnless(klass in seeds)
         self.failUnless(object in seeds)
         self.failIf(len(seeds)!=2)
         validateCriterion(klass,
             strategy.make_node_type(strategy.dispatch_by_mro),
             parents=[ICriterion(cls) for cls in getMRO(klass,True)])
 def testClassCriteriaSeedsAndDispatchFunctions(self):
     for klass in (Vehicle, LandVehicle, WaterVehicle, HumanPowered,
                   GasPowered):
         seeds = list(ISeededCriterion(klass).seeds())
         self.failUnless(klass in seeds)
         self.failUnless(object in seeds)
         self.failIf(len(seeds) != 2)
         validateCriterion(
             klass,
             strategy.make_node_type(strategy.dispatch_by_mro),
             parents=[ICriterion(cls) for cls in getMRO(klass, True)])
示例#5
0
    def testHasParentCriterion(self):
        from dispatch import strategy, predicates, functions
        from peak.binding.components import HasParentCriterion as HPC
        from peak.binding.components import dispatch_by_hierarchy

        data = HPC(self.data)
        svc  = HPC(self.data.aService)
        table = {data.ptr:"pass", None:"fail"}
        strategy.validateCriterion(data,
            strategy.make_node_type(dispatch_by_hierarchy), # XXX
            parents=[HPC(p) for p in binding.iterParents(self.data)]
        )
        self.failUnless(svc.implies(data))

        for item in self.data, self.data.aService.thing5, self.data.thing8:
            self.failUnless(strategy.Pointer(item) in data)
            self.assertEqual(dispatch_by_hierarchy(table, item),"pass")
        for item in self.data.getParentComponent(), self.data.thing1, None:
            self.failIf(strategy.Pointer(item) in data)
            self.assertEqual(dispatch_by_hierarchy(table, item),"fail")
        table[svc.ptr] = "pass"
        self.assertEqual(Set(data.matches(table)), Set([svc.ptr,data.ptr]))

        gf = functions.GenericFunction(lambda x:None)
        d = locals()
        parse = gf.parse
        pe = lambda e: parse(e,d,globals())
        self.assertEqual(pe('binding.hasParent(x,self.data)'),
            strategy.Signature(x=data))

        [gf.when("binding.hasParent(x,self.data)")]
        def gf(x): return "in data"
        [gf.when("binding.hasParent(x,self.data.aService)")]
        def gf(x): return "in service"

        self.assertEqual(gf(self.data),"in data")
        self.assertEqual(gf(self.data.thing8),"in service")
        self.assertEqual(gf(self.data.aService.thing5),"in data")
        self.assertEqual(gf(self.data.aService.nestedService),"in service")
    def testSubclassCriterion(self):
        s = SubclassCriterion(Vehicle)
        validateCriterion(
            s,
            strategy.make_node_type(strategy.dispatch_by_subclass),
            parents=[SubclassCriterion(c) for c in getMRO(Vehicle, True)])

        # seeds()
        self.assertEqual(s.seeds(), [Vehicle, None])

        # __contains__
        for klass in Vehicle, LandVehicle, WaterVehicle:
            self.failUnless(klass in s)
        for klass in None, GasPowered, object, Wheeled:
            self.failUnless(klass not in s)

        # implies()
        self.failUnless(s.implies(SubclassCriterion(object)))
        self.failUnless(SubclassCriterion(LandVehicle).implies(s))
        self.failIf(s.implies(SubclassCriterion(LandVehicle)))
        self.failIf(SubclassCriterion(object).implies(s))

        # eq/ne/invert
        self.assertEqual(s, SubclassCriterion(Vehicle))
        self.assertNotEqual(s, SubclassCriterion(LandVehicle))

        # matches()
        table = {LandVehicle: 1, object: 2, None: 3}
        items = list(s.matches(table))
        self.assertEqual(items, [LandVehicle])

        # dispatch
        table = {Vehicle: 1, object: 2, None: 3}
        self.assertEqual(strategy.dispatch_by_subclass(table, Vehicle), 1)
        self.assertEqual(strategy.dispatch_by_subclass(table, LandVehicle), 1)
        self.assertEqual(strategy.dispatch_by_subclass(table, object), 2)
        self.assertEqual(strategy.dispatch_by_subclass(table, None), 3)
        self.assertRaises(AttributeError, strategy.dispatch_by_subclass, table,
                          Bicycle)
    def testSubclassCriterion(self):
        s = SubclassCriterion(Vehicle)
        validateCriterion(s,
            strategy.make_node_type(strategy.dispatch_by_subclass),
            parents=[SubclassCriterion(c) for c in getMRO(Vehicle,True)]
        )

        # seeds()
        self.assertEqual( s.seeds(), [Vehicle,None])

        # __contains__
        for klass in Vehicle,LandVehicle,WaterVehicle:
            self.failUnless(klass in s)
        for klass in None,GasPowered,object,Wheeled:
            self.failUnless(klass not in s)

        # implies()
        self.failUnless( s.implies(SubclassCriterion(object)) )
        self.failUnless( SubclassCriterion(LandVehicle).implies(s) )
        self.failIf( s.implies(SubclassCriterion(LandVehicle)) )
        self.failIf( SubclassCriterion(object).implies(s) )

        # eq/ne/invert
        self.assertEqual( s, SubclassCriterion(Vehicle))
        self.assertNotEqual( s, SubclassCriterion(LandVehicle))

        # matches()
        table = {LandVehicle:1,object:2,None:3}
        items = list(s.matches(table))
        self.assertEqual(items,[LandVehicle])

        # dispatch
        table = {Vehicle:1,object:2,None:3}
        self.assertEqual(strategy.dispatch_by_subclass(table, Vehicle), 1)
        self.assertEqual(strategy.dispatch_by_subclass(table, LandVehicle), 1)
        self.assertEqual(strategy.dispatch_by_subclass(table, object), 2)
        self.assertEqual(strategy.dispatch_by_subclass(table, None), 3)
        self.assertRaises(AttributeError,
            strategy.dispatch_by_subclass, table, Bicycle)
 def testTruth(self):
     for t in True, False:
         validateCriterion(
             TruthCriterion(t),
             strategy.make_node_type(strategy.dispatch_by_truth))
 def testTruth(self):
     for t in True,False:
         validateCriterion(TruthCriterion(t),
             strategy.make_node_type(strategy.dispatch_by_truth))