Index: build/android/pylib/utils/decorators_test.py |
diff --git a/build/android/pylib/utils/decorators_test.py b/build/android/pylib/utils/decorators_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..d31db9c9bb2db98a2b4cf8e82c6f83b3d9959a90 |
--- /dev/null |
+++ b/build/android/pylib/utils/decorators_test.py |
@@ -0,0 +1,104 @@ |
+#!/usr/bin/python |
+# Copyright 2017 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Unit tests for decorators.py.""" |
+ |
+import unittest |
+ |
+from pylib.utils import decorators |
+ |
+ |
+class NoRaiseExceptionDecoratorTest(unittest.TestCase): |
+ |
+ def testFunctionDoesNotRaiseException(self): |
+ """Tests that the |NoRaiseException| decorator catches exception.""" |
+ |
+ @decorators.NoRaiseException() |
+ def raiseException(): |
+ raise Exception() |
+ |
+ try: |
+ raiseException() |
+ except Exception: # pylint: disable=broad-except |
+ self.fail('Exception was not caught by |NoRaiseException| decorator') |
+ |
+ def testFunctionReturnsCorrectValues(self): |
+ """Tests that the |NoRaiseException| decorator returns correct values.""" |
+ |
+ @decorators.NoRaiseException(default_return_value=111) |
+ def raiseException(): |
+ raise Exception() |
+ |
+ @decorators.NoRaiseException(default_return_value=111) |
+ def doesNotRaiseException(): |
+ return 999 |
+ |
+ self.assertEquals(raiseException(), 111) |
+ self.assertEquals(doesNotRaiseException(), 999) |
+ |
+ |
+class MemoizeDecoratorTest(unittest.TestCase): |
+ |
+ def testFunctionExceptionNotMemoized(self): |
+ """Tests that |Memoize| decorator does not cache exception results.""" |
+ |
+ class ExceptionType1(Exception): |
+ pass |
+ |
+ class ExceptionType2(Exception): |
+ pass |
+ |
+ @decorators.Memoize |
+ def raiseExceptions(): |
+ if raiseExceptions.count == 0: |
+ raiseExceptions.count += 1 |
+ raise ExceptionType1() |
+ |
+ if raiseExceptions.count == 1: |
+ raise ExceptionType2() |
+ raiseExceptions.count = 0 |
+ |
+ with self.assertRaises(ExceptionType1): |
+ raiseExceptions() |
+ with self.assertRaises(ExceptionType2): |
+ raiseExceptions() |
+ |
+ def testFunctionResultMemoized(self): |
+ """Tests that |Memoize| decorator caches results.""" |
+ |
+ @decorators.Memoize |
+ def memoized(): |
+ memoized.count += 1 |
+ return memoized.count |
+ memoized.count = 0 |
+ |
+ def notMemoized(): |
+ notMemoized.count += 1 |
+ return notMemoized.count |
+ notMemoized.count = 0 |
+ |
+ self.assertEquals(memoized(), 1) |
+ self.assertEquals(memoized(), 1) |
+ self.assertEquals(memoized(), 1) |
+ |
+ self.assertEquals(notMemoized(), 1) |
+ self.assertEquals(notMemoized(), 2) |
+ self.assertEquals(notMemoized(), 3) |
+ |
+ def testFunctionMemoizedBasedOnArgs(self): |
+ """Tests that |Memoize| caches results based on args and kwargs.""" |
+ |
+ @decorators.Memoize |
+ def returnValueBasedOnArgsKwargs(a, k=0): |
+ return a + k |
+ |
+ self.assertEquals(returnValueBasedOnArgsKwargs(1, 1), 2) |
+ self.assertEquals(returnValueBasedOnArgsKwargs(1, 2), 3) |
+ self.assertEquals(returnValueBasedOnArgsKwargs(2, 1), 3) |
+ self.assertEquals(returnValueBasedOnArgsKwargs(3, 3), 6) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main(verbosity=2) |