211 lines
5.6 KiB
JavaScript
211 lines
5.6 KiB
JavaScript
// Copyright 2014 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.labs.testing.environmentTest');
|
|
goog.setTestOnly('goog.labs.testing.environmentTest');
|
|
|
|
goog.require('goog.labs.testing.Environment');
|
|
goog.require('goog.testing.MockControl');
|
|
goog.require('goog.testing.TestCase');
|
|
goog.require('goog.testing.jsunit');
|
|
|
|
var testCase = null;
|
|
var mockControl = null;
|
|
|
|
// Use this flag to control whether the global JsUnit lifecycle events are being
|
|
// called as part of the test lifecycle or as part of the "mocked" environment.
|
|
var testing = false;
|
|
|
|
function setUp() {
|
|
if (testing) {
|
|
return;
|
|
}
|
|
|
|
// Temporarily override the initializeTestRunner method to avoid installing
|
|
// our "test" TestCase.
|
|
var initFn = goog.testing.TestCase.initializeTestRunner;
|
|
goog.testing.TestCase.initializeTestRunner = function() {};
|
|
testCase = new goog.labs.testing.EnvironmentTestCase_();
|
|
goog.labs.testing.EnvironmentTestCase_.getInstance = function() {
|
|
return testCase;
|
|
};
|
|
goog.testing.TestCase.initializeTestRunner = initFn;
|
|
|
|
mockControl = new goog.testing.MockControl();
|
|
}
|
|
|
|
function tearDown() {
|
|
if (testing) {
|
|
return;
|
|
}
|
|
|
|
mockControl.$resetAll();
|
|
mockControl.$tearDown();
|
|
}
|
|
|
|
function testLifecycle() {
|
|
testing = true;
|
|
|
|
var envOne = mockControl.createStrictMock(goog.labs.testing.Environment);
|
|
var envTwo = mockControl.createStrictMock(goog.labs.testing.Environment);
|
|
var envThree = mockControl.createStrictMock(goog.labs.testing.Environment);
|
|
var testMethod = mockControl.createFunctionMock('testMethod');
|
|
|
|
testCase.addNewTest('testFake', testMethod);
|
|
|
|
testCase.registerEnvironment_(envOne);
|
|
testCase.registerEnvironment_(envTwo);
|
|
testCase.registerEnvironment_(envThree);
|
|
|
|
envOne.setUpPage();
|
|
envTwo.setUpPage();
|
|
envThree.setUpPage();
|
|
|
|
envOne.setUp();
|
|
envTwo.setUp();
|
|
envThree.setUp();
|
|
|
|
testMethod();
|
|
|
|
envThree.tearDown();
|
|
envTwo.tearDown();
|
|
envOne.tearDown();
|
|
|
|
envThree.tearDownPage();
|
|
envTwo.tearDownPage();
|
|
envOne.tearDownPage();
|
|
|
|
mockControl.$replayAll();
|
|
testCase.runTests();
|
|
mockControl.$verifyAll();
|
|
|
|
testing = false;
|
|
}
|
|
|
|
function testTearDownWithMockControl() {
|
|
testing = true;
|
|
|
|
var envWith = new goog.labs.testing.Environment();
|
|
var envWithout = new goog.labs.testing.Environment();
|
|
|
|
var mockControlMock = mockControl.createStrictMock(goog.testing.MockControl);
|
|
var mockControlCtorMock = mockControl.createMethodMock(goog.testing,
|
|
'MockControl');
|
|
mockControlCtorMock().$times(1).$returns(mockControlMock);
|
|
// Expecting verify / reset calls twice since two environments use the same
|
|
// mockControl, but only one created it and is allowed to tear it down.
|
|
mockControlMock.$verifyAll();
|
|
mockControlMock.$replayAll();
|
|
mockControlMock.$verifyAll();
|
|
mockControlMock.$resetAll();
|
|
mockControlMock.$tearDown().$times(1);
|
|
mockControlMock.$verifyAll();
|
|
mockControlMock.$replayAll();
|
|
mockControlMock.$verifyAll();
|
|
mockControlMock.$resetAll();
|
|
|
|
mockControl.$replayAll();
|
|
envWith.withMockControl();
|
|
envWithout.mockControl = mockControlMock;
|
|
envWith.tearDown();
|
|
envWithout.tearDown();
|
|
mockControl.$verifyAll();
|
|
mockControl.$resetAll();
|
|
|
|
testing = false;
|
|
}
|
|
|
|
function testAutoDiscoverTests() {
|
|
testing = true;
|
|
|
|
var setUpPageFn = testCase.setUpPage;
|
|
var setUpFn = testCase.setUp;
|
|
var tearDownFn = testCase.tearDownFn;
|
|
var tearDownPageFn = testCase.tearDownPageFn;
|
|
|
|
testCase.autoDiscoverTests();
|
|
|
|
assertEquals(setUpPageFn, testCase.setUpPage);
|
|
assertEquals(setUpFn, testCase.setUp);
|
|
assertEquals(tearDownFn, testCase.tearDownFn);
|
|
assertEquals(tearDownPageFn, testCase.tearDownPageFn);
|
|
|
|
// Note that this number changes when more tests are added to this file as
|
|
// the environment reflects on the window global scope for JsUnit.
|
|
assertEquals(6, testCase.tests_.length);
|
|
|
|
testing = false;
|
|
}
|
|
|
|
function testMockClock() {
|
|
testing = true;
|
|
|
|
var env = new goog.labs.testing.Environment().withMockClock();
|
|
|
|
testCase.addNewTest('testThatThrowsEventually', function() {
|
|
setTimeout(function() {
|
|
throw new Error('LateErrorMessage');
|
|
}, 200);
|
|
});
|
|
|
|
testCase.runTests();
|
|
assertTestFailure(testCase, 'testThatThrowsEventually', 'LateErrorMessage');
|
|
|
|
testing = false;
|
|
}
|
|
|
|
function testMockControl() {
|
|
testing = true;
|
|
|
|
var env = new goog.labs.testing.Environment().withMockControl();
|
|
var test = env.mockControl.createFunctionMock('test');
|
|
|
|
testCase.addNewTest('testWithoutVerify', function() {
|
|
test();
|
|
env.mockControl.$replayAll();
|
|
test();
|
|
});
|
|
|
|
testCase.runTests();
|
|
assertNull(env.mockClock);
|
|
|
|
testing = false;
|
|
}
|
|
|
|
function testMock() {
|
|
testing = true;
|
|
|
|
var env = new goog.labs.testing.Environment().withMockControl();
|
|
var mock = env.mock({
|
|
test: function() {}
|
|
});
|
|
|
|
testCase.addNewTest('testMockCalled', function() {
|
|
mock.test().$times(2);
|
|
|
|
env.mockControl.$replayAll();
|
|
mock.test();
|
|
mock.test();
|
|
env.mockControl.verifyAll();
|
|
});
|
|
|
|
testCase.runTests();
|
|
|
|
testing = false;
|
|
}
|
|
|
|
function assertTestFailure(testCase, name, message) {
|
|
assertContains(message, testCase.result_.resultsByName[name][0]);
|
|
}
|