Ejemplo n.º 1
0
 def test_finalize(self):
     output = []
     recorder = ListRecorder()
     recorder.prepare(DummyRecord)
     for x in range(10):
         recorder.finalize()
     self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 2
0
 def test_record(self):
     record = DummyRecord(5, 'pikos', 'apikos')
     output = [(5, 'pikos', 'apikos')]
     recorder = ListRecorder()
     recorder.prepare(DummyRecord)
     recorder.record(record)
     self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 3
0
 def test_prepare(self):
     fields = ('one', 'two','three')
     output = []
     recorder = ListRecorder()
     recorder.prepare(fields)
     self.assertSequenceEqual(recorder.records, output)
     recorder.prepare(fields)
Ejemplo n.º 4
0
 def test_record(self):
     fields = ('one', 'two','three')
     values = (5, 'pikos','apikos')
     output = [(5, 'pikos','apikos')]
     recorder = ListRecorder()
     recorder.prepare(fields)
     recorder.record(values)
     self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 5
0
 def test_finalize(self):
     fields = ('one', 'two','three')
     output = []
     recorder = ListRecorder()
     recorder.prepare(fields)
     for x in range(10):
         recorder.finalize()
     self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 6
0
 def test_filter(self):
     fields = ('one', 'two','three')
     values = [(5, 'pikos','apikos'), (12, 'emilios','milo')]
     output = [(12, 'emilios','milo')]
     def not_pikos(values):
         return not 'pikos' in values
     recorder = ListRecorder(filter_=not_pikos)
     recorder.prepare(fields)
     for record in values:
         recorder.record(record)
     self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 7
0
    def test_filter(self):
        records = [
            DummyRecord(5, 'pikos', 'apikos'),
            DummyRecord(12, 'emilios', 'milo')]
        output = [(12, 'emilios', 'milo')]

        def not_pikos(values):
            return not ('pikos' in values)

        recorder = ListRecorder(filter_=not_pikos)
        recorder.prepare(DummyRecord)
        for record in records:
            recorder.record(record)
        self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 8
0
    def test_function(self):
        recorder = ListRecorder()
        logger = FunctionMonitor(recorder)

        @logger.attach
        def gcd(x, y):
            while x > 0:
                x, y = y % x, x
            return y

        def boo():
            pass

        boo()
        result = gcd(12, 3)
        boo()
        self.assertEqual(result, 3)
        records = recorder.records
        # check that the records make sense
        self.assertFieldValueExist(records, ('function', 'type'),
                                   ('gcd', 'call'),
                                   times=1)
        self.assertFieldValueExist(records, ('function', 'type'),
                                   ('gcd', 'return'),
                                   times=1)
        self.assertFieldValueNotExist(records, ('function', ), ('boo', ))
        # The wrapper of the function should not be logged
        self.assertFieldValueNotExist(records, ('function', ), ('wrapper', ))
Ejemplo n.º 9
0
    def test_generator(self):
        recorder = ListRecorder()
        logger = FunctionMonitor(recorder)
        output = (0, 1, 1, 2, 3, 5, 8, 13, 21, 34)

        @logger.attach
        def fibonacci(items):
            x, y = 0, 1
            for i in range(items):
                yield x
                x, y = y, x + y

        def boo():
            pass

        boo()
        result = [value for value in fibonacci(10)]
        boo()
        self.assertSequenceEqual(result, output)
        records = recorder.records
        # check that the records make sense
        # The function should be called 10 + 1 times
        self.assertFieldValueExist(records, ('function', 'type'),
                                   ('fibonacci', 'call'),
                                   times=11)
        self.assertFieldValueExist(records, ('function', 'type'),
                                   ('fibonacci', 'return'),
                                   times=11)
        self.assertFieldValueNotExist(records, ('function', ), ('boo', ))
        # The wrapper of the generator should not be logged
        self.assertFieldValueNotExist(records, ('function', ), ('wrapper', ))
Ejemplo n.º 10
0
    def test_issue2(self):
        """ Test for issue #2.

        The issues is reported in `https://github.com/sjagoe/pikos/issues/2`_

        """
        recorder = ListRecorder()
        logger = LineMonitor(recorder)

        FOO = """
def foo():
    a = []
    for i in range(20):
        a.append(i+sum(a))

foo()
"""

        @logger.attach
        def boo():
            code = compile(FOO, 'foo', 'exec')
            exec code in globals(), {}

        try:
            boo()
        except TypeError:
            msg = ("Issue #2 -- line monitor fails when exec is used"
                   " on code compiled from a string -- exists.")
            self.fail(msg)
Ejemplo n.º 11
0
 def test_prepare(self):
     fields = ('one', 'two', 'three')
     output = []
     recorder = ListRecorder()
     recorder.prepare(fields)
     self.assertSequenceEqual(recorder.records, output)
     recorder.prepare(fields)
Ejemplo n.º 12
0
    def test_focus_on_recursive(self):
        def gcd(x, y):
            foo()
            return x if y == 0 else gcd(y, (x % y))

        def boo():
            pass

        def foo():
            pass

        recorder = ListRecorder()
        logger = FocusedLineMonitor(recorder, functions=[gcd])

        @logger.attach
        def container(x, y):
            boo()
            result = gcd(x, y)
            boo()
            foo()
            return result

        boo()
        result = container(12, 3)
        boo()
        self.assertEqual(result, 3)
        records = recorder.records
        expected = [
            LineRecord(index=0,
                       function='gcd',
                       lineNo=136,
                       line='            foo()',
                       filename=self.filename),
            LineRecord(index=1,
                       function='gcd',
                       lineNo=137,
                       line='            return x if y == 0 else '
                       'gcd(y, (x % y))',
                       filename=self.filename),
            LineRecord(index=2,
                       function='gcd',
                       lineNo=136,
                       line='            foo()',
                       filename=self.filename),
            LineRecord(index=3,
                       function='gcd',
                       lineNo=137,
                       line='            return x if y == 0 else '
                       'gcd(y, (x % y))',
                       filename=self.filename)
        ]
        self.assertEqual(records, expected)
Ejemplo n.º 13
0
 def test_finalize(self):
     fields = ('one', 'two', 'three')
     output = []
     recorder = ListRecorder()
     recorder.prepare(fields)
     for x in range(10):
         recorder.finalize()
     self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 14
0
 def test_record(self):
     fields = ('one', 'two', 'three')
     values = (5, 'pikos', 'apikos')
     output = [(5, 'pikos', 'apikos')]
     recorder = ListRecorder()
     recorder.prepare(fields)
     recorder.record(values)
     self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 15
0
    def test_filter(self):
        fields = ('one', 'two', 'three')
        values = [(5, 'pikos', 'apikos'), (12, 'emilios', 'milo')]
        output = [(12, 'emilios', 'milo')]

        def not_pikos(values):
            return not 'pikos' in values

        recorder = ListRecorder(filter_=not_pikos)
        recorder.prepare(fields)
        for record in values:
            recorder.record(record)
        self.assertSequenceEqual(recorder.records, output)
Ejemplo n.º 16
0
    def test_recursive(self):
        recorder = ListRecorder()
        logger = FunctionMemoryMonitor(recorder)

        @logger.attach
        def gcd(x, y):
            return x if y == 0 else gcd(y, (x % y))

        def boo():
            return gcd(7, 12)

        result = boo()
        self.assertEqual(result, 1)
        records = recorder.records
        # check that the records make sense
        # The function should be called 6 times
        self.assertFieldValueExist(records, ('function', 'type'),
                                   ('gcd', 'call'), times=6)
        self.assertFieldValueExist(records, ('function', 'type'),
                                   ('gcd', 'return'), times=6)
        self.assertFieldValueNotExist(records, ('function',), ('boo',))
Ejemplo n.º 17
0
    def test_focus_on_functions(self):
        def gcd(x, y):
            while x > 0:
                x, y = internal(x, y)
            return y

        def internal(x, y):
            return y % x, x

        def boo():
            pass

        def foo():
            boo()
            boo()

        recorder = ListRecorder()
        logger = FocusedLineMonitor(recorder, functions=[gcd, foo])

        @logger.attach
        def container(x, y):
            boo()
            result = gcd(x, y)
            boo()
            foo()
            return result

        boo()
        result = container(12, 3)
        boo()
        self.assertEqual(result, 3)
        records = recorder.records
        expected = [
            LineRecord(index=0,
                       function='gcd',
                       lineNo=77,
                       line='            while x > 0:',
                       filename=self.filename),
            LineRecord(index=1,
                       function='gcd',
                       lineNo=78,
                       line='                x, y = internal(x, y)',
                       filename=self.filename),
            LineRecord(index=2,
                       function='gcd',
                       lineNo=77,
                       line='            while x > 0:',
                       filename=self.filename),
            LineRecord(index=3,
                       function='gcd',
                       lineNo=78,
                       line='                x, y = internal(x, y)',
                       filename=self.filename),
            LineRecord(index=4,
                       function='gcd',
                       lineNo=77,
                       line='            while x > 0:',
                       filename=self.filename),
            LineRecord(index=5,
                       function='gcd',
                       lineNo=79,
                       line='            return y',
                       filename=self.filename),
            LineRecord(index=6,
                       function='foo',
                       lineNo=88,
                       line='            boo()',
                       filename=self.filename),
            LineRecord(index=7,
                       function='foo',
                       lineNo=89,
                       line='            boo()',
                       filename=self.filename)
        ]
        self.assertEqual(records, expected)
Ejemplo n.º 18
0
    def test_focus_on_recursive(self):
        def gcd(x, y):
            foo()
            return x if y == 0 else gcd(y, (x % y))

        def boo():
            pass

        def foo():
            pass

        recorder = ListRecorder()
        logger = FocusedFunctionMonitor(recorder, functions=[gcd])

        @logger.attach
        def container(x, y):
            boo()
            result = gcd(x, y)
            boo()
            foo()
            return result

        boo()
        result = container(12, 3)
        boo()
        self.assertEqual(result, 3)
        records = recorder.records
        expected = [
            FunctionRecord(index=0,
                           type='call',
                           function='gcd',
                           lineNo=153,
                           filename=self.filename),
            FunctionRecord(index=1,
                           type='call',
                           function='foo',
                           lineNo=160,
                           filename=self.filename),
            FunctionRecord(index=2,
                           type='return',
                           function='foo',
                           lineNo=161,
                           filename=self.filename),
            FunctionRecord(index=3,
                           type='call',
                           function='gcd',
                           lineNo=153,
                           filename=self.filename),
            FunctionRecord(index=4,
                           type='call',
                           function='foo',
                           lineNo=160,
                           filename=self.filename),
            FunctionRecord(index=5,
                           type='return',
                           function='foo',
                           lineNo=161,
                           filename=self.filename),
            FunctionRecord(index=6,
                           type='return',
                           function='gcd',
                           lineNo=155,
                           filename=self.filename),
            FunctionRecord(index=7,
                           type='return',
                           function='gcd',
                           lineNo=155,
                           filename=self.filename),
        ]
        self.assertEqual(records, expected)
        self.assertEqual(logger._code_trackers, {})
Ejemplo n.º 19
0
 def test_prepare(self):
     output = []
     recorder = ListRecorder()
     recorder.prepare(DummyRecord)
     self.assertSequenceEqual(recorder.records, output)
     recorder.prepare(DummyRecord)
Ejemplo n.º 20
0
    def test_focus_on_function(self):
        def gcd(x, y):
            while x > 0:
                x, y = internal(x, y)
            return y

        def internal(x, y):
            boo()
            return y % x, x

        def boo():
            pass

        recorder = ListRecorder()
        logger = FocusedFunctionMonitor(recorder, functions=[gcd])

        @logger.attach
        def container(x, y):
            boo()
            result = gcd(x, y)
            boo()
            return result

        boo()
        result = container(12, 3)
        boo()
        self.assertEqual(result, 3)
        records = recorder.records
        expected = [
            FunctionRecord(index=0,
                           type='call',
                           function='gcd',
                           lineNo=27,
                           filename=self.filename),
            FunctionRecord(index=1,
                           type='call',
                           function='internal',
                           lineNo=32,
                           filename=self.filename),
            FunctionRecord(index=2,
                           type='call',
                           function='boo',
                           lineNo=36,
                           filename=self.filename),
            FunctionRecord(index=3,
                           type='return',
                           function='boo',
                           lineNo=37,
                           filename=self.filename),
            FunctionRecord(index=4,
                           type='return',
                           function='internal',
                           lineNo=34,
                           filename=self.filename),
            FunctionRecord(index=5,
                           type='call',
                           function='internal',
                           lineNo=32,
                           filename=self.filename),
            FunctionRecord(index=6,
                           type='call',
                           function='boo',
                           lineNo=36,
                           filename=self.filename),
            FunctionRecord(index=7,
                           type='return',
                           function='boo',
                           lineNo=37,
                           filename=self.filename),
            FunctionRecord(index=8,
                           type='return',
                           function='internal',
                           lineNo=34,
                           filename=self.filename),
            FunctionRecord(index=9,
                           type='return',
                           function='gcd',
                           lineNo=30,
                           filename=self.filename)
        ]
        self.assertEqual(records, expected)
        self.assertEqual(logger._code_trackers, {})