1 #!/usr/bin/env python 2 # Copyright 2016 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 import decorators 6 import logging 7 import unittest 8 9 from trace_test import TraceTest 10 #from .trace_test import TraceTest 11 12 def generator(): 13 yield 1 14 yield 2 15 16 class DecoratorTests(unittest.TestCase): 17 def test_tracing_object_fails(self): 18 self.assertRaises(Exception, lambda: decorators.trace(1)) 19 self.assertRaises(Exception, lambda: decorators.trace("")) 20 self.assertRaises(Exception, lambda: decorators.trace([])) 21 22 def test_tracing_generators_fail(self): 23 self.assertRaises(Exception, lambda: decorators.trace(generator)) 24 25 class ClassToTest(object): 26 @decorators.traced 27 def method1(self): 28 return 1 29 30 @decorators.traced 31 def method2(self): 32 return 1 33 34 @decorators.traced 35 def traced_func(): 36 return 1 37 38 class DecoratorTests(TraceTest): 39 def _get_decorated_method_name(self, f): 40 res = self.go(f) 41 events = res.findEventsOnThread(res.findThreadIds()[0]) 42 43 # Sanity checks. 44 self.assertEquals(2, len(events)) 45 self.assertEquals(events[0]["name"], events[1]["name"]) 46 return events[1]["name"] 47 48 49 def test_func_names_work(self): 50 self.assertEquals('__main__.traced_func', 51 self._get_decorated_method_name(traced_func)) 52 53 def test_method_names_work(self): 54 ctt = ClassToTest() 55 self.assertEquals('ClassToTest.method1', 56 self._get_decorated_method_name(ctt.method1)) 57 self.assertEquals('ClassToTest.method2', 58 self._get_decorated_method_name(ctt.method2)) 59 60 if __name__ == '__main__': 61 logging.getLogger().setLevel(logging.DEBUG) 62 unittest.main(verbosity=2) 63