def test_q_expansion():
    assert Q(C(1), C(2), module=3) == And(C(1), C(2), Q(module=3))
    assert Q(C(1), C(2), module=3,
             action=C(4)) == When(And(C(1), C(2), Q(module=3)), C(4))
    assert Q(C(1), C(2), module=3,
             actions=[C(4), C(5)]) == When(And(C(1), C(2), Q(module=3)), C(4),
                                           C(5))
Beispiel #2
0
def test_and_or_kwargs():
    assert And(module=1, function=2) == Query(module=1, function=2)
    assert Or(module=1, function=2) == Or(Query(module=1), Query(function=2))

    assert And(3, module=1, function=2) == And(3, Query(module=1, function=2))
    assert Or(3, module=1, function=2) == Or(3, Query(module=1),
                                             Query(function=2))
def test_backlog_filter():
    class MyAction(ColorStreamAction):
        def __eq__(self, other):
            return True

    assert Backlog(Q(), action=MyAction).filter(function=1) == _Backlog(
        condition=Q(), filter=Query(function=1), action=MyAction)
    assert Backlog(Q(), action=MyAction,
                   filter=Q(module=1)).filter(function=2) == _Backlog(
                       condition=Q(),
                       filter=And(Query(module=1), Query(function=2)),
                       action=MyAction)

    def blabla():
        pass

    assert Backlog(Q(), action=MyAction,
                   filter=blabla).filter(function=1) == _Backlog(
                       condition=Q(),
                       filter=And(blabla, Query(function=1)),
                       action=MyAction)
    assert Backlog(Q(), action=MyAction, filter=Q(module=1)).filter(
        blabla, function=2) == _Backlog(condition=Q(),
                                        filter=And(Query(module=1), blabla,
                                                   Query(function=2)),
                                        action=MyAction)
def test_no_inf_recursion(mockevent):
    assert Or(And(1)) == 1
    assert Or(Or(1)) == 1
    assert And(Or(1)) == 1
    assert And(And(1)) == 1
    predicate = Q(Q(lambda ev: 1, module='wat'))
    print('predicate:', predicate)
    predicate(mockevent)
Beispiel #5
0
def test_predicate_no_inf_recursion():
    assert Or(And(1)) == 1
    assert Or(Or(1)) == 1
    assert And(Or(1)) == 1
    assert And(And(1)) == 1
    predicate = Q(Q(lambda ev: 1, module='wat'))
    print('predicate:', predicate)
    predicate({'module': 'foo'})
def test_compression():
    assert Or(Or(1, 2), And(3)) == Or(1, 2, 3)
    assert Or(Or(1, 2), 3) == Or(1, 2, 3)
    assert Or(1, Or(2, 3), 4) == Or(1, 2, 3, 4)
    assert And(1, 2, Or(3, 4)).predicates == (1, 2, Or(3, 4))

    assert repr(Or(Or(1, 2), And(3))) == repr(Or(1, 2, 3))
    assert repr(Or(Or(1, 2), 3)) == repr(Or(1, 2, 3))
    assert repr(Or(1, Or(2, 3), 4)) == repr(Or(1, 2, 3, 4))
Beispiel #7
0
def test_trace_api_expansion():
    # simple use
    with trace(function="foobar") as t:
        assert t.handler == When(Q(function="foobar"), CallPrinter)

    # "or" by expression
    with trace(module="foo", function="foobar") as t:
        assert t.handler == When(Q(module="foo", function="foobar"),
                                 CallPrinter)

    # pdb.set_trace
    with trace(function="foobar", action=Debugger) as t:
        assert str(t.handler) == str(When(Q(function="foobar"), Debugger))

    # pdb.set_trace on any hits
    with trace(module="foo", function="foobar", action=Debugger) as t:
        assert str(t.handler) == str(
            When(Q(module="foo", function="foobar"), Debugger))

    # pdb.set_trace when function is foobar, otherwise just print when module is foo
    with trace(Q(function="foobar", action=Debugger), module="foo") as t:
        assert str(t.handler) == str(
            When(And(When(Q(function="foobar"), Debugger), Q(module="foo")),
                 CallPrinter))

    # dumping variables from stack
    with trace(Q(function="foobar", action=VarsPrinter("foobar")),
               module="foo") as t:
        assert str(t.handler) == str(
            When(
                And(
                    When(Q(function="foobar"), VarsPrinter("foobar")),
                    Q(module="foo"),
                ), CallPrinter))

    with trace(Q(function="foobar", action=VarsPrinter("foobar",
                                                       "mumbojumbo")),
               module="foo") as t:
        assert str(t.handler) == str(
            When(
                And(
                    When(Q(function="foobar"),
                         VarsPrinter("foobar", "mumbojumbo")),
                    Q(module="foo"),
                ), CallPrinter))

    # multiple actions
    with trace(Q(function="foobar", actions=[VarsPrinter("foobar"), Debugger]),
               module="foo") as t:
        assert str(t.handler) == str(
            When(
                And(
                    When(Q(function="foobar"), VarsPrinter("foobar"),
                         Debugger),
                    Q(module="foo"),
                ), CallPrinter))
def test_or(mockevent):
    assert Q(module=1) | Q(module=2) == Or(Q(module=1), Q(module=2))
    assert Q(module=1) | Q(module=2) | Q(module=3) == Or(
        Q(module=1), Q(module=2), Q(module=3))

    assert (Q(module='foo') | Q(module='bar'))(mockevent) is False
    assert (Q(module='foo') | Q(module=__name__))(mockevent) is True

    assert Or(1, 2) & 3 == And(Or(1, 2), 3)
Beispiel #9
0
def test_predicate_or():
    assert Q(module=1) | Q(module=2) == Or(Q(module=1), Q(module=2))
    assert Q(module=1) | Q(module=2) | Q(module=3) == Or(
        Q(module=1), Q(module=2), Q(module=3))

    assert (Q(module=1) | Q(module=2))({'module': 3}) == False
    assert (Q(module=1) | Q(module=2))({'module': 2}) == True

    assert Or(1, 2) & 3 == And(Or(1, 2), 3)
def test_and(mockevent):
    assert And(C(1), C(2)) == And(C(1), C(2))
    assert Q(module=1) & Q(module=2) == And(Q(module=1), Q(module=2))
    assert Q(module=1) & Q(module=2) & Q(module=3) == And(
        Q(module=1), Q(module=2), Q(module=3))

    assert (Q(module=__name__) & Q(module='foo'))(mockevent) is False
    assert (Q(module=__name__) & Q(function='mockevent'))(mockevent) is True

    assert And(1, 2) | 3 == Or(And(1, 2), 3)
Beispiel #11
0
def test_predicate_and():
    assert And(C(1), C(2)) == And(C(1), C(2))
    assert Q(module=1) & Q(module=2) == And(Q(module=1), Q(module=2))
    assert Q(module=1) & Q(module=2) & Q(module=3) == And(
        Q(module=1), Q(module=2), Q(module=3))

    assert (Q(module=1) & Q(module=2))({'module': 3}) == False
    assert (Q(module=1) & Q(function=2))({'module': 1, 'function': 2}) == True

    assert And(1, 2) | 3 == Or(And(1, 2), 3)
def test_not(mockevent):
    assert Not(1).predicate == 1
    assert ~Or(1, 2) == Not(Or(1, 2))
    assert ~And(1, 2) == Not(And(1, 2))

    assert ~Not(1) == 1

    assert ~Query(module=1) | ~Query(module=2) == Not(
        And(Query(module=1), Query(module=2)))
    assert ~Query(module=1) & ~Query(module=2) == Not(
        Or(Query(module=1), Query(module=2)))

    assert ~Query(module=1) | Query(module=2) == Or(Not(Query(module=1)),
                                                    Query(module=2))
    assert ~Query(module=1) & Query(module=2) == And(Not(Query(module=1)),
                                                     Query(module=2))

    assert ~(Query(module=1) & Query(module=2)) == Not(
        And(Query(module=1), Query(module=2)))
    assert ~(Query(module=1) | Query(module=2)) == Not(
        Or(Query(module=1), Query(module=2)))

    assert repr(~Or(1, 2)) == repr(Not(Or(1, 2)))
    assert repr(~And(1, 2)) == repr(Not(And(1, 2)))

    assert repr(~Query(module=1) | ~Query(module=2)) == repr(
        Not(And(Query(module=1), Query(module=2))))
    assert repr(~Query(module=1) & ~Query(module=2)) == repr(
        Not(Or(Query(module=1), Query(module=2))))

    assert repr(~(Query(module=1) & Query(module=2))) == repr(
        Not(And(Query(module=1), Query(module=2))))
    assert repr(~(Query(module=1) | Query(module=2))) == repr(
        Not(Or(Query(module=1), Query(module=2))))

    assert Not(Q(module=__name__))(mockevent) is False
Beispiel #13
0
def test_predicate_not():
    assert Not(1).predicate == 1
    assert ~Or(1, 2) == Not(Or(1, 2))
    assert ~And(1, 2) == Not(And(1, 2))

    assert ~Not(1) == 1

    assert ~Query(module=1) | ~Query(module=2) == Not(
        And(Query(module=1), Query(module=2)))
    assert ~Query(module=1) & ~Query(module=2) == Not(
        Or(Query(module=1), Query(module=2)))

    assert ~Query(module=1) | Query(module=2) == Or(Not(Query(module=1)),
                                                    Query(module=2))
    assert ~Query(module=1) & Query(module=2) == And(Not(Query(module=1)),
                                                     Query(module=2))

    assert ~(Query(module=1) & Query(module=2)) == Not(
        And(Query(module=1), Query(module=2)))
    assert ~(Query(module=1) | Query(module=2)) == Not(
        Or(Query(module=1), Query(module=2)))

    assert repr(~Or(1, 2)) == repr(Not(Or(1, 2)))
    assert repr(~And(1, 2)) == repr(Not(And(1, 2)))

    assert repr(~Query(module=1) | ~Query(module=2)) == repr(
        Not(And(Query(module=1), Query(module=2))))
    assert repr(~Query(module=1) & ~Query(module=2)) == repr(
        Not(Or(Query(module=1), Query(module=2))))

    assert repr(~(Query(module=1) & Query(module=2))) == repr(
        Not(And(Query(module=1), Query(module=2))))
    assert repr(~(Query(module=1) | Query(module=2))) == repr(
        Not(Or(Query(module=1), Query(module=2))))

    assert Not(Q(module=1))({'module': 1}) == False
def test_and_or_kwargs():
    assert And(1, function=2) == And(1, Query(function=2))
    assert Or(1, function=2) == Or(1, Query(function=2))