// Copyright 2008 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.provide('goog.testing.MockControlTest'); goog.setTestOnly('goog.testing.MockControlTest'); goog.require('goog.testing.Mock'); goog.require('goog.testing.MockControl'); goog.require('goog.testing.jsunit'); // Emulate the behavior of a mock. function MockMock() { this.replayCalled = false; this.resetCalled = false; this.verifyCalled = false; this.tearDownCalled = false; } MockMock.prototype.$replay = function() { this.replayCalled = true; }; MockMock.prototype.$reset = function() { this.resetCalled = true; }; MockMock.prototype.$verify = function() { this.verifyCalled = true; }; function setUp() { var mock = new goog.testing.Mock(MockMock); } function testAdd() { var mockMock = new MockMock(); var control = new goog.testing.MockControl(); assertEquals(mockMock, control.addMock(mockMock)); } function testReplayAll() { var mockMock1 = new MockMock(); var mockMock2 = new MockMock(); var mockMockExcluded = new MockMock(); var control = new goog.testing.MockControl(); control.addMock(mockMock1); control.addMock(mockMock2); control.$replayAll(); assertTrue(mockMock1.replayCalled); assertTrue(mockMock2.replayCalled); assertFalse(mockMockExcluded.replayCalled); } function testResetAll() { var mockMock1 = new MockMock(); var mockMock2 = new MockMock(); var mockMockExcluded = new MockMock(); var control = new goog.testing.MockControl(); control.addMock(mockMock1); control.addMock(mockMock2); control.$resetAll(); assertTrue(mockMock1.resetCalled); assertTrue(mockMock2.resetCalled); assertFalse(mockMockExcluded.resetCalled); } function testVerifyAll() { var mockMock1 = new MockMock(); var mockMock2 = new MockMock(); var mockMockExcluded = new MockMock(); var control = new goog.testing.MockControl(); control.addMock(mockMock1); control.addMock(mockMock2); control.$verifyAll(); assertTrue(mockMock1.verifyCalled); assertTrue(mockMock2.verifyCalled); assertFalse(mockMockExcluded.verifyCalled); } function testTearDownAll() { var mockMock1 = new MockMock(); var mockMock2 = new MockMock(); var mockMockExcluded = new MockMock(); // $tearDown is optional. mockMock2.$tearDown = function() { this.tearDownCalled = true; }; mockMockExcluded.$tearDown = function() { this.tearDownCalled = true; }; var control = new goog.testing.MockControl(); control.addMock(mockMock1); control.addMock(mockMock2); control.$tearDown(); // mockMock2 has a tearDown method and is in the control. assertTrue(mockMock2.tearDownCalled); assertFalse(mockMock1.tearDownCalled); assertFalse(mockMockExcluded.tearDownCalled); }