Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_predicate_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)
called = [[], []]
predicate = (
Q(module=__name__, action=lambda ev: called[0].append(ev)) |
Q(module='foo', action=lambda ev: called[1].append(ev))
)
assert predicate(mockevent) == True
assert called == [[mockevent], []]
assert predicate(mockevent) == True
assert called == [[mockevent, mockevent], []]
called = [[], []]
predicate = (
Q(module=__name__, action=lambda ev: called[0].append(ev)) &
Q(function='mockevent', action=lambda ev: called[1].append(ev))
)
assert predicate(mockevent) == True
assert called == [[mockevent], [mockevent]]
def run():
output = StringIO()
with t.trace(Q(
~Q(module_contains='pytest'),
~Q(module_contains='hunter'),
~Q(filename=''),
~Q(filename=''),
stdlib=False,
action=CodePrinter(stream=output)
)):
_bulky_func_that_use_stdlib()
return output
def test_predicate_str_repr():
assert repr(Q(module='a', function='b')).endswith("predicates.Query: query_eq=(('function', 'b'), ('module', 'a'))>")
assert str(Q(module='a', function='b')) == "Query(function='b', module='a')"
assert repr(Q(module='a')).endswith("predicates.Query: query_eq=(('module', 'a'),)>")
assert str(Q(module='a')) == "Query(module='a')"
assert "predicates.When: condition=, actions=('foo',)>" in repr(Q(module='a', action=C('foo')))
assert str(Q(module='a', action=C('foo'))) == "When(Query(module='a'), 'foo')"
assert "predicates.Not: predicate=>" in repr(~Q(module='a'))
assert str(~Q(module='a')) == "Not(Query(module='a'))"
assert "predicates.Or: predicates=(, " in repr(Q(module='a') | Q(module='b'))
assert repr(Q(module='a') | Q(module='b')).endswith("predicates.Query: query_eq=(('module', 'b'),)>)>")
assert str(Q(module='a') | Q(module='b')) == "Or(Query(module='a'), Query(module='b'))"
def test_predicate_q_deduplicate_codeprinter_cls_inverted():
out = repr(Q(CodePrinter(), action=CallPrinter))
assert out.startswith('CodePrinter(')
def test_predicate_q_nest_1():
assert repr(Q(Q(module='a'))).endswith("predicates.Query: query_eq=(('module', 'a'),)>")
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