1# Copyright 2012 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4import unittest
5
6from telemetry.testing import simple_mock
7
8_ = simple_mock.DONT_CARE
9
10# pylint: disable=no-member
11class SimpleMockUnitTest(unittest.TestCase):
12  def testBasic(self):
13    mock = simple_mock.MockObject()
14    mock.ExpectCall('foo')
15
16    mock.foo()
17
18  def testReturn(self):
19    mock = simple_mock.MockObject()
20    mock.ExpectCall('foo').WillReturn(7)
21
22    ret = mock.foo()
23    self.assertEquals(ret, 7)
24
25  def testArgs(self):
26    mock = simple_mock.MockObject()
27    mock.ExpectCall('foo').WithArgs(3, 4)
28
29    mock.foo(3, 4)
30
31  def testArgs2(self):
32    mock = simple_mock.MockObject()
33    mock.ExpectCall('foo', 3, 4)
34
35    mock.foo(3, 4)
36
37  def testArgsMismatch(self):
38    mock = simple_mock.MockObject()
39    mock.ExpectCall('foo').WithArgs(3, 4)
40
41    self.assertRaises(Exception,
42                      lambda: mock.foo(4, 4))
43
44
45  def testArgsDontCare(self):
46    mock = simple_mock.MockObject()
47    mock.ExpectCall('foo').WithArgs(_, 4)
48
49    mock.foo(4, 4)
50
51  def testOnCall(self):
52    mock = simple_mock.MockObject()
53
54    handler_called = []
55    def Handler(arg0):
56      assert arg0 == 7
57      handler_called.append(True)
58    mock.ExpectCall('baz', 7).WhenCalled(Handler)
59
60    mock.baz(7)
61    self.assertTrue(len(handler_called) > 0)
62
63
64  def testSubObject(self):
65    mock = simple_mock.MockObject()
66    mock.bar = simple_mock.MockObject(mock)
67
68    mock.ExpectCall('foo').WithArgs(_, 4)
69    mock.bar.ExpectCall('baz')
70
71    mock.foo(0, 4)
72    mock.bar.baz()
73
74  def testSubObjectMismatch(self):
75    mock = simple_mock.MockObject()
76    mock.bar = simple_mock.MockObject(mock)
77
78    mock.ExpectCall('foo').WithArgs(_, 4)
79    mock.bar.ExpectCall('baz')
80
81    self.assertRaises(
82      Exception,
83      lambda: mock.bar.baz()) # pylint: disable=unnecessary-lambda
84