def test_incomplete_iterator(self):
        # SETUP
        code = """\
def gen(n):
    state = 'Starting'
    try:
        for i in range(n):
            yield i
    finally:
        state = 'Done'


g = gen(999)
x = next(g)
"""

        expected_report = """\
n = 999
state = 'Starting'

i = 0
yield 0 GeneratorExit

state = 'Done'



x = 0
"""
        tracer = CodeTracer()

        # EXEC
        report = tracer.trace_code(code)

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_set_attribute_item(self):
        # SETUP
        code = """\
class Shelf(object):
    pass

shelf = Shelf()
shelf.counts = {}
shelf.counts[2] = 3
"""
        expected_report = """\




shelf.counts = {}
shelf.counts[2] = 3 """
        tracer = CodeTracer()

        # EXEC
        report = tracer.trace_code(code)

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_set_attribute_attribute(self):
        # SETUP
        code = """\
class foo(object):
    pass

f = foo()
f.child = foo()
f.child.name = 'bob'
"""
        expected_report = """\





f.child.name = 'bob' """
        tracer = CodeTracer()

        # EXEC
        report = tracer.trace_code(code)

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_function_called_twice(self):
        # SETUP
        code = """\
def foo():
    x = 2
    return x + 10

n = foo()
r = foo()
"""
        expected_report = """\
          |
x = 2     | x = 2
return 12 | return 12

n = 12
r = 12 """
        tracer = CodeTracer()

        # EXEC
        report = tracer.trace_code(code)

        # VERIFY
        self.assertReportEqual(expected_report, report)
Beispiel #5
0
    def test_mutable(self):
        # SETUP
        code = """\
a = [1, 2, [3, 4]]
a[0] = 9
a[2][1] = 8
i = 0
a[i] = 10
b = a
a[0] += 1
"""
        expected_report = """\
a = [1, 2, [3, 4]] 
a[0] = 9 
a[2][1] = 8 
i = 0 
a[?] = 10 
b = [10, 2, [3, 8]] 
a[0] = 11 """
        # EXEC
        report = CodeTracer().trace_code(code)

        # VERIFY        
        self.assertMultiLineEqual(expected_report, report)
Beispiel #6
0
    def test_print(self):
        # SETUP
        code = """\
s = 'x'
print(s)
"""
        expected_report_python2 = """\
s = 'x' 
print 'x' 
"""
        expected_report_python3 = """\
s = 'x' 
print('x') 
"""
        expected_report = (expected_report_python3 
                           if version_info.major >= 3
                           else expected_report_python2)
        tracer = CodeTracer()
        
        # EXEC
        report = tracer.trace_code(code)

        # VERIFY
        self.assertEqual(expected_report.splitlines(), report.splitlines())
Beispiel #7
0
    def test_slice(self):
        # SETUP
        code = """\
a = [1, 2, 3, 4, 5]
a[1:4] = [20, 30]
b = a
a[2:] = [300]
b = a
a[:2] = [2000]
b = a
"""
        expected_report = """\
a = [1, 2, 3, 4, 5] 
a[1:4] = [20, 30] 
b = [1, 20, 30, 5] 
a[2:] = [300] 
b = [1, 20, 300] 
a[:2] = [2000] 
b = [2000, 300] """
        # EXEC
        report = CodeTracer().trace_code(code)

        # VERIFY        
        self.assertMultiLineEqual(expected_report, report)
Beispiel #8
0
    def test_print_in_function(self):
        # SETUP
        code = """\
from __future__ import print_function
def main():
    s = 'Hello, World!'
    print(s)

main()
"""
        expected_report = """\


s = 'Hello, World!'
print('Hello, World!')

"""
        tracer = CodeTracer()

        # EXEC
        report = tracer.trace_code(code)

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_slice_magic(self):
        """ All augmented assignments on slices, possible with mocks. """
        # SETUP
        code = """\
from mock import MagicMock


class Foo(MagicMock):
    def __repr__(self):
        return 'Foo()'

foo = Foo()
foo[1] = 3
foo[1:10] = 3
foo[1:10:2] = 3
foo[...] = 3
foo[1, 2:3] = 3
foo[1:10] += 3
foo[1:10] -= 3
foo[1:10] *= 3
foo[1:10] /= 3
foo[1:10] //= 3
foo[1:10] %= 3
foo[1:10] **= 3
foo[1:10] >>= 3
foo[1:10] <<= 3
foo[1:10] &= 3
foo[1:10] ^= 3
foo[1:10] |= 3
"""
        expected_report = """\







foo = Foo()
foo[1] = 3
foo[1:10] = 3
foo[1:10:2] = 3
foo[...] = 3
foo[1, 2:3] = 3
foo[1:10] += 3
foo[1:10] -= 3
foo[1:10] *= 3
foo[1:10] /= 3
foo[1:10] //= 3
foo[1:10] %= 3
foo[1:10] **= 3
foo[1:10] >>= 3
foo[1:10] <<= 3
foo[1:10] &= 3
foo[1:10] ^= 3
foo[1:10] |= 3 """
        # EXEC
        report = CodeTracer().trace_code(code)

        # VERIFY
        self.assertReportEqual(expected_report, report)