def test_class_condition_satisfied_by_instances(self):

      class A: pass
      isAnA = Condition(A)
      anA = A()

      self.assertTrue(isAnA.matches(anA))
   def test_class_condition_not_satisfied_by_instances_of_supertypes(self):

      class A: pass
      class B(A): pass
      isAB = Condition(B)
      anA = A()

      self.assertFalse(isAB.matches(A))
   def test_class_condition_satisfied_by_instances_of_subtypes(self):

      class A: pass
      class B(A): pass
      isAnA = Condition(A)
      aB = B()

      self.assertTrue(isAnA.matches(aB))
   def test_function_condition_satisfied_when_function_returns_true(self):

      isEven = Condition(lambda number: number % 2 == 0)
      self.assertTrue(isEven.matches(4))
      self.assertFalse(isEven.matches(3))
   def test_value_condition_not_satisfied_by_other_value(self):

      is5 = Condition(5)
      self.assertFalse(is5.matches(7))
   def test_value_condition_satisfied_by_same_value(self):
 
      is5 = Condition(5)
      self.assertTrue(is5.matches(5))
 def test_class_condition_not_satisfied_by_class_object(self):
 
    class A: pass
    isAnA = Condition(A)
    
    self.assertFalse(isAnA.matches(A))