PySnooper/tests/test_pysnooper.py

138 lines
3.1 KiB
Python
Raw Normal View History

2019-04-19 22:20:27 +00:00
# Copyright 2019 Ram Rachum.
# This program is distributed under the MIT license.
import io
import re
import abc
from python_toolbox import caching
from python_toolbox import sys_tools
import pysnooper
2019-04-21 13:53:18 +00:00
from .utils import (assert_output, VariableEntry, CallEntry, LineEntry,
ReturnEntry, OpcodeEntry, ExceptionEntry)
2019-04-19 22:20:27 +00:00
2019-04-21 13:53:18 +00:00
def test_string_io():
2019-04-19 22:20:27 +00:00
string_io = io.StringIO()
@pysnooper.snoop(string_io)
def my_function(foo):
x = 7
y = 8
return y + x
result = my_function('baba')
assert result == 15
output = string_io.getvalue()
2019-04-21 13:53:18 +00:00
assert_output(
2019-04-19 22:20:27 +00:00
output,
(
2019-04-21 13:53:18 +00:00
VariableEntry('foo', value_regex="u?'baba'"),
2019-04-19 22:20:27 +00:00
CallEntry(),
LineEntry('x = 7'),
VariableEntry('x', '7'),
LineEntry('y = 8'),
VariableEntry('y', '8'),
LineEntry('return y + x'),
ReturnEntry('return y + x'),
)
)
def test_variables():
2019-04-21 17:54:55 +00:00
class Foo(object):
2019-04-19 22:20:27 +00:00
def __init__(self):
self.x = 2
def square(self):
self.x **= 2
@pysnooper.snoop(variables=('foo.x', 're'))
def my_function():
foo = Foo()
for i in range(2):
foo.square()
with sys_tools.OutputCapturer(stdout=False,
stderr=True) as output_capturer:
result = my_function()
assert result is None
output = output_capturer.string_io.getvalue()
2019-04-21 13:53:18 +00:00
assert_output(
2019-04-19 22:20:27 +00:00
output,
(
2019-04-21 13:53:18 +00:00
VariableEntry(),
VariableEntry(),
2019-04-19 22:20:27 +00:00
CallEntry(),
LineEntry('foo = Foo()'),
2019-04-21 13:53:18 +00:00
VariableEntry(),
VariableEntry(),
2019-04-19 22:20:27 +00:00
LineEntry(),
VariableEntry('i', '0'),
LineEntry(),
VariableEntry('foo.x', '4'),
LineEntry(),
VariableEntry('i', '1'),
LineEntry(),
VariableEntry('foo.x', '16'),
LineEntry(),
ReturnEntry(),
)
2019-04-21 13:53:18 +00:00
)
def test_depth():
string_io = io.StringIO()
def f4(x4):
result4 = x4 * 2
return result4
def f3(x3):
result3 = f4(x3)
return result3
def f2(x2):
result2 = f3(x2)
return result2
@pysnooper.snoop(string_io, depth=3)
def f1(x1):
result1 = f2(x1)
return result1
result = f1(10)
assert result == 20
output = string_io.getvalue()
assert_output(
output,
(
VariableEntry(),
VariableEntry(),
CallEntry(),
LineEntry(),
VariableEntry(),
VariableEntry(),
CallEntry(),
LineEntry(),
VariableEntry(),
VariableEntry(),
CallEntry(),
LineEntry(),
VariableEntry(),
LineEntry(),
ReturnEntry(),
VariableEntry(),
LineEntry(),
ReturnEntry(),
VariableEntry(),
LineEntry(),
ReturnEntry(),
)
)