Exemple #1
0
    def test_condition_fail(self):
        context = ExecutionContext()
        aA = jp.PathEqPredicate('a', 'A')
        b2 = jp.PathEqPredicate('b', '2')
        ifAthen2 = jc.IF(aA, b2)
        demorgan = jc.OR([jc.NOT(aA), b2])

        expect = demorgan(context, _LETTER_DICT)
        result = ifAthen2(context, _LETTER_DICT)
        self.assertFalse(result)
        self.assertEqual(expect, result)
Exemple #2
0
    def test_disjunction_true_aborts_early(self):
        aA = jp.PathEqPredicate('a', 'A')
        bB = jp.PathEqPredicate('b', 'B')
        disjunction = jc.OR([aA, bB])
        expect = jc.CompositePredicateResult(valid=True,
                                             pred=disjunction,
                                             results=[aA(_LETTER_DICT)])

        result = disjunction(_LETTER_DICT)
        self.assertTrue(result)
        self.assertEqual(expect, result)
    def test_disjunction_true_aborts_early(self):
        context = ExecutionContext()
        aA = jp.PathEqPredicate('a', 'A')
        bB = jp.PathEqPredicate('b', 'B')
        disjunction = jc.OR([aA, bB])
        expect = jc.SequencedPredicateResult(
            valid=True, pred=disjunction, results=[aA(context, _LETTER_DICT)])

        result = disjunction(context, _LETTER_DICT)
        self.assertTrue(result)
        self.assertEqual(expect, result)
Exemple #4
0
  def test_disjunction_false(self):
    context = ExecutionContext()
    a1 = jp.PathEqPredicate('a', 1)
    b2 = jp.PathEqPredicate('b', 2)
    disjunction = jc.OR([a1, b2])
    expect = jc.CompositePredicateResult(
        valid=False, pred=disjunction,
        results=[a1(context, _LETTER_DICT), b2(context, _LETTER_DICT)])

    result = disjunction(context, _LETTER_DICT)
    self.assertFalse(result)
    self.assertEqual(expect, result)
Exemple #5
0
  def test_conjunction_true(self):
    context = ExecutionContext()
    aA = jp.PathEqPredicate('a', 'A')
    bB = jp.PathEqPredicate('b', 'B')
    conjunction = jc.AND([aA, bB])
    expect = jc.CompositePredicateResult(
        valid=True, pred=conjunction,
        results=[aA(context, _LETTER_DICT), bB(context, _LETTER_DICT)])

    result = conjunction(context, _LETTER_DICT)
    self.assertTrue(result)
    self.assertEqual(expect, result)
Exemple #6
0
    def test_condition_success(self):
        aA = jp.PathEqPredicate('a', 'A')
        bB = jp.PathEqPredicate('b', 'B')
        ifAthenB = jc.IF(aA, bB)
        demorgan = jc.OR([jc.NOT(aA), bB])

        test_cases = [_LETTER_DICT, {'a': 'X', 'b': 'Y'}, {'a': 'X', 'b': 'B'}]
        for test in test_cases:
            expect = demorgan(test)
            result = ifAthenB(test)
            self.assertTrue(result)
            self.assertEqual(expect, result)
Exemple #7
0
  def test_conjunction_false_aborts_early(self):
    context = ExecutionContext()
    aA = jp.PathEqPredicate('a', 'A')
    b2 = jp.PathEqPredicate('b', 2)
    bB = jp.PathEqPredicate('b', 'B')
    conjunction = jc.AND([aA, b2, bB])
    expect = jc.CompositePredicateResult(
        valid=False, pred=conjunction,
        results=[aA(context, _LETTER_DICT), b2(context, _LETTER_DICT)])

    result = conjunction(context, _LETTER_DICT)
    self.assertFalse(result)
    self.assertEqual(expect, result)
Exemple #8
0
  def test_condition_indirect_success(self):
    context = ExecutionContext(a='A', b='B')
    aA = jp.PathEqPredicate('a', lambda x: x['a'])
    bB = jp.PathEqPredicate('b', lambda x: x['b'])
    ifAthenB = jc.IF(aA, bB)
    demorgan = jc.OR([jc.NOT(aA), bB])

    test_cases = [_LETTER_DICT, {'a':'X', 'b':'Y'}, {'a':'X', 'b':'B'}]
    for test in test_cases:
      expect = demorgan(context, test)
      result = ifAthenB(context, test)
      self.assertTrue(result)
      self.assertEqual(expect, result)
Exemple #9
0
    def test_condition_else_success(self):
        context = ExecutionContext(a='A', b='B', c='C')
        aA = jp.PathEqPredicate('a', lambda x: x['a'])
        bB = jp.PathEqPredicate('b', lambda x: x['b'])
        cC = jp.PathEqPredicate('c', lambda x: x['c'])

        ifAthenBelseC = jc.IF(aA, bB, cC)

        # True if all conditions are true.
        # True if "if" satisfied and "then" matches.
        # True if only else condition is true.
        test_cases = [
            _LETTER_DICT,
            {
                'a': 'A',
                'b': 'B',
                'c': 'X'
            },
            {
                'a': 'X',
                'b': 'B',
                'c': 'C'
            },
            {
                'a': 'X',
                'b': 'X',
                'c': 'C'
            },
        ]

        for i in range(3):
            test = test_cases[i]
            tried = [aA(context, test)]
            if i < 2:
                # First two have true IF to just execute THEN
                tried.append(bB(context, test))
            else:
                # Remainder have false IF to just execute ELSE
                tried.append(cC(context, test))

            expect = jc.SequencedPredicateResult(valid=True,
                                                 pred=ifAthenBelseC,
                                                 results=tried)
            result = ifAthenBelseC(context, test)
            self.assertTrue(result)
            self.assertEqual(expect, result)
Exemple #10
0
    def test_condition_else_success(self):
        aA = jp.PathEqPredicate('a', 'A')
        bB = jp.PathEqPredicate('b', 'B')
        cC = jp.PathEqPredicate('c', 'C')

        aA_and_bB = jc.AND([aA, bB])
        ifAthenBelseC = jc.IF(aA, bB, cC)

        # True if all conditions are true.
        # True if "if" satisfied and "then" matches.
        # True if only else condition is true.
        test_cases = [
            _LETTER_DICT, {
                'a': 'A',
                'b': 'B',
                'c': 'X'
            }, {
                'a': 'X',
                'b': 'B',
                'c': 'C'
            }, {
                'a': 'X',
                'b': 'X',
                'c': 'C'
            }
        ]

        for i in range(3):
            test = test_cases[i]
            tried = [aA(test)]
            if i < 2:
                # First two have true IF to just execute THEN
                tried.append(bB(test))
            else:
                # Remainder have false IF to just execute ELSE
                tried.append(cC(test))

            expect = jc.CompositePredicateResult(valid=True,
                                                 pred=ifAthenBelseC,
                                                 results=tried)
            result = ifAthenBelseC(test)
            self.assertTrue(result)
            self.assertEqual(expect, result)
Exemple #11
0
  def test_not_success(self):
    context = ExecutionContext()
    a1 = jp.PathEqPredicate('a', '1')
    not_a1 = jc.NOT(a1)

    expect = jc.CompositePredicateResult(
        valid=True, pred=not_a1, results=[a1(context, _LETTER_DICT)])
    result = not_a1(context, _LETTER_DICT)
    self.assertTrue(result)
    self.assertEqual(expect, result)

    b2 = jp.PathEqPredicate('b', '2')
    b2_or_a1 = jc.OR([b2, a1])
    not_b2_or_a1 = jc.NOT(b2_or_a1)
    expect = jc.CompositePredicateResult(
        valid=True, pred=not_b2_or_a1,
        results=[b2_or_a1(context, _LETTER_DICT)])
    result = not_b2_or_a1(context, _LETTER_DICT)
    self.assertTrue(result)
    self.assertEqual(expect, result)
Exemple #12
0
  def test_not_fail(self):
    context = ExecutionContext()
    aA = jp.PathEqPredicate('a', 'A')
    not_aA = jc.NOT(aA)

    expect = jc.CompositePredicateResult(
        valid=False, pred=not_aA, results=[aA(context, _LETTER_DICT)])
    result = not_aA(context, _LETTER_DICT)
    self.assertFalse(result)
    self.assertEqual(expect, result)

    bB = jp.PathEqPredicate('b', 'B')
    bB_or_aA = jc.OR([bB, aA])
    not_bB_or_aA = jc.NOT(bB_or_aA)
    expect = jc.CompositePredicateResult(
        valid=False, pred=not_bB_or_aA,
        results=[bB_or_aA(context, _LETTER_DICT)])
    result = not_bB_or_aA(context, _LETTER_DICT)
    self.assertFalse(result)
    self.assertEqual(expect, result)