def test_format_stderr(self):
        # SETUP
        expected_report = "sys.stderr.write('abc') | x = None"

        # EXEC
        builder = ReportBuilder()
        builder.add_output('abc', 1, target_name='sys.stderr')
        builder.assign(name='x', value=None, line_number=1)

        # VERIFY
        self.assertReportEqual(expected_report, builder.report())
    def test_multiple_messages(self):
        # SETUP
        expected_report = """\
x = 1 | y = 2 """

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='x', value=1, line_number=1)
        builder.assign(name='y', value=2, line_number=1)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_assign_object_without_repr(self):
        # SETUP
        expected_report = ''

        class ClassWithoutRepr(object):
            pass

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='x', value=ClassWithoutRepr(), line_number=2)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_assign_function(self):
        # SETUP
        expected_report = ''

        def f(n):
            return n + 1

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='f', value=f, line_number=2)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_assign_object_with_repr_exception(self):
        # SETUP
        expected_report = ''

        class BadReprClass(object):
            def __repr__(self):
                raise NotImplementedError()

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='m', value=BadReprClass(), line_number=1)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_multiple_lines(self):
        # SETUP
        expected_report = """\
a = 3

b = 'xyz' """

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='a', value=3, line_number=1)
        builder.assign(name='b', value="xyz", line_number=3)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_message_limit(self):
        # SETUP
        expected_report = """\
a = 10
b = 20
"""

        # EXEC
        builder = ReportBuilder(message_limit=4)
        builder.assign('a', 10, 1)
        builder.assign('b', 20, 2)
        with self.assertRaisesRegex(RuntimeError, r'message limit exceeded'):
            builder.assign('c', 30, 3)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_assign_object_with_multiline_repr(self):
        # SETUP
        expected_report = 'm = MultilineClass(1, 2) '

        class MultilineClass(object):
            def __init__(self, x, y):
                self.x = x
                self.y = y

            def __repr__(self):
                return "MultilineClass(%r,\n%r)" % (self.x, self.y)

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='m', value=MultilineClass(1, 2), line_number=1)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
Example #9
0
    def test_decorated_frame(self):
        # SETUP
        expected_report = """\
i = 1 | i = 2
n = 2 | """

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='i', value=0, line_number=2)
        frame1 = builder.start_frame(3, 4, is_decorated=True)
        frame1.assign(name='i', value=1, line_number=3)
        frame2 = builder.start_frame(3, 4, is_decorated=True)
        frame2.assign(name='i', value=2, line_number=3)
        frame1.assign(name='n', value=2, line_number=4)
        builder.assign(name='i', value=20, line_number=5)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_assign(self):
        # SETUP
        expected_value = 5
        expected_report = """\

x = 5
"""

        # EXEC
        builder = ReportBuilder()
        value = builder.assign(name='x', value=expected_value, line_number=2)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
        self.assertEqual(expected_value, value)
    def test_nested_blocks(self):
        # SETUP
        expected_report = """\
x = 'first' | x = 'second'
            | y = 1 | y = 2 """

        # EXEC
        builder = ReportBuilder()
        builder.start_block(1, 2)
        builder.assign(name='x', value='first', line_number=1)
        builder.start_block(1, 2)
        builder.assign(name='x', value='second', line_number=1)
        builder.start_block(2, 2)
        builder.assign(name='y', value=1, line_number=2)
        builder.start_block(2, 2)
        builder.assign(name='y', value=2, line_number=2)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_multiple_visits(self):
        # SETUP
        expected_report = """\
x = 'first'    | x = 'second'
y = 'continue' | """

        # EXEC
        builder = ReportBuilder()
        builder.start_block(1, 2)
        builder.assign(name='x', value='first', line_number=1)
        builder.assign(name='y', value='continue', line_number=2)
        builder.start_block(1, 2)
        builder.assign(name='x', value='second', line_number=1)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)
    def test_separate_scopes(self):
        # SETUP
        expected_report = """\
x = 'child' | x = 'child again'

y = 'main' """

        # EXEC
        builder = ReportBuilder()
        builder.assign(name='y', value='main', line_number=3)
        builder.start_block(1, 1)
        builder.assign(name='x', value='child', line_number=1)
        builder.start_block(1, 1)
        builder.assign(name='x', value='child again', line_number=1)
        report = builder.report()

        # VERIFY
        self.assertReportEqual(expected_report, report)