133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Unit tests for Mox. 233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# 333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Copyright 2008 Google Inc. 433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# 533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Licensed under the Apache License, Version 2.0 (the "License"); 633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# you may not use this file except in compliance with the License. 733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# You may obtain a copy of the License at 833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# 933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# http://www.apache.org/licenses/LICENSE-2.0 1033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# 1133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Unless required by applicable law or agreed to in writing, software 1233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# distributed under the License is distributed on an "AS IS" BASIS, 1333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# See the License for the specific language governing permissions and 1533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# limitations under the License. 1633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# 1733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# This is a fork of the pymox library intended to work with Python 3. 1833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# The file was modified by quermit@gmail.com and dawid.fatyga@gmail.com 1933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 2033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport io 2133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport re 2233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport sys 2333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 2433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom mox3 import mox 2533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom mox3.tests import mox_helper 2633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 2733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport six 2833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport testtools 2933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 3033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 3133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John ReckOS_LISTDIR = mox_helper.os.listdir 3233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 3333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 3433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ExpectedMethodCallsErrorTest(testtools.TestCase): 3533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test creation and string conversion of ExpectedMethodCallsError.""" 3633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 3733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAtLeastOneMethod(self): 3833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(ValueError, mox.ExpectedMethodCallsError, []) 3933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 4033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testOneError(self): 4133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("testMethod", [], False) 4233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2).AndReturn('output') 4333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck e = mox.ExpectedMethodCallsError([method]) 4433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual( 4533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "Verify: Expected methods never called:\n" 4633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck " 0. testMethod(1, 2) -> 'output'", 4733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck str(e)) 4833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 4933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testManyErrors(self): 5033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method1 = mox.MockMethod("testMethod", [], False) 5133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method1(1, 2).AndReturn('output') 5233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method2 = mox.MockMethod("testMethod", [], False) 5333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method2(a=1, b=2, c="only named") 5433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method3 = mox.MockMethod("testMethod2", [], False) 5533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method3().AndReturn(44) 5633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method4 = mox.MockMethod("testMethod", [], False) 5733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method4(1, 2).AndReturn('output') 5833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck e = mox.ExpectedMethodCallsError([method1, method2, method3, method4]) 5933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual( 6033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "Verify: Expected methods never called:\n" 6133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck " 0. testMethod(1, 2) -> 'output'\n" 6233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck " 1. testMethod(a=1, b=2, c='only named') -> None\n" 6333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck " 2. testMethod2() -> 44\n" 6433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck " 3. testMethod(1, 2) -> 'output'", 6533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck str(e)) 6633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 6733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 6833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass OrTest(testtools.TestCase): 6933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test Or correctly chains Comparators.""" 7033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 7133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValidOr(self): 7233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Or should be True if either Comparator returns True.""" 7333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Or(mox.IsA(dict), mox.IsA(str)) == {}) 7433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Or(mox.IsA(dict), mox.IsA(str)) == 'test') 7533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Or(mox.IsA(str), mox.IsA(str)) == 'test') 7633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 7733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInvalidOr(self): 7833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Or should be False if both Comparators return False.""" 7933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Or(mox.IsA(dict), mox.IsA(str)) == 0) 8033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 8133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 8233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass AndTest(testtools.TestCase): 8333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test And correctly chains Comparators.""" 8433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 8533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValidAnd(self): 8633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """And should be True if both Comparators return True.""" 8733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.And(mox.IsA(str), mox.IsA(str)) == '1') 8833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 8933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testClauseOneFails(self): 9033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """And should be False if the first Comparator returns False.""" 9133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 9233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.And(mox.IsA(dict), mox.IsA(str)) == '1') 9333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 9433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdvancedUsage(self): 9533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """And should work with other Comparators. 9633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 9733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck Note: this test is reliant on In and ContainsKeyValue. 9833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 9933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_dict = {"mock": "obj", "testing": "isCOOL"} 10033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.And(mox.In("testing"), 10133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.ContainsKeyValue("mock", "obj")) == test_dict) 10233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 10333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAdvancedUsageFails(self): 10433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Note: this test is reliant on In and ContainsKeyValue.""" 10533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_dict = {"mock": "obj", "testing": "isCOOL"} 10633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.And(mox.In("NOTFOUND"), 10733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.ContainsKeyValue("mock", "obj")) == test_dict) 10833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 10933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 11033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass FuncTest(testtools.TestCase): 11133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test Func correctly evaluates based upon true-false return.""" 11233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 11333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testFuncTrueFalseEvaluation(self): 11433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the validating function returns True.""" 11533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck equals_one = lambda x: x == 1 11633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck always_none = lambda x: None 11733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 11833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Func(equals_one) == 1) 11933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Func(equals_one) == 0) 12033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 12133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Func(always_none) == 1) 12233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Func(always_none) == 0) 12333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Func(always_none) is None) 12433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 12533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testFuncExceptionPropagation(self): 12633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Exceptions within the validating function should propagate.""" 12733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestException(Exception): 12833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 12933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 13033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def raiseExceptionOnNotOne(value): 13133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if value != 1: 13233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck raise TestException 13333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck else: 13433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return True 13533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 13633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Func(raiseExceptionOnNotOne) == 1) 13733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises( 13833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestException, mox.Func(raiseExceptionOnNotOne).__eq__, 2) 13933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 14033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 14133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass SameElementsAsTest(testtools.TestCase): 14233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """SameElementsAs correctly identifies sequences with same elements.""" 14333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 14433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSortedLists(self): 14533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if two lists are exactly equal.""" 14633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.SameElementsAs([1, 2.0, 'c']) == [1, 2.0, 'c']) 14733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 14833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnsortedLists(self): 14933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if lists are unequal but have same elements.""" 15033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.SameElementsAs([1, 2.0, 'c']) == [2.0, 'c', 1]) 15133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 15233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnhashableLists(self): 15333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if lists have the same unhashable elements.""" 15433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.SameElementsAs([{'a': 1}, {2: 'b'}]) == 15533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck [{2: 'b'}, {'a': 1}]) 15633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 15733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEmptyLists(self): 15833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True for two empty lists.""" 15933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.SameElementsAs([]) == []) 16033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 16133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnequalLists(self): 16233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if the lists are not equal.""" 16333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.SameElementsAs([1, 2.0, 'c']) == [2.0, 'c']) 16433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 16533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnequalUnhashableLists(self): 16633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if lists with unhashable items are unequal.""" 16733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.SameElementsAs( 16833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck [{'a': 1}, {2: 'b'}]) == [{2: 'b'}]) 16933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 17033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testActualIsNotASequence(self): 17133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if the actual object is not a sequence.""" 17233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.SameElementsAs([1]) == object()) 17333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 17433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testOneUnhashableObjectInActual(self): 17533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Store the entire iterator for a correct comparison. 17633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 17733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In a previous version of SameElementsAs, iteration stopped when an 17833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck unhashable object was encountered and then was restarted, so the actual 17933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck list appeared smaller than it was. 18033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 18133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.SameElementsAs([1, 2]) == iter([{}, 1, 2])) 18233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 18333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 18433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ContainsKeyValueTest(testtools.TestCase): 18533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test ContainsKeyValue correctly identifies key/value pairs in a dict. 18633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 18733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 18833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValidPair(self): 18933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the key value is in the dict.""" 19033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.ContainsKeyValue("key", 1) == {"key": 1}) 19133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 19233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInvalidValue(self): 19333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if the value is not correct.""" 19433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.ContainsKeyValue("key", 1) == {"key": 2}) 19533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 19633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInvalidKey(self): 19733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if they key is not in the dict.""" 19833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.ContainsKeyValue("qux", 1) == {"key": 2}) 19933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 20033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 20133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ContainsAttributeValueTest(testtools.TestCase): 20233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test ContainsAttributeValue identifies properties in an object.""" 20333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 20433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 20533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Create an object to test with.""" 20633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 20733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestObject(object): 20833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck key = 1 20933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 21033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(ContainsAttributeValueTest, self).setUp() 21133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_object = TestObject() 21233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 21333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValidPair(self): 21433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Return True if the object has the key attribute that matches.""" 21533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.ContainsAttributeValue("key", 1) 21633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck == self.test_object) 21733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 21833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInvalidValue(self): 21933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if the value is not correct.""" 22033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.ContainsKeyValue("key", 2) == self.test_object) 22133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 22233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInvalidKey(self): 22333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if they the object doesn't have the property.""" 22433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.ContainsKeyValue("qux", 1) == self.test_object) 22533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 22633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 22733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass InTest(testtools.TestCase): 22833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test In correctly identifies a key in a list/dict.""" 22933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 23033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testItemInList(self): 23133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the item is in the list.""" 23233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.In(1) == [1, 2, 3]) 23333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 23433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testKeyInDict(self): 23533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the item is a key in a dict.""" 23633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.In("test") == {"test": "module"}) 23733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 23833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testItemInTuple(self): 23933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the item is in the list.""" 24033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.In(1) == (1, 2, 3)) 24133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 24233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testTupleInTupleOfTuples(self): 24333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.In((1, 2, 3)) == ((1, 2, 3), (1, 2))) 24433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 24533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testItemNotInList(self): 24633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.In(1) == [2, 3]) 24733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 24833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testTupleNotInTupleOfTuples(self): 24933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.In((1, 2)) == ((1, 2, 3), (4, 5))) 25033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 25133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 25233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass NotTest(testtools.TestCase): 25333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test Not correctly identifies False predicates.""" 25433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 25533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testItemInList(self): 25633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the item is NOT in the list.""" 25733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Not(mox.In(42)) == [1, 2, 3]) 25833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 25933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testKeyInDict(self): 26033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the item is NOT a key in a dict.""" 26133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Not(mox.In("foo")) == {"key": 42}) 26233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 26333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInvalidKeyWithNot(self): 26433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if they key is NOT in the dict.""" 26533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Not(mox.ContainsKeyValue("qux", 1)) == {"key": 2}) 26633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 26733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 26833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass StrContainsTest(testtools.TestCase): 26933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test StrContains checks for substring occurrence of a parameter.""" 27033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 27133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValidSubstringAtStart(self): 27233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if substring is at the start of the string.""" 27333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.StrContains("hello") == "hello world") 27433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 27533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValidSubstringInMiddle(self): 27633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if substring is in the middle of the string.""" 27733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.StrContains("lo wo") == "hello world") 27833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 27933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValidSubstringAtEnd(self): 28033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if the substring is at the end of the string.""" 28133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.StrContains("ld") == "hello world") 28233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 28333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInvaildSubstring(self): 28433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if the substring is not in the string.""" 28533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.StrContains("AAA") == "hello world") 28633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 28733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleMatches(self): 28833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True if there are multiple occurances of substring.""" 28933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.StrContains("abc") == "ababcabcabcababc") 29033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 29133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 29233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass RegexTest(testtools.TestCase): 29333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test Regex correctly matches regular expressions.""" 29433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 29533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testIdentifyBadSyntaxDuringInit(self): 29633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """The user should know immediately if a regex has bad syntax.""" 29733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(re.error, mox.Regex, '(a|b') 29833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 29933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testPatternInMiddle(self): 30033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Return True if the pattern matches at the middle of the string. 30133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 30233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck This ensures that re.search is used (instead of re.find). 30333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 30433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Regex(r"a\s+b") == "x y z a b c") 30533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 30633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNonMatchPattern(self): 30733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return False if the pattern does not match the string.""" 30833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Regex(r"a\s+b") == "x y z") 30933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 31033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testFlagsPassedCorrectly(self): 31133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return True as we pass IGNORECASE flag.""" 31233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Regex(r"A", re.IGNORECASE) == "a") 31333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 31433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testReprWithoutFlags(self): 31533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """repr should return the regular expression pattern.""" 31633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue( 31733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck repr(mox.Regex(r"a\s+b")) == "<regular expression 'a\s+b'>") 31833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 31933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testReprWithFlags(self): 32033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """repr should return the regular expression pattern and flags.""" 32133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(repr(mox.Regex(r"a\s+b", flags=4)) == 32233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "<regular expression 'a\s+b', flags=4>") 32333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 32433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 32533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass IsTest(testtools.TestCase): 32633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify Is correctly checks equality based upon identity, not value.""" 32733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 32833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class AlwaysComparesTrue(object): 32933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __eq__(self, other): 33033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return True 33133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 33233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __cmp__(self, other): 33333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return 0 33433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 33533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __ne__(self, other): 33633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return False 33733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 33833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityValid(self): 33933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o1 = self.AlwaysComparesTrue() 34033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Is(o1), o1) 34133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 34233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityInvalid(self): 34333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o1 = self.AlwaysComparesTrue() 34433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o2 = self.AlwaysComparesTrue() 34533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(o1 == o2) 34633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # but... 34733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Is(o1) == o2) 34833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 34933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInequalityValid(self): 35033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o1 = self.AlwaysComparesTrue() 35133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o2 = self.AlwaysComparesTrue() 35233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.Is(o1) != o2) 35333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 35433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInequalityInvalid(self): 35533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o1 = self.AlwaysComparesTrue() 35633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.Is(o1) != o1) 35733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 35833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityInListValid(self): 35933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o1 = self.AlwaysComparesTrue() 36033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o2 = self.AlwaysComparesTrue() 36133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck isa_list = [mox.Is(o1), mox.Is(o2)] 36233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck str_list = [o1, o2] 36333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isa_list == str_list) 36433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 36533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEquailtyInListInvalid(self): 36633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o1 = self.AlwaysComparesTrue() 36733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck o2 = self.AlwaysComparesTrue() 36833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck isa_list = [mox.Is(o1), mox.Is(o2)] 36933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mixed_list = [o2, o1] 37033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(isa_list == mixed_list) 37133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 37233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 37333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass IsATest(testtools.TestCase): 37433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify IsA correctly checks equality based upon class type not value.""" 37533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 37633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityValid(self): 37733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that == correctly identifies objects of the same type.""" 37833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.IsA(str) == 'test') 37933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 38033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityInvalid(self): 38133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that == correctly identifies objects of different types.""" 38233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.IsA(str) == 10) 38333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 38433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInequalityValid(self): 38533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that != identifies objects of different type.""" 38633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mox.IsA(str) != 10) 38733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 38833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInequalityInvalid(self): 38933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that != correctly identifies objects of the same type.""" 39033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mox.IsA(str) != "test") 39133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 39233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityInListValid(self): 39333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify list contents are properly compared.""" 39433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck isa_list = [mox.IsA(str), mox.IsA(str)] 39533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck str_list = ["abc", "def"] 39633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isa_list == str_list) 39733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 39833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEquailtyInListInvalid(self): 39933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify list contents are properly compared.""" 40033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck isa_list = [mox.IsA(str), mox.IsA(str)] 40133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mixed_list = ["abc", 123] 40233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(isa_list == mixed_list) 40333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 40433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSpecialTypes(self): 40533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that IsA can handle objects like io.StringIO.""" 40633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck isA = mox.IsA(io.StringIO()) 40733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck stringIO = io.StringIO() 40833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isA == stringIO) 40933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 41033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 41133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass IsAlmostTest(testtools.TestCase): 41233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify IsAlmost correctly checks equality of floating point numbers.""" 41333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 41433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityValid(self): 41533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that == correctly identifies nearly equivalent floats.""" 41633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(mox.IsAlmost(1.8999999999), 1.9) 41733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 41833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityInvalid(self): 41933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that == correctly identifies non-equivalent floats.""" 42033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(mox.IsAlmost(1.899), 1.9) 42133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 42233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityWithPlaces(self): 42333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that specifying places has the desired effect.""" 42433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(mox.IsAlmost(1.899), 1.9) 42533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(mox.IsAlmost(1.899, places=2), 1.9) 42633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 42733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNonNumericTypes(self): 42833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that IsAlmost handles non-numeric types properly.""" 42933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 43033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(mox.IsAlmost(1.8999999999), '1.9') 43133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(mox.IsAlmost('1.8999999999'), 1.9) 43233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(mox.IsAlmost('1.8999999999'), '1.9') 43333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 43433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 43533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ValueRememberTest(testtools.TestCase): 43633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify comparing argument against remembered value.""" 43733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 43833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testValueEquals(self): 43933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that value will compare to stored value.""" 44033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck value = mox.Value() 44133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck value.store_value('hello world') 44233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(value, 'hello world') 44333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 44433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNoValue(self): 44533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that uninitialized value does not compare to empty values.""" 44633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck value = mox.Value() 44733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, None) 44833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, False) 44933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, 0) 45033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, '') 45133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, ()) 45233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, []) 45333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, {}) 45433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, object()) 45533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, set()) 45633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 45733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testRememberValue(self): 45833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that comparing against remember will store argument.""" 45933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck value = mox.Value() 46033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck remember = mox.Remember(value) 46133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(value, 'hello world') # value not yet stored. 46233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(remember, 'hello world') # store value here. 46333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(value, 'hello world') # compare against stored value. 46433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 46533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 46633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MockMethodTest(testtools.TestCase): 46733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test class to verify that the MockMethod class is working correctly.""" 46833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 46933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 47033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MockMethodTest, self).setUp() 47133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.expected_method = mox.MockMethod( 47233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "testMethod", [], False)(['original']) 47333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_method = mox.MockMethod( 47433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "testMethod", [self.expected_method], True) 47533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 47633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNameAttribute(self): 47733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should provide a __name__ attribute.""" 47833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('testMethod', self.mock_method.__name__) 47933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 48033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAndReturnNoneByDefault(self): 48133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return None by default.""" 48233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return_value = self.mock_method(['original']) 48333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(return_value is None) 48433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 48533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAndReturnValue(self): 48633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should return a specificed return value.""" 48733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_return_value = "test" 48833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.expected_method.AndReturn(expected_return_value) 48933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return_value = self.mock_method(['original']) 49033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(return_value == expected_return_value) 49133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 49233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAndRaiseException(self): 49333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should raise a specified exception.""" 49433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestException(Exception): 49533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 49633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 49733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_exception = TestException('test exception') 49833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.expected_method.AndRaise(expected_exception) 49933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(TestException, self.mock_method, ['original']) 50033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 50133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testWithSideEffects(self): 50233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should call state modifier.""" 50333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck local_list = ['original'] 50433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 50533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def modifier(mutable_list): 50633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(local_list is mutable_list) 50733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mutable_list[0] = 'mutation' 50833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 50933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.expected_method.WithSideEffects(modifier).AndReturn(1) 51033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_method(local_list) 51133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('mutation', local_list[0]) 51233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 51333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testWithReturningSideEffects(self): 51433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should call state modifier and propagate its return value.""" 51533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck local_list = ['original'] 51633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_return = 'expected_return' 51733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 51833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def modifier_with_return(mutable_list): 51933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(local_list is mutable_list) 52033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mutable_list[0] = 'mutation' 52133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return expected_return 52233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 52333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.expected_method.WithSideEffects(modifier_with_return) 52433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_return = self.mock_method(local_list) 52533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('mutation', local_list[0]) 52633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(expected_return, actual_return) 52733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 52833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testWithReturningSideEffectsWithAndReturn(self): 52933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should call state modifier and ignore its return value.""" 53033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck local_list = ['original'] 53133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_return = 'expected_return' 53233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck unexpected_return = 'unexpected_return' 53333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 53433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def modifier_with_return(mutable_list): 53533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(local_list is mutable_list) 53633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mutable_list[0] = 'mutation' 53733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return unexpected_return 53833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 53933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.expected_method.WithSideEffects(modifier_with_return).AndReturn( 54033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_return) 54133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_return = self.mock_method(local_list) 54233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('mutation', local_list[0]) 54333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(expected_return, actual_return) 54433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 54533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityNoParamsEqual(self): 54633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Methods with the same name and without params should be equal.""" 54733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method = mox.MockMethod("testMethod", [], False) 54833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(self.mock_method, expected_method) 54933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 55033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityNoParamsNotEqual(self): 55133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Methods with different names without params should not be equal.""" 55233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method = mox.MockMethod("otherMethod", [], False) 55333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_method, expected_method) 55433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 55533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityParamsEqual(self): 55633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Methods with the same name and parameters should be equal.""" 55733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck params = [1, 2, 3] 55833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method = mox.MockMethod("testMethod", [], False) 55933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method._params = params 56033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 56133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_method._params = params 56233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(self.mock_method, expected_method) 56333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 56433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityParamsNotEqual(self): 56533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Methods with same name and different params should not be equal.""" 56633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method = mox.MockMethod("testMethod", [], False) 56733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method._params = [1, 2, 3] 56833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 56933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_method._params = ['a', 'b', 'c'] 57033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_method, expected_method) 57133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 57233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityNamedParamsEqual(self): 57333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Methods with the same name and same named params should be equal.""" 57433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck named_params = {"input1": "test", "input2": "params"} 57533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method = mox.MockMethod("testMethod", [], False) 57633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method._named_params = named_params 57733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 57833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_method._named_params = named_params 57933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(self.mock_method, expected_method) 58033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 58133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityNamedParamsNotEqual(self): 58233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Methods with same name and diffnamed params should not be equal.""" 58333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method = mox.MockMethod("testMethod", [], False) 58433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method._named_params = {"input1": "test", "input2": "params"} 58533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 58633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_method._named_params = { 58733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "input1": "test2", "input2": "params2"} 58833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_method, expected_method) 58933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 59033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualityWrongType(self): 59133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Method should not be equal to an object of a different type.""" 59233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_method, "string?") 59333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 59433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testObjectEquality(self): 59533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Equality of objects should work without a Comparator""" 59633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instA = TestClass() 59733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instB = TestClass() 59833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 59933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck params = [instA, ] 60033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method = mox.MockMethod("testMethod", [], False) 60133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck expected_method._params = params 60233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 60333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_method._params = [instB, ] 60433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(self.mock_method, expected_method) 60533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 60633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStrConversion(self): 60733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("f", [], False) 60833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, "st", n1=8, n2="st2") 60933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(str(method), 61033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck ("f(1, 2, 'st', n1=8, n2='st2') -> None")) 61133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 61233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("testMethod", [], False) 61333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, "only positional") 61433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(str(method), 61533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "testMethod(1, 2, 'only positional') -> None") 61633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 61733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("testMethod", [], False) 61833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1, b=2, c="only named") 61933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(str(method), 62033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "testMethod(a=1, b=2, c='only named') -> None") 62133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 62233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("testMethod", [], False) 62333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method() 62433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(str(method), "testMethod() -> None") 62533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 62633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("testMethod", [], False) 62733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(x="only 1 parameter") 62833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(str(method), 62933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck "testMethod(x='only 1 parameter') -> None") 63033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 63133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("testMethod", [], False) 63233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method().AndReturn('return_value') 63333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(str(method), "testMethod() -> 'return_value'") 63433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 63533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod("testMethod", [], False) 63633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method().AndReturn(('a', {1: 2})) 63733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(str(method), "testMethod() -> ('a', {1: 2})") 63833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 63933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 64033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MockAnythingTest(testtools.TestCase): 64133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that the MockAnything class works as expected.""" 64233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 64333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 64433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MockAnythingTest, self).setUp() 64533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object = mox.MockAnything() 64633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 64733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testRepr(self): 64833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Calling repr on a MockAnything instance must work.""" 64933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('<MockAnything instance>', repr(self.mock_object)) 65033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 65133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCanMockStr(self): 65233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.__str__().AndReturn("foo") 65333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 65433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual = str(self.mock_object) 65533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Verify() 65633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual("foo", actual) 65733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 65833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSetupMode(self): 65933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify the mock will accept any call.""" 66033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.NonsenseCall() 66133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(len(self.mock_object._expected_calls_queue) == 1) 66233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 66333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testReplayWithExpectedCall(self): 66433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify the mock replays method calls as expected.""" 66533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() # setup method call 66633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() # start replay mode 66733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() # make method call 66833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 66933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testReplayWithUnexpectedCall(self): 67033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Unexpected method calls should raise UnexpectedMethodCallError.""" 67133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() # setup method call 67233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() # start replay mode 67333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, 67433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.OtherValidCall) 67533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 67633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testVerifyWithCompleteReplay(self): 67733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify should not raise an exception for a valid replay.""" 67833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() # setup method call 67933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() # start replay mode 68033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() # make method call 68133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Verify() 68233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 68333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testVerifyWithIncompleteReplay(self): 68433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify should raise an exception if the replay was not complete.""" 68533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() # setup method call 68633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() # start replay mode 68733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # ValidCall() is never made 68833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises( 68933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.ExpectedMethodCallsError, self.mock_object._Verify) 69033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 69133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSpecialClassMethod(self): 69233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify should not raise exception when special methods are used.""" 69333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object[1].AndReturn(True) 69433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 69533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck returned_val = self.mock_object[1] 69633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(returned_val) 69733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Verify() 69833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 69933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNonzero(self): 70033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """You should be able to use the mock object in an if.""" 70133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 70233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if self.mock_object: 70333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 70433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 70533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNotNone(self): 70633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Mock should be comparable to None.""" 70733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 70833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if self.mock_object is not None: 70933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 71033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 71133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if self.mock_object is None: 71233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 71333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 71433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEquals(self): 71533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """A mock should be able to compare itself to another object.""" 71633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 71733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(self.mock_object, self.mock_object) 71833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 71933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualsMockFailure(self): 72033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify equals identifies unequal objects.""" 72133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.SillyCall() 72233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 72333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_object, mox.MockAnything()) 72433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 72533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualsInstanceFailure(self): 72633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify equals identifies that objects are different instances.""" 72733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 72833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_object, TestClass()) 72933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 73033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNotEquals(self): 73133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify not equals works.""" 73233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 73333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(self.mock_object != self.mock_object) 73433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 73533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNestedMockCallsRecordedSerially(self): 73633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that nested calls work when recorded serially.""" 73733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.CallInner().AndReturn(1) 73833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.CallOuter(1) 73933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 74033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 74133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.CallOuter(self.mock_object.CallInner()) 74233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 74333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Verify() 74433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 74533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNestedMockCallsRecordedNested(self): 74633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that nested cals work when recorded in a nested fashion.""" 74733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.CallOuter(self.mock_object.CallInner().AndReturn(1)) 74833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 74933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 75033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.CallOuter(self.mock_object.CallInner()) 75133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 75233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Verify() 75333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 75433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testIsCallable(self): 75533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that MockAnything can even mock a simple callable. 75633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 75733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck This is handy for "stubbing out" a method in a module with a mock, and 75833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck verifying that it was called. 75933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 76033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object().AndReturn('mox0rd') 76133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 76233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 76333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('mox0rd', self.mock_object()) 76433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 76533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Verify() 76633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 76733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testIsReprable(self): 76833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that MockAnythings can be repr'd without causing a failure.""" 76933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('MockAnything' in repr(self.mock_object)) 77033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 77133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 77233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MethodCheckerTest(testtools.TestCase): 77333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Tests MockMethod's use of MethodChecker method.""" 77433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 77533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnboundMethodsRequiresInstance(self): 77633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # SKIP TEST IN PYTHON 2.x (Ugly hack for python 2.6) 77733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # REASON: semantics for unbound methods has changed only in Python 3 77833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # so this test in earlier versions is invald 77933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if sys.version_info < (3, 0): 78033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return 78133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 78233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = CheckCallTestClass() 78333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('NoParameters', [], False, 78433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck CheckCallTestClass.NoParameters) 78533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 78633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method) 78733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(instance) 78833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, instance, 1) 78933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 79033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNoParameters(self): 79133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('NoParameters', [], False, 79233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck CheckCallTestClass.NoParameters, 79333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 79433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method() 79533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1) 79633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2) 79733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, a=1) 79833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, b=2) 79933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 80033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testOneParameter(self): 80133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('OneParameter', [], False, 80233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck CheckCallTestClass.OneParameter, 80333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 80433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method) 80533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1) 80633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1) 80733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, b=1) 80833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2) 80933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, a=2) 81033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, b=2) 81133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 81233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testTwoParameters(self): 81333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('TwoParameters', [], False, 81433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck CheckCallTestClass.TwoParameters, 81533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 81633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method) 81733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1) 81833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, a=1) 81933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, b=1) 82033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2) 82133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, b=2) 82233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1, b=2) 82333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(b=2, a=1) 82433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, b=2, c=3) 82533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, a=1, b=2, c=3) 82633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, 3) 82733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, 3, 4) 82833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 3, a=1, b=2) 82933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 83033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testOneDefaultValue(self): 83133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('OneDefaultValue', [], False, 83233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck CheckCallTestClass.OneDefaultValue, 83333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 83433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method() 83533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1) 83633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1) 83733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, b=1) 83833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2) 83933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, a=2) 84033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, b=2) 84133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 84233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testTwoDefaultValues(self): 84333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('TwoDefaultValues', [], False, 84433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck CheckCallTestClass.TwoDefaultValues, 84533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 84633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method) 84733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, c=3) 84833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1) 84933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, d=4) 85033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, d=4, c=3) 85133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2) 85233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1, b=2) 85333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, 3) 85433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, 3, 4) 85533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, c=3) 85633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, c=3, d=4) 85733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, d=4, c=3) 85833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(d=4, c=3, a=1, b=2) 85933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, 3, 4, 5) 86033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, e=9) 86133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, a=1, b=2, e=9) 86233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 86333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testArgs(self): 86433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('Args', [], False, CheckCallTestClass.Args, 86533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 86633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method) 86733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1) 86833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2) 86933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1, b=2) 87033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, 3) 87133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, 3, 4) 87233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, a=3) 87333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, c=3) 87433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 87533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testKwargs(self): 87633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('Kwargs', [], False, CheckCallTestClass.Kwargs, 87733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 87833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method) 87933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1) 88033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2) 88133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1, b=2) 88233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(b=2, a=1) 88333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, 3) 88433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, a=3) 88533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, c=3) 88633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1, b=2, c=3) 88733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(c=3, a=1, b=2) 88833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1, b=2, c=3, d=4) 88933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, 2, 3, 4) 89033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 89133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testArgsAndKwargs(self): 89233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mox.MockMethod('ArgsAndKwargs', [], False, 89333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck CheckCallTestClass.ArgsAndKwargs, 89433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class_to_bind=CheckCallTestClass) 89533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method) 89633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1) 89733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2) 89833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, 3) 89933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(a=1) 90033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, b=2) 90133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, method, 1, a=2) 90233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(b=2, a=1) 90333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(c=3, b=2, a=1) 90433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method(1, 2, c=3) 90533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 90633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 90733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass CheckCallTestClass(object): 90833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def NoParameters(self): 90933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 91033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 91133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def OneParameter(self, a): 91233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 91333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 91433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def TwoParameters(self, a, b): 91533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 91633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 91733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def OneDefaultValue(self, a=1): 91833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 91933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 92033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def TwoDefaultValues(self, a, b, c=1, d=2): 92133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 92233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 92333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def Args(self, a, b, *args): 92433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 92533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 92633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def Kwargs(self, a, b=2, **kwargs): 92733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 92833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 92933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def ArgsAndKwargs(self, a, *args, **kwargs): 93033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 93133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 93233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 93333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MockObjectTest(testtools.TestCase): 93433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that the MockObject class works as exepcted.""" 93533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 93633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 93733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MockObjectTest, self).setUp() 93833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object = mox.MockObject(TestClass) 93933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 94033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSetupModeWithValidCall(self): 94133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify the mock object properly mocks a basic method call.""" 94233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() 94333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(len(self.mock_object._expected_calls_queue) == 1) 94433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 94533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSetupModeWithInvalidCall(self): 94633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Rase UnknownMethodCallError for a non-member method call. 94733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 94833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Note: assertRaises does not catch exceptions thrown by MockObject's 94933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # __getattr__ 95033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck try: 95133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.InvalidCall() 95233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.fail("No exception thrown, expected UnknownMethodCallError") 95333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck except mox.UnknownMethodCallError: 95433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 95533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck except Exception: 95633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.fail("Wrong exception type thrown," 95733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck " expected UnknownMethodCallError") 95833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 95933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testReplayWithInvalidCall(self): 96033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Rase UnknownMethodCallError for a non-member method call. 96133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 96233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() # setup method call 96333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() # start replay mode 96433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Note: assertRaises does not catch exceptions thrown by MockObject's 96533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # __getattr__ 96633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck try: 96733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.InvalidCall() 96833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.fail("No exception thrown, expected UnknownMethodCallError") 96933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck except mox.UnknownMethodCallError: 97033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 97133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck except Exception: 97233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.fail("Wrong exception type thrown," 97333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck " expected UnknownMethodCallError") 97433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 97533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testIsInstance(self): 97633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Mock should be able to pass as an instance of the mocked class.""" 97733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isinstance(self.mock_object, TestClass)) 97833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 97933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testFindValidMethods(self): 98033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Mock should be able to mock all public methods.""" 98133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('ValidCall' in self.mock_object._known_methods) 98233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('OtherValidCall' in self.mock_object._known_methods) 98333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('MyClassMethod' in self.mock_object._known_methods) 98433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('MyStaticMethod' in self.mock_object._known_methods) 98533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('_ProtectedCall' in self.mock_object._known_methods) 98633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('__PrivateCall' not in self.mock_object._known_methods) 98733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue( 98833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck '_TestClass__PrivateCall' in self.mock_object._known_methods) 98933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 99033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testFindsSuperclassMethods(self): 99133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Mock should be able to mock superclasses methods.""" 99233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object = mox.MockObject(ChildClass) 99333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('ValidCall' in self.mock_object._known_methods) 99433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('OtherValidCall' in self.mock_object._known_methods) 99533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('MyClassMethod' in self.mock_object._known_methods) 99633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('ChildValidCall' in self.mock_object._known_methods) 99733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 99833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testAccessClassVariables(self): 99933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Class variables should be accessible through the mock.""" 100033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('SOME_CLASS_VAR' in self.mock_object._known_vars) 100133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('_PROTECTED_CLASS_VAR' in self.mock_object._known_vars) 100233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('test_value', self.mock_object.SOME_CLASS_VAR) 100333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 100433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEquals(self): 100533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """A mock should be able to compare itself to another object.""" 100633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 100733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(self.mock_object, self.mock_object) 100833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 100933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualsMockFailure(self): 101033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify equals identifies unequal objects.""" 101133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object.ValidCall() 101233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 101333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_object, mox.MockObject(TestClass)) 101433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 101533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEqualsInstanceFailure(self): 101633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify equals identifies that objects are different instances.""" 101733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 101833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertNotEqual(self.mock_object, TestClass()) 101933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 102033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testNotEquals(self): 102133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify not equals works.""" 102233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mock_object._Replay() 102333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(self.mock_object != self.mock_object) 102433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 102533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockSetItem_ExpectedSetItem_Success(self): 102633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __setitem__() gets mocked in Dummy. 102733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 102833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() succeeds. 102933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 103033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 103133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'] = 'Y' 103233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 103333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 103433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 103533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'] = 'Y' 103633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 103733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 103833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 103933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockSetItem_ExpectedSetItem_NoSuccess(self): 104033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __setitem__() gets mocked in Dummy. 104133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 104233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() fails. 104333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 104433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 104533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'] = 'Y' 104633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 104733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 104833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 104933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing dummy['X'] = 'Y' 105033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 105133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.ExpectedMethodCallsError, dummy._Verify) 105233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 105333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockSetItem_ExpectedNoSetItem_Success(self): 105433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __setitem__() gets mocked in Dummy.""" 105533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 105633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing dummy['X'] = 'Y' 105733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 105833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 105933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 106033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def call(): 106133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'] = 'Y' 106233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 106333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, call) 106433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 106533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockSetItem_ExpectedNoSetItem_NoSuccess(self): 106633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __setitem__() gets mocked in Dummy. 106733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 106833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() fails. 106933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 107033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 107133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing dummy['X'] = 'Y' 107233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 107333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 107433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 107533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing dummy['X'] = 'Y' 107633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 107733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 107833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 107933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockSetItem_ExpectedSetItem_NonmatchingParameters(self): 108033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __setitem__() fails if other parameters are expected.""" 108133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 108233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'] = 'Y' 108333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 108433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 108533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 108633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def call(): 108733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['wrong'] = 'Y' 108833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 108933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, call) 109033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 109133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 109233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 109333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockSetItem_WithSubClassOfNewStyleClass(self): 109433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class NewStyleTestClass(object): 109533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __init__(self): 109633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.my_dict = {} 109733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 109833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __setitem__(self, key, value): 109933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.my_dict[key], value 110033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 110133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestSubClass(NewStyleTestClass): 110233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 110333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 110433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestSubClass) 110533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy[1] = 2 110633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 110733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy[1] = 2 110833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 110933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 111033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockGetItem_ExpectedGetItem_Success(self): 111133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __getitem__() gets mocked in Dummy. 111233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 111333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() succeeds. 111433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 111533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 111633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'].AndReturn('value') 111733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 111833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 111933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 112033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(dummy['X'], 'value') 112133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 112233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 112333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 112433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockGetItem_ExpectedGetItem_NoSuccess(self): 112533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __getitem__() gets mocked in Dummy. 112633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 112733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() fails. 112833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 112933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 113033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'].AndReturn('value') 113133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 113233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 113333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 113433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing dummy['X'] 113533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 113633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.ExpectedMethodCallsError, dummy._Verify) 113733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 113833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockGetItem_ExpectedNoGetItem_NoSuccess(self): 113933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __getitem__() gets mocked in Dummy.""" 114033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 114133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing dummy['X'] 114233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 114333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 114433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 114533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def call(): 114633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return dummy['X'] 114733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 114833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, call) 114933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 115033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockGetItem_ExpectedGetItem_NonmatchingParameters(self): 115133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __getitem__() fails if other parameters are expected.""" 115233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 115333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy['X'].AndReturn('value') 115433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 115533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 115633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 115733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def call(): 115833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return dummy['wrong'] 115933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 116033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, call) 116133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 116233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 116333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 116433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockGetItem_WithSubClassOfNewStyleClass(self): 116533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class NewStyleTestClass(object): 116633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __getitem__(self, key): 116733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return {1: '1', 2: '2'}[key] 116833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 116933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestSubClass(NewStyleTestClass): 117033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 117133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 117233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestSubClass) 117333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy[1].AndReturn('3') 117433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 117533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 117633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('3', dummy.__getitem__(1)) 117733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 117833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 117933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockIter_ExpectedIter_Success(self): 118033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __iter__() gets mocked in Dummy. 118133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 118233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() succeeds. 118333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 118433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 118533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck iter(dummy).AndReturn(iter(['X', 'Y'])) 118633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 118733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 118833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 118933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual([x for x in dummy], ['X', 'Y']) 119033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 119133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 119233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 119333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockContains_ExpectedContains_Success(self): 119433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __contains__ gets mocked in Dummy. 119533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 119633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() succeeds. 119733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 119833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 119933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy.__contains__('X').AndReturn(True) 120033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 120133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 120233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 120333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue('X' in dummy) 120433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 120533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 120633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 120733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockContains_ExpectedContains_NoSuccess(self): 120833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __contains__() gets mocked in Dummy. 120933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 121033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() fails. 121133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 121233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 121333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy.__contains__('X').AndReturn('True') 121433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 121533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 121633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 121733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing 'X' in dummy 121833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 121933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.ExpectedMethodCallsError, dummy._Verify) 122033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 122133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockContains_ExpectedContains_NonmatchingParameter(self): 122233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __contains__ fails if other parameters are expected.""" 122333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 122433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy.__contains__('X').AndReturn(True) 122533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 122633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 122733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 122833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def call(): 122933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return 'Y' in dummy 123033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 123133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, call) 123233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 123333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 123433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 123533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockIter_ExpectedIter_NoSuccess(self): 123633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __iter__() gets mocked in Dummy. 123733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 123833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck In this test, _Verify() fails. 123933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 124033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 124133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck iter(dummy).AndReturn(iter(['X', 'Y'])) 124233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 124333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 124433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 124533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing self.assertEqual([x for x in dummy], ['X', 'Y']) 124633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 124733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.ExpectedMethodCallsError, dummy._Verify) 124833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 124933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockIter_ExpectedNoIter_NoSuccess(self): 125033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __iter__() gets mocked in Dummy.""" 125133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestClass) 125233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing iter(dummy) 125333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 125433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 125533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 125633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def call(): 125733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return [x for x in dummy] 125833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, call) 125933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 126033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockIter_ExpectedGetItem_Success(self): 126133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __iter__() gets mocked in Dummy using getitem.""" 126233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(SubscribtableNonIterableClass) 126333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy[0].AndReturn('a') 126433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy[1].AndReturn('b') 126533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy[2].AndRaise(IndexError) 126633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 126733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 126833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(['a', 'b'], [x for x in dummy]) 126933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 127033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 127133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockIter_ExpectedNoGetItem_NoSuccess(self): 127233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that __iter__() gets mocked in Dummy using getitem.""" 127333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(SubscribtableNonIterableClass) 127433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # NOT doing dummy[index] 127533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 127633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 127733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck function = lambda: [x for x in dummy] 127833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, function) 127933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 128033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMockGetIter_WithSubClassOfNewStyleClass(self): 128133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class NewStyleTestClass(object): 128233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __iter__(self): 128333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return iter([1, 2, 3]) 128433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 128533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestSubClass(NewStyleTestClass): 128633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 128733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 128833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy = mox.MockObject(TestSubClass) 128933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck iter(dummy).AndReturn(iter(['a', 'b'])) 129033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Replay() 129133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(['a', 'b'], [x for x in dummy]) 129233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck dummy._Verify() 129333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 129433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInstantiationWithAdditionalAttributes(self): 129533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_object = mox.MockObject(TestClass, attrs={"attr1": "value"}) 129633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(mock_object.attr1, "value") 129733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 129833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCantOverrideMethodsWithAttributes(self): 129933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(ValueError, mox.MockObject, TestClass, 130033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck attrs={"ValidCall": "value"}) 130133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 130233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCantMockNonPublicAttributes(self): 130333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.PrivateAttributeError, mox.MockObject, TestClass, 130433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck attrs={"_protected": "value"}) 130533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.PrivateAttributeError, mox.MockObject, TestClass, 130633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck attrs={"__private": "value"}) 130733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 130833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 130933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MoxTest(testtools.TestCase): 131033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify Mox works correctly.""" 131133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 131233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 131333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MoxTest, self).setUp() 131433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox = mox.Mox() 131533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 131633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCreateObject(self): 131733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Mox should create a mock object.""" 131833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.CreateMock(TestClass) 131933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 132033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testVerifyObjectWithCompleteReplay(self): 132133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Mox should replay and verify all objects it created.""" 132233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(TestClass) 132333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCall() 132433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCallWithArgs(mox.IsA(TestClass)) 132533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 132633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCall() 132733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCallWithArgs(TestClass("some_value")) 132833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 132933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 133033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testVerifyObjectWithIncompleteReplay(self): 133133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Mox should raise an exception if a mock didn't replay completely.""" 133233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(TestClass) 133333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCall() 133433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 133533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # ValidCall() is never made 133633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.ExpectedMethodCallsError, self.mox.VerifyAll) 133733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 133833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testEntireWorkflow(self): 133933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test the whole work flow.""" 134033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(TestClass) 134133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCall().AndReturn("yes") 134233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 134333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 134433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck ret_val = mock_obj.ValidCall() 134533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual("yes", ret_val) 134633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 134733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 134833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSignatureMatchingWithComparatorAsFirstArg(self): 134933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that the first argument can be a comparator.""" 135033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 135133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def VerifyLen(val): 135233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """This will raise an exception when not given a list. 135333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 135433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck This exception will be raised when trying to infer/validate the 135533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method signature. 135633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 135733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return len(val) != 1 135833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 135933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(TestClass) 136033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # This intentionally does not name the 'nine' param so it triggers 136133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # deeper inspection. 136233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.MethodWithArgs(mox.Func(VerifyLen), mox.IgnoreArg(), None) 136333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 136433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 136533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.MethodWithArgs([1, 2], "foo", None) 136633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 136733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 136833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 136933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCallableObject(self): 137033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test recording calls to a callable object works.""" 137133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(CallableClass) 137233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj("foo").AndReturn("qux") 137333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 137433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 137533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck ret_val = mock_obj("foo") 137633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual("qux", ret_val) 137733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 137833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 137933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testInheritedCallableObject(self): 138033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Recording calls to an object inheriting from a callable object.""" 138133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(InheritsFromCallable) 138233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj("foo").AndReturn("qux") 138333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 138433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 138533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck ret_val = mock_obj("foo") 138633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual("qux", ret_val) 138733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 138833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 138933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCallOnNonCallableObject(self): 139033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that you cannot call a non-callable object.""" 139133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock("string is not callable") 139233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(TypeError, mock_obj) 139333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 139433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCallableObjectWithBadCall(self): 139533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test verifying calls to a callable object works.""" 139633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(CallableClass) 139733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj("foo").AndReturn("qux") 139833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 139933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 140033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, mock_obj, "ZOOBAZ") 140133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 140233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testCallableObjectVerifiesSignature(self): 140333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMock(CallableClass) 140433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Too many arguments 140533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, mock_obj, "foo", "bar") 140633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 140733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnorderedGroup(self): 140833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that using one unordered group works.""" 140933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 141033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).InAnyOrder() 141133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).InAnyOrder() 141233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 141333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 141433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2) 141533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1) 141633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 141733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 141833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 141933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnorderedGroupsInline(self): 142033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Unordered groups should work in the context of ordered calls.""" 142133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 142233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 142333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).InAnyOrder() 142433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).InAnyOrder() 142533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 142633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 142733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 142833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 142933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2) 143033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1) 143133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 143233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 143333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 143433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 143533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleUnorderdGroups(self): 143633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Multiple unoreded groups should work.""" 143733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 143833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).InAnyOrder() 143933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).InAnyOrder() 144033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Foo().InAnyOrder('group2') 144133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Bar().InAnyOrder('group2') 144233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 144333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 144433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2) 144533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1) 144633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Bar() 144733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Foo() 144833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 144933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 145033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 145133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleUnorderdGroupsOutOfOrder(self): 145233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Multiple unordered groups should maintain external order""" 145333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 145433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).InAnyOrder() 145533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).InAnyOrder() 145633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Foo().InAnyOrder('group2') 145733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Bar().InAnyOrder('group2') 145833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 145933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 146033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2) 146133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, mock_obj.Bar) 146233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 146333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnorderedGroupWithReturnValue(self): 146433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Unordered groups should work with return values.""" 146533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 146633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 146733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).InAnyOrder().AndReturn(9) 146833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).InAnyOrder().AndReturn(10) 146933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 147033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 147133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 147233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 147333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_two = mock_obj.Method(2) 147433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_one = mock_obj.Method(1) 147533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 147633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 147733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(9, actual_one) 147833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(10, actual_two) 147933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 148033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 148133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 148233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnorderedGroupWithComparator(self): 148333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Unordered groups should work with comparators.""" 148433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 148533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def VerifyOne(cmd): 148633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if not isinstance(cmd, str): 148733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.fail('Unexpected type passed to comparator: ' + str(cmd)) 148833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return cmd == 'test' 148933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 149033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def VerifyTwo(cmd): 149133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return True 149233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 149333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 149433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Foo(['test'], mox.Func(VerifyOne), bar=1).InAnyOrder().\ 149533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck AndReturn('yes test') 149633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Foo(['test'], mox.Func(VerifyTwo), bar=1).InAnyOrder().\ 149733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck AndReturn('anything') 149833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 149933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 150033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 150133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Foo(['test'], 'anything', bar=1) 150233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Foo(['test'], 'test', bar=1) 150333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 150433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 150533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 150633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleTimes(self): 150733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test if MultipleTimesGroup works.""" 150833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 150933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).MultipleTimes().AndReturn(9) 151033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).AndReturn(10) 151133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3).MultipleTimes().AndReturn(42) 151233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 151333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 151433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_one = mock_obj.Method(1) 151533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck second_one = mock_obj.Method(1) # This tests MultipleTimes. 151633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_two = mock_obj.Method(2) 151733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_three = mock_obj.Method(3) 151833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 151933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 152033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 152133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 152233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 152333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(9, actual_one) 152433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Repeated calls should return same number. 152533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(9, second_one) 152633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(10, actual_two) 152733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(42, actual_three) 152833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 152933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleTimesUsingIsAParameter(self): 153033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test if MultipleTimesGroup works with a IsA parameter.""" 153133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 153233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 153333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(mox.IsA(str)).MultipleTimes("IsA").AndReturn(9) 153433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 153533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 153633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 153733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 153833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_one = mock_obj.Method("1") 153933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck second_one = mock_obj.Method("2") # This tests MultipleTimes. 154033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 154133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 154233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 154333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 154433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(9, actual_one) 154533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Repeated calls should return same number. 154633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(9, second_one) 154733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 154833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMutlipleTimesUsingFunc(self): 154933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that the Func is not evaluated more times than necessary. 155033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 155133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck If a Func() has side effects, it can cause a passing test to fail. 155233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 155333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 155433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.counter = 0 155533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 155633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def MyFunc(actual_str): 155733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Increment the counter if actual_str == 'foo'.""" 155833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if actual_str == 'foo': 155933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.counter += 1 156033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return True 156133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 156233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 156333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 156433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(mox.Func(MyFunc)).MultipleTimes() 156533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 156633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 156733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 156833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 156933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method('foo') 157033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method('foo') 157133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method('not-foo') 157233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 157333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 157433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 157533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 157633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(2, self.counter) 157733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 157833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleTimesThreeMethods(self): 157933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test if MultipleTimesGroup works with three or more methods.""" 158033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 158133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 158233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).MultipleTimes().AndReturn(9) 158333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).MultipleTimes().AndReturn(8) 158433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3).MultipleTimes().AndReturn(7) 158533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(4).AndReturn(10) 158633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 158733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 158833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 158933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 159033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_three = mock_obj.Method(3) 159133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1) 159233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_two = mock_obj.Method(2) 159333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 159433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_one = mock_obj.Method(1) 159533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_four = mock_obj.Method(4) 159633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 159733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 159833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(9, actual_one) 159933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(8, actual_two) 160033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(7, actual_three) 160133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(10, actual_four) 160233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 160333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 160433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 160533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleTimesMissingOne(self): 160633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test if MultipleTimesGroup fails if one method is missing.""" 160733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 160833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 160933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).MultipleTimes().AndReturn(9) 161033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2).MultipleTimes().AndReturn(8) 161133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3).MultipleTimes().AndReturn(7) 161233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(4).AndReturn(10) 161333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 161433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 161533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 161633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 161733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 161833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2) 161933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 162033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 162133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(2) 162233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 162333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, mock_obj.Method, 4) 162433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 162533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleTimesTwoGroups(self): 162633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test if MultipleTimesGroup works with a group after a 162733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck MultipleTimesGroup. 162833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 162933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 163033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 163133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).MultipleTimes().AndReturn(9) 163233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3).MultipleTimes("nr2").AndReturn(42) 163333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 163433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 163533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 163633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 163733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_one = mock_obj.Method(1) 163833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1) 163933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_three = mock_obj.Method(3) 164033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 164133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 164233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 164333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(9, actual_one) 164433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(42, actual_three) 164533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 164633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 164733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 164833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleTimesTwoGroupsFailure(self): 164933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test if MultipleTimesGroup fails with a group after a 165033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck MultipleTimesGroup. 165133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 165233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 165333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 165433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1).MultipleTimes().AndReturn(9) 165533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3).MultipleTimes("nr2").AndReturn(42) 165633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Close() 165733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 165833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 165933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Open() 166033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1) 166133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(1) 166233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.Method(3) 166333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 166433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, mock_obj.Method, 1) 166533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 166633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testWithSideEffects(self): 166733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test side effect operations actually modify their target objects.""" 166833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def modifier(mutable_list): 166933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mutable_list[0] = 'mutated' 167033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 167133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ConfigureInOutParameter( 167233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck ['original']).WithSideEffects(modifier) 167333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.WorkWithParameter(['mutated']) 167433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 167533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 167633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck local_list = ['original'] 167733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ConfigureInOutParameter(local_list) 167833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.WorkWithParameter(local_list) 167933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 168033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 168133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 168233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testWithSideEffectsException(self): 168333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test side effect operations actually modify their target objects.""" 168433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestException(Exception): 168533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 168633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 168733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def modifier(mutable_list): 168833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mutable_list[0] = 'mutated' 168933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = self.mox.CreateMockAnything() 169033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method = mock_obj.ConfigureInOutParameter(['original']) 169133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method.WithSideEffects(modifier).AndRaise(TestException('exception')) 169233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.WorkWithParameter(['mutated']) 169333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 169433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 169533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck local_list = ['original'] 169633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(TestException, 169733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ConfigureInOutParameter, 169833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck local_list) 169933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.WorkWithParameter(local_list) 170033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 170133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 170233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 170333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod(self): 170433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that a method is replaced with a MockObject.""" 170533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_obj = TestClass() 170633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck method_type = type(test_obj.OtherValidCall) 170733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Replace OtherValidCall with a mock. 170833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(test_obj, 'OtherValidCall') 170933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isinstance(test_obj.OtherValidCall, mox.MockObject)) 171033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(type(test_obj.OtherValidCall) is method_type) 171133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 171233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_obj.OtherValidCall().AndReturn('foo') 171333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 171433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 171533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual = test_obj.OtherValidCall() 171633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 171733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 171833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 171933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('foo', actual) 172033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(type(test_obj.OtherValidCall) is method_type) 172133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 172233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Unbound_Comparator(self): 172333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = TestClass() 172433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(TestClass, 'OtherValidCall') 172533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 172633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestClass.OtherValidCall(mox.IgnoreArg()).AndReturn('foo') 172733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 172833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 172933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual = TestClass.OtherValidCall(instance) 173033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 173133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 173233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 173333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('foo', actual) 173433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 173533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Unbound_Subclass_Comparator(self): 173633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock( 173733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.TestClassFromAnotherModule, 'Value') 173833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.TestClassFromAnotherModule.Value( 173933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.IsA(mox_helper.ChildClassFromAnotherModule)).AndReturn('foo') 174033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 174133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 174233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = mox_helper.ChildClassFromAnotherModule() 174333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual = mox_helper.TestClassFromAnotherModule.Value(instance) 174433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 174533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 174633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 174733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('foo', actual) 174833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 174933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOuMethod_Unbound_WithOptionalParams(self): 175033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox = mox.Mox() 175133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(TestClass, 'OptionalArgs') 175233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestClass.OptionalArgs(mox.IgnoreArg(), foo=2) 175333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 175433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 175533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck t = TestClass() 175633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestClass.OptionalArgs(t, foo=2) 175733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 175833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 175933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 176033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 176133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Unbound_ActualInstance(self): 176233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = TestClass() 176333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(TestClass, 'OtherValidCall') 176433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 176533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestClass.OtherValidCall(instance).AndReturn('foo') 176633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 176733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 176833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual = TestClass.OtherValidCall(instance) 176933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 177033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 177133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 177233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('foo', actual) 177333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 177433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Unbound_DifferentInstance(self): 177533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = TestClass() 177633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(TestClass, 'OtherValidCall') 177733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 177833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestClass.OtherValidCall(instance).AndReturn('foo') 177933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 178033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 178133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # This should fail, since the instances are different 178233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, 178333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestClass.OtherValidCall, "wrong self") 178433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 178533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 178633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 178733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 178833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Unbound_NamedUsingPositional(self): 178933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Check positional parameters can be matched to keyword arguments.""" 179033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, 'NamedParams') 179133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = mox_helper.ExampleClass() 179233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ExampleClass.NamedParams(instance, 'foo', baz=None) 179333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 179433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 179533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ExampleClass.NamedParams(instance, 'foo', baz=None) 179633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 179733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 179833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 179933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 180033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Unbound_NamedUsingPositional_SomePositional(self): 180133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Check positional parameters can be matched to keyword arguments.""" 180233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, 'TestMethod') 180333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = mox_helper.ExampleClass() 180433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ExampleClass.TestMethod(instance, 'one', 'two', 'nine') 180533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 180633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 180733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ExampleClass.TestMethod(instance, 'one', 'two', 'nine') 180833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 180933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 181033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 181133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 181233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Unbound_SpecialArgs(self): 181333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, 'SpecialArgs') 181433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = mox_helper.ExampleClass() 181533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ExampleClass.SpecialArgs(instance, 'foo', None, bar='bar') 181633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 181733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 181833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ExampleClass.SpecialArgs(instance, 'foo', None, bar='bar') 181933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 182033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 182133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 182233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 182333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Bound_SimpleTest(self): 182433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck t = self.mox.CreateMock(TestClass) 182533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 182633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck t.MethodWithArgs(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn('foo') 182733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 182833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 182933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual = t.MethodWithArgs(None, None) 183033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 183133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 183233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 183333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('foo', actual) 183433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 183533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Bound_NamedUsingPositional(self): 183633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Check positional parameters can be matched to keyword arguments.""" 183733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, 'NamedParams') 183833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = mox_helper.ExampleClass() 183933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance.NamedParams('foo', baz=None) 184033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 184133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 184233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance.NamedParams('foo', baz=None) 184333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 184433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 184533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 184633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 184733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Bound_NamedUsingPositional_SomePositional(self): 184833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Check positional parameters can be matched to keyword arguments.""" 184933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, 'TestMethod') 185033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = mox_helper.ExampleClass() 185133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance.TestMethod(instance, 'one', 'two', 'nine') 185233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 185333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 185433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance.TestMethod(instance, 'one', 'two', 'nine') 185533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 185633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 185733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 185833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 185933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Bound_SpecialArgs(self): 186033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, 'SpecialArgs') 186133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance = mox_helper.ExampleClass() 186233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance.SpecialArgs(instance, 'foo', None, bar='bar') 186333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 186433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 186533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck instance.SpecialArgs(instance, 'foo', None, bar='bar') 186633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 186733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 186833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 186933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 187033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutMethod_Func_PropgatesExceptions(self): 187133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Errors in Func comparator should propagate to the calling method.""" 187233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class TestException(Exception): 187333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 187433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 187533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def raiseExceptionOnNotOne(value): 187633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if value == 1: 187733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return True 187833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck else: 187933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck raise TestException 188033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 188133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_obj = TestClass() 188233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(test_obj, 'MethodWithArgs') 188333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_obj.MethodWithArgs( 188433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.IgnoreArg(), mox.Func(raiseExceptionOnNotOne)).AndReturn(1) 188533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_obj.MethodWithArgs( 188633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.IgnoreArg(), mox.Func(raiseExceptionOnNotOne)).AndReturn(1) 188733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 188833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 188933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(test_obj.MethodWithArgs('ignored', 1), 1) 189033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(TestException, 189133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck test_obj.MethodWithArgs, 'ignored', 2) 189233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 189333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 189433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 189533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 189633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOut_SignatureMatching_init_(self): 189733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, '__init__') 189833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ExampleClass.__init__(mox.IgnoreArg()) 189933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 190033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 190133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Create an instance of a child class, which calls the parent 190233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # __init__ 190333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.ChildExampleClass() 190433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 190533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 190633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 190733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 190833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # FIXME(dhellmann): Skip this test until someone can debug why it 190933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # fails on python 3.4. 191033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 191133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @testtools.skipIf(six.PY3, "This test needs to be fixed for python 3") 191233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClass_OldStyle(self): 191333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test a mocked class whose __init__ returns a Mock.""" 191433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper, 'TestClassFromAnotherModule') 191533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isinstance(mox_helper.TestClassFromAnotherModule, 191633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.MockObject)) 191733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 191833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_instance = self.mox.CreateMock( 191933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.TestClassFromAnotherModule) 192033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.TestClassFromAnotherModule().AndReturn(mock_instance) 192133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_instance.Value().AndReturn('mock instance') 192233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 192333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 192433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 192533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck a_mock = mox_helper.TestClassFromAnotherModule() 192633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual = a_mock.Value() 192733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 192833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 192933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 193033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('mock instance', actual) 193133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 193233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClass(self): 193333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutClassWithMocks(mox_helper, 'CallableClass') 193433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 193533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Instance one 193633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_one = mox_helper.CallableClass(1, 2) 193733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_one.Value().AndReturn('mock') 193833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 193933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Instance two 194033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_two = mox_helper.CallableClass(8, 9) 194133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_two('one').AndReturn('called mock') 194233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 194333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 194433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 194533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck one = mox_helper.CallableClass(1, 2) 194633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_one = one.Value() 194733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 194833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck two = mox_helper.CallableClass(8, 9) 194933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck actual_two = two('one') 195033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 195133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 195233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 195333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 195433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Verify the correct mocks were returned 195533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(mock_one, one) 195633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(mock_two, two) 195733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 195833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Verify 195933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('mock', actual_one) 196033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual('called mock', actual_two) 196133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 196233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClass_NotAClass(self): 196333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(TypeError, self.mox.StubOutClassWithMocks, 196433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper, 'MyTestFunction') 196533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 196633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClassNotEnoughCreated(self): 196733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutClassWithMocks(mox_helper, 'CallableClass') 196833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 196933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass(1, 2) 197033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass(8, 9) 197133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 197233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 197333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass(1, 2) 197433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 197533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.ExpectedMockCreationError, self.mox.VerifyAll) 197633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 197733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 197833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClassWrongSignature(self): 197933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutClassWithMocks(mox_helper, 'CallableClass') 198033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 198133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, mox_helper.CallableClass) 198233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 198333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 198433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 198533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClassWrongParameters(self): 198633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutClassWithMocks(mox_helper, 'CallableClass') 198733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 198833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass(1, 2) 198933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 199033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 199133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 199233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMethodCallError, 199333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass, 8, 9) 199433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 199533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 199633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClassTooManyCreated(self): 199733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutClassWithMocks(mox_helper, 'CallableClass') 199833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 199933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass(1, 2) 200033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 200133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 200233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass(1, 2) 200333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnexpectedMockCreationError, 200433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox_helper.CallableClass, 8, 9) 200533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 200633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 200733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 200833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testWarnsUserIfMockingMock(self): 200933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that user is warned if they try to stub out a MockAnything.""" 201033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(TestClass, 'MyStaticMethod') 201133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(TypeError, self.mox.StubOutWithMock, TestClass, 201233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 'MyStaticMethod') 201333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 201433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutFirstClassMethodVerifiesSignature(self): 201533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper, 'MyTestFunction') 201633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 201733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Wrong number of arguments 201833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, mox_helper.MyTestFunction, 1) 201933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 202033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 202133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def _testMethodSignatureVerification(self, stubClass): 202233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # If stubClass is true, the test is run against an a stubbed out class, 202333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # else the test is run against a stubbed out instance. 202433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck if stubClass: 202533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, "TestMethod") 202633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck obj = mox_helper.ExampleClass() 202733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck else: 202833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck obj = mox_helper.ExampleClass() 202933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(mox_helper.ExampleClass, "TestMethod") 203033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, obj.TestMethod) 203133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, obj.TestMethod, 1) 203233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, obj.TestMethod, nine=2) 203333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck obj.TestMethod(1, 2) 203433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck obj.TestMethod(1, 2, 3) 203533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck obj.TestMethod(1, 2, nine=3) 203633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(AttributeError, obj.TestMethod, 1, 2, 3, 4) 203733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 203833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 203933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutClassMethodVerifiesSignature(self): 204033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._testMethodSignatureVerification(stubClass=True) 204133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 204233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutObjectMethodVerifiesSignature(self): 204333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._testMethodSignatureVerification(stubClass=False) 204433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 204533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubOutObject(self): 204633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test than object is replaced with a Mock.""" 204733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 204833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck class Foo(object): 204933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __init__(self): 205033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.obj = TestClass() 205133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 205233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck foo = Foo() 205333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(foo, "obj") 205433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isinstance(foo.obj, mox.MockObject)) 205533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck foo.obj.ValidCall() 205633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 205733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 205833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck foo.obj.ValidCall() 205933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 206033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 206133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() 206233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(isinstance(foo.obj, mox.MockObject)) 206333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 206433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testForgotReplayHelpfulMessage(self): 206533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """If there is an AttributeError on a MockMethod, give helpful msg.""" 206633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck foo = self.mox.CreateMockAnything() 206733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck bar = self.mox.CreateMockAnything() 206833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck foo.GetBar().AndReturn(bar) 206933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck bar.ShowMeTheMoney() 207033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Forgot to replay! 207133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck try: 207233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck foo.GetBar().ShowMeTheMoney() 207333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck except AttributeError as e: 207433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual( 207533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 'MockMethod has no attribute "ShowMeTheMoney". ' 207633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 'Did you remember to put your mocks in replay mode?', str(e)) 207733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 207833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 207933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ReplayTest(testtools.TestCase): 208033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify Replay works properly.""" 208133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 208233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testReplay(self): 208333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Replay should put objects into replay mode.""" 208433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = mox.MockObject(TestClass) 208533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mock_obj._replay_mode) 208633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.Replay(mock_obj) 208733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mock_obj._replay_mode) 208833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 208933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 209033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MoxTestBaseTest(testtools.TestCase): 209133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify that all tests in class derived from MoxTestBase are wrapped.""" 209233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 209333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 209433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MoxTestBaseTest, self).setUp() 209533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox = mox.Mox() 209633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.addCleanup(self.mox.UnsetStubs) 209733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_mox = mox.Mox() 209833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.addCleanup(self.test_mox.UnsetStubs) 209933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs = mox.stubout.StubOutForTesting() 210033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.addCleanup(self.test_stubs.UnsetAll) 210133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.addCleanup(self.test_stubs.SmartUnsetAll) 210233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.result = testtools.TestResult() 210333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 210433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def _setUpTestClass(self): 210533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Replacement for setUp in the test class instance. 210633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 210733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck Assigns a mox.Mox instance as the mox attribute of the test instance. 210833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck Replacement Mox instance is under our control before setUp is called 210933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck in the test class instance. 211033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 211133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.mox = self.test_mox 211233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.stubs = self.test_stubs 211333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 211433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def _CreateTest(self, test_name): 211533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Create a test from our example mox class. 211633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 211733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck The created test instance is assigned to this instances test attribute. 211833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 211933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test = mox_helper.ExampleMoxTest(test_name) 212033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.stubs.Set(self.test, 'setUp', self._setUpTestClass) 212133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 212233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def _VerifySuccess(self): 212333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Run the checks to confirm test method completed successfully.""" 212433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_mox, 'UnsetStubs') 212533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_mox, 'VerifyAll') 212633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'UnsetAll') 212733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'SmartUnsetAll') 212833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_mox.UnsetStubs() 212933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_mox.VerifyAll() 213033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.UnsetAll() 213133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.SmartUnsetAll() 213233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 213333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.run(result=self.result) 213433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(self.result.wasSuccessful()) 213533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 213633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.UnsetStubs() # Needed to call the real VerifyAll() below. 213733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_mox.VerifyAll() 213833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 213933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSuccess(self): 214033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Successful test method execution test.""" 214133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testSuccess') 214233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._VerifySuccess() 214333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 214433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testSuccessNoMocks(self): 214533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """testSuccess() unsets all the mocks. Vverify they've been unset.""" 214633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testSuccess') 214733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.run(result=self.result) 214833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(self.result.wasSuccessful()) 214933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(OS_LISTDIR, mox_helper.os.listdir) 215033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 215133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubs(self): 215233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that "self.stubs" is provided as is useful.""" 215333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testHasStubs') 215433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._VerifySuccess() 215533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 215633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testStubsNoMocks(self): 215733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Let testHasStubs() unset the stubs by itself.""" 215833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testHasStubs') 215933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.run(result=self.result) 216033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(self.result.wasSuccessful()) 216133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(OS_LISTDIR, mox_helper.os.listdir) 216233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 216333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testExpectedNotCalled(self): 216433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Stubbed out method is not called.""" 216533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testExpectedNotCalled') 216633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_mox, 'UnsetStubs') 216733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'UnsetAll') 216833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'SmartUnsetAll') 216933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Don't stub out VerifyAll - that's what causes the test to fail 217033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_mox.UnsetStubs() 217133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.UnsetAll() 217233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.SmartUnsetAll() 217333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 217433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.run(result=self.result) 217533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(self.result.wasSuccessful()) 217633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 217733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 217833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testExpectedNotCalledNoMocks(self): 217933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Let testExpectedNotCalled() unset all the mocks by itself.""" 218033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testExpectedNotCalled') 218133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.run(result=self.result) 218233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(self.result.wasSuccessful()) 218333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(OS_LISTDIR, mox_helper.os.listdir) 218433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 218533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testUnexpectedCall(self): 218633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Stubbed out method is called with unexpected arguments.""" 218733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testUnexpectedCall') 218833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_mox, 'UnsetStubs') 218933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'UnsetAll') 219033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'SmartUnsetAll') 219133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Ensure no calls are made to VerifyAll() 219233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_mox, 'VerifyAll') 219333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_mox.UnsetStubs() 219433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.UnsetAll() 219533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.SmartUnsetAll() 219633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 219733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.run(result=self.result) 219833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(self.result.wasSuccessful()) 219933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 220033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 220133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testFailure(self): 220233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Failing assertion in test method.""" 220333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testFailure') 220433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_mox, 'UnsetStubs') 220533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'UnsetAll') 220633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_stubs, 'SmartUnsetAll') 220733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck # Ensure no calls are made to VerifyAll() 220833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.StubOutWithMock(self.test_mox, 'VerifyAll') 220933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_mox.UnsetStubs() 221033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.UnsetAll() 221133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test_stubs.SmartUnsetAll() 221233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.ReplayAll() 221333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.test.run(result=self.result) 221433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(self.result.wasSuccessful()) 221533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.mox.VerifyAll() 221633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 221733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMixin(self): 221833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Run test from mix-in test class, ensure it passes.""" 221933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testStat') 222033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._VerifySuccess() 222133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 222233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMixinAgain(self): 222333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Run same test as above but from the current test class. 222433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 222533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck Ensures metaclass properly wrapped test methods from all base classes. 222633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck If unsetting of stubs doesn't happen, this will fail. 222733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 222833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._CreateTest('testStatOther') 222933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self._VerifySuccess() 223033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 223133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 223233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass VerifyTest(testtools.TestCase): 223333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify Verify works properly.""" 223433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 223533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testVerify(self): 223633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify should be called for all objects. 223733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 223833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck Should throw an exception because the expected behavior did not occur. 223933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """ 224033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = mox.MockObject(TestClass) 224133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCall() 224233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj._Replay() 224333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.ExpectedMethodCallsError, mox.Verify, mock_obj) 224433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 224533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 224633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ResetTest(testtools.TestCase): 224733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Verify Reset works properly.""" 224833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 224933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testReset(self): 225033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should empty all queues and put mocks in record mode.""" 225133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj = mox.MockObject(TestClass) 225233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj.ValidCall() 225333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mock_obj._replay_mode) 225433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_obj._Replay() 225533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(mock_obj._replay_mode) 225633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(1, len(mock_obj._expected_calls_queue)) 225733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 225833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mox.Reset(mock_obj) 225933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertFalse(mock_obj._replay_mode) 226033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(0, len(mock_obj._expected_calls_queue)) 226133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 226233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 226333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MyTestCase(testtools.TestCase): 226433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Simulate the use of a fake wrapper around Python's unittest library.""" 226533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 226633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 226733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MyTestCase, self).setUp() 226833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.critical_variable = 42 226933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.another_critical_variable = 42 227033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 227133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMethodOverride(self): 227233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should be properly overriden in a derived class.""" 227333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(42, self.another_critical_variable) 227433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.another_critical_variable += 1 227533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 227633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 227733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MoxTestBaseMultipleInheritanceTest(mox.MoxTestBase, MyTestCase): 227833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Test that multiple inheritance can be used with MoxTestBase.""" 227933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 228033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setUp(self): 228133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MoxTestBaseMultipleInheritanceTest, self).setUp() 228233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.another_critical_variable = 99 228333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 228433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMultipleInheritance(self): 228533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should be able to access members created by all parent setUp().""" 228633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertTrue(isinstance(self.mox, mox.Mox)) 228733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(42, self.critical_variable) 228833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 228933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testMethodOverride(self): 229033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Should run before MyTestCase.testMethodOverride.""" 229133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(99, self.another_critical_variable) 229233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.another_critical_variable = 42 229333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck super(MoxTestBaseMultipleInheritanceTest, self).testMethodOverride() 229433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertEqual(43, self.another_critical_variable) 229533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 229633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 229733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass MoxTestDontMockProperties(MoxTestBaseTest): 229833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def testPropertiesArentMocked(self): 229933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck mock_class = self.mox.CreateMock(ClassWithProperties) 230033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.assertRaises(mox.UnknownMethodCallError, 230133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck lambda: mock_class.prop_attr) 230233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 230333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 230433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass TestClass(object): 230533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """This class is used only for testing the mock framework.""" 230633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 230733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck SOME_CLASS_VAR = "test_value" 230833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck _PROTECTED_CLASS_VAR = "protected value" 230933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 231033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __init__(self, ivar=None): 231133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.__ivar = ivar 231233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 231333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __eq__(self, rhs): 231433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return self.__ivar == rhs 231533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 231633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __ne__(self, rhs): 231733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return not self.__eq__(rhs) 231833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 231933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def ValidCall(self): 232033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 232133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 232233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def MethodWithArgs(self, one, two, nine=None): 232333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 232433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 232533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def OtherValidCall(self): 232633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 232733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 232833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def OptionalArgs(self, foo='boom'): 232933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 233033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 233133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def ValidCallWithArgs(self, *args, **kwargs): 233233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 233333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 233433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @classmethod 233533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def MyClassMethod(cls): 233633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 233733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 233833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck @staticmethod 233933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def MyStaticMethod(): 234033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 234133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 234233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def _ProtectedCall(self): 234333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 234433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 234533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __PrivateCall(self): 234633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 234733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 234833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __DoNotMock(self): 234933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 235033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 235133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __getitem__(self, key): 235233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Return the value for key.""" 235333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return self.d[key] 235433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 235533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __setitem__(self, key, value): 235633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Set the value for key to value.""" 235733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck self.d[key] = value 235833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 235933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __contains__(self, key): 236033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """Returns True if d contains the key.""" 236133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return key in self.d 236233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 236333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __iter__(self): 236433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 236533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 236633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 236733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ChildClass(TestClass): 236833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """This inherits from TestClass.""" 236933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __init__(self): 237033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck TestClass.__init__(self) 237133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 237233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def ChildValidCall(self): 237333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 237433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 237533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 237633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass CallableClass(object): 237733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """This class is callable, and that should be mockable!""" 237833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 237933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __init__(self): 238033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 238133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 238233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __call__(self, param): 238333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck return param 238433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 238533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 238633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass ClassWithProperties(object): 238733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def setter_attr(self, value): 238833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 238933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 239033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def getter_attr(self): 239133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 239233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 239333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck prop_attr = property(getter_attr, setter_attr) 239433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 239533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 239633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass SubscribtableNonIterableClass(object): 239733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck def __getitem__(self, index): 239833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck raise IndexError 239933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 240033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 240133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass InheritsFromCallable(CallableClass): 240233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck """This class should be mockable; it inherits from a callable class.""" 240333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 240433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck pass 240533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 240633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck 240733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckif __name__ == '__main__': 240833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck testtools.main() 2409