146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)from telemetry.unittest import simple_mock
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_ = simple_mock.DONT_CARE
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SimpleMockUnitTest(unittest.TestCase):
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testBasic(self):
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo')
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.foo()
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testReturn(self):
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo').WillReturn(7)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ret = mock.foo()
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEquals(ret, 7)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testArgs(self):
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo').WithArgs(3, 4)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.foo(3, 4)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testArgs2(self):
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo', 3, 4)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.foo(3, 4)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testArgsMismatch(self):
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo').WithArgs(3, 4)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertRaises(Exception,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      lambda: mock.foo(4, 4))
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testArgsDontCare(self):
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo').WithArgs(_, 4)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.foo(4, 4)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testOnCall(self):
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    handler_called = []
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    def Handler(arg0):
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      assert arg0 == 7
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      handler_called.append(True)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('baz', 7).WhenCalled(Handler)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.baz(7)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertTrue(len(handler_called) > 0)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testSubObject(self):
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.bar = simple_mock.MockObject(mock)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo').WithArgs(_, 4)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.bar.ExpectCall('baz')
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.foo(0, 4)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.bar.baz()
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testSubObjectMismatch(self):
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock = simple_mock.MockObject()
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.bar = simple_mock.MockObject(mock)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.ExpectCall('foo').WithArgs(_, 4)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock.bar.ExpectCall('baz')
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertRaises(
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Exception,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      lambda: mock.bar.baz()) # pylint: disable=W0108
83