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))
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)
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))
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)
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)
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
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))