diff options
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/testing/functionmock_test.html')
-rw-r--r-- | contexts/data/lib/closure-library/closure/goog/testing/functionmock_test.html | 511 |
1 files changed, 0 insertions, 511 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/testing/functionmock_test.html b/contexts/data/lib/closure-library/closure/goog/testing/functionmock_test.html deleted file mode 100644 index e2e2515..0000000 --- a/contexts/data/lib/closure-library/closure/goog/testing/functionmock_test.html +++ /dev/null @@ -1,511 +0,0 @@ -<!DOCTYPE html> -<!-- - - Test mocking global / top-level functions - ---> - -<html> -<!-- -Copyright 2008 The Closure Library Authors. All Rights Reserved. - -Use of this source code is governed by the Apache License, Version 2.0. -See the COPYING file for details. ---> -<head> -<meta http-equiv="X-UA-Compatible" content="IE=edge"> -<title>Global Mock Unit Test</title> -<script src="../base.js"></script> -<script> - goog.require('goog.array'); - goog.require('goog.testing.asserts'); - goog.require('goog.testing.FunctionMock'); - goog.require('goog.testing.GlobalFunctionMock'); - goog.require('goog.testing.MethodMock'); - goog.require('goog.testing.Mock'); - goog.require('goog.testing.StrictMock'); - goog.require('goog.testing.jsunit'); -</script> -</head> -<body> -<script> - -// Global scope so we can tear it down safely -var mockGlobal; - -function tearDown() { - if (mockGlobal) { - mockGlobal.$tearDown(); - } -} - - -//----- Tests for goog.testing.FunctionMock - -function testMockFunctionCallOrdering() { - var doOneTest = function(mockFunction, success, expected_args, actual_args) { - goog.array.forEach(expected_args, function(arg) { mockFunction(arg); }); - mockFunction.$replay(); - var callFunction = function() { - goog.array.forEach(actual_args, function(arg) { mockFunction(arg); }); - mockFunction.$verify(); - }; - if (success) { - callFunction(); - } else { - assertThrows(callFunction); - } - }; - - var doTest = function(strict_ok, loose_ok, expected_args, actual_args) { - doOneTest(goog.testing.createFunctionMock(), strict_ok, - expected_args, actual_args); - doOneTest(goog.testing.createFunctionMock('name'), strict_ok, - expected_args, actual_args); - doOneTest(goog.testing.createFunctionMock('name', goog.testing.Mock.STRICT), - strict_ok, expected_args, actual_args); - doOneTest(goog.testing.createFunctionMock('name', goog.testing.Mock.LOOSE), - loose_ok, expected_args, actual_args); - } - - doTest(true, true, [1, 2], [1, 2]); - doTest(false, true, [1, 2], [2, 1]); - doTest(false, false, [1, 2], [2, 2]); - doTest(false, false, [1, 2], [1]); - doTest(false, false, [1, 2], [1, 1]); - doTest(false, false, [1, 2], [1]); -} - -function testMocksFunctionWithNoArgs() { - var mockFoo = goog.testing.createFunctionMock(); - mockFoo(); - mockFoo.$replay(); - mockFoo(); - mockFoo.$verify(); -} - -function testMocksFunctionWithOneArg() { - var mockFoo = goog.testing.createFunctionMock(); - mockFoo('x'); - mockFoo.$replay(); - mockFoo('x'); - mockFoo.$verify(); -} - -function testMocksFunctionWithMultipleArgs() { - var mockFoo = goog.testing.createFunctionMock(); - mockFoo('x', 'y'); - mockFoo.$replay(); - mockFoo('x', 'y'); - mockFoo.$verify(); -} - -function testFailsIfCalledWithIncorrectArgs() { - var mockFoo = goog.testing.createFunctionMock(); - - mockFoo(); - mockFoo.$replay(); - assertThrows(function() {mockFoo('x');}); - mockFoo.$reset(); - - mockFoo('x'); - mockFoo.$replay(); - assertThrows(function() {mockFoo();}); - mockFoo.$reset(); - - mockFoo('x'); - mockFoo.$replay(); - assertThrows(function() {mockFoo('x', 'y');}); - mockFoo.$reset(); - - mockFoo('x', 'y'); - mockFoo.$replay(); - assertThrows(function() {mockFoo('x');}); - mockFoo.$reset(); - - mockFoo('correct'); - mockFoo.$replay(); - assertThrows(function() {mockFoo('wrong');}); - mockFoo.$reset(); - - mockFoo('correct', 'args'); - mockFoo.$replay(); - assertThrows(function() {mockFoo('wrong', 'args');}); - mockFoo.$reset(); -} - -function testMocksFunctionWithReturnValue() { - var mockFoo = goog.testing.createFunctionMock(); - mockFoo().$returns('bar'); - mockFoo.$replay(); - assertEquals('bar', mockFoo()); - mockFoo.$verify(); -} - -function testFunctionMockWorksWhenPassedAsACallback() { - var invoker = { - register: function(callback) { - this.callback = callback; - }, - - invoke: function(args) { - return this.callback(args); - } - }; - - var mockFunction = goog.testing.createFunctionMock(); - mockFunction('bar').$returns('baz'); - - mockFunction.$replay(); - invoker.register(mockFunction); - assertEquals('baz', invoker.invoke('bar')); - mockFunction.$verify(); -} - -function testFunctionMockQuacksLikeAStrictMock() { - var mockFunction = goog.testing.createFunctionMock(); - assertQuacksLike(mockFunction, goog.testing.StrictMock); -} - - -//----- Global functions for goog.testing.GlobalFunctionMock to mock - -function globalFoo() { - return 'I am Spartacus!'; -} - -function globalBar(who, what) { - return [who, 'is', what].join(' '); -} - - -//----- Tests for goog.testing.createGlobalFunctionMock - -function testMocksGlobalFunctionWithNoArgs() { - mockGlobal = goog.testing.createGlobalFunctionMock('globalFoo'); - mockGlobal().$returns('No, I am Spartacus!'); - - mockGlobal.$replay(); - assertEquals('No, I am Spartacus!', globalFoo()); - mockGlobal.$verify(); -} - -function testMocksGlobalFunctionUsingGlobalName() { - goog.testing.createGlobalFunctionMock('globalFoo'); - globalFoo().$returns('No, I am Spartacus!'); - - globalFoo.$replay(); - assertEquals('No, I am Spartacus!', globalFoo()); - globalFoo.$verify(); - globalFoo.$tearDown(); -} - -function testMocksGlobalFunctionWithArgs() { - var mockReturnValue = 'Noam is Chomsky!'; - mockGlobal = goog.testing.createGlobalFunctionMock('globalBar'); - mockGlobal('Noam', 'Spartacus').$returns(mockReturnValue); - - mockGlobal.$replay(); - assertEquals(mockReturnValue, globalBar('Noam', 'Spartacus')); - mockGlobal.$verify(); -} - -function testGlobalFunctionMockFailsWithIncorrectArgs() { - mockGlobal = goog.testing.createGlobalFunctionMock('globalBar'); - mockGlobal('a', 'b'); - - mockGlobal.$replay(); - - assertThrows('Mock should have failed because of incorrect arguments', - function() {globalBar('b', 'a')}); -} - -function testGlobalFunctionMockQuacksLikeAFunctionMock() { - mockGlobal = goog.testing.createGlobalFunctionMock('globalFoo'); - assertQuacksLike(mockGlobal, goog.testing.FunctionMock); -} - -function testMockedFunctionsAvailableInGlobalAndGoogGlobalAndWindowScope() { - mockGlobal = goog.testing.createGlobalFunctionMock('globalFoo'); - - // we expect this call 3 times through global, goog.global and window scope - mockGlobal().$times(3); - - mockGlobal.$replay(); - goog.global.globalFoo(); - window.globalFoo(); - globalFoo(); - mockGlobal.$verify(); -} - -function testTearDownRestoresOriginalGlobalFunction() { - mockGlobal = goog.testing.createGlobalFunctionMock('globalFoo'); - mockGlobal().$returns('No, I am Spartacus!'); - - mockGlobal.$replay(); - assertEquals('No, I am Spartacus!', globalFoo()); - mockGlobal.$tearDown(); - assertEquals('I am Spartacus!', globalFoo()); - mockGlobal.$verify(); -} - -function testTearDownHandlesMultipleMocking() { - var mock1 = goog.testing.createGlobalFunctionMock('globalFoo'); - var mock2 = goog.testing.createGlobalFunctionMock('globalFoo'); - var mock3 = goog.testing.createGlobalFunctionMock('globalFoo'); - mock1().$returns('No, I am Spartacus 1!'); - mock2().$returns('No, I am Spartacus 2!'); - mock3().$returns('No, I am Spartacus 3!'); - - mock1.$replay(); - mock2.$replay(); - mock3.$replay(); - assertEquals('No, I am Spartacus 3!', globalFoo()); - mock3.$tearDown(); - assertEquals('No, I am Spartacus 2!', globalFoo()); - mock2.$tearDown(); - assertEquals('No, I am Spartacus 1!', globalFoo()); - mock1.$tearDown(); - assertEquals('I am Spartacus!', globalFoo()); -} - -function testGlobalFunctionMockCallOrdering() { - var mock = goog.testing.createGlobalFunctionMock('globalFoo'); - mock(1); - mock(2); - mock.$replay(); - assertThrows(function(){globalFoo(2);}); - mock.$tearDown(); - - mock = goog.testing.createGlobalFunctionMock('globalFoo', - goog.testing.Mock.STRICT); - mock(1); - mock(2); - mock.$replay(); - globalFoo(1); - globalFoo(2); - mock.$verify(); - mock.$tearDown(); - - mock = goog.testing.createGlobalFunctionMock('globalFoo', - goog.testing.Mock.STRICT); - mock(1); - mock(2); - mock.$replay(); - assertThrows(function(){globalFoo(2);}); - mock.$tearDown(); - - mock = goog.testing.createGlobalFunctionMock('globalFoo', - goog.testing.Mock.LOOSE); - mock(1); - mock(2); - mock.$replay(); - globalFoo(2); - globalFoo(1); - mock.$verify(); - mock.$tearDown(); -} - -//----- Functions for goog.testing.MethodMock to mock - -var mynamespace = {}; - -mynamespace.myMethod = function() { - return 'I should be mocked.'; -}; - -function testMocksMethod() { - mockMethod = goog.testing.createMethodMock(mynamespace, 'myMethod'); - mockMethod().$returns('I have been mocked!'); - - mockMethod.$replay(); - assertEquals('I have been mocked!', mockMethod()); - mockMethod.$verify(); -} - -function testMocksMethodInNamespace() { - goog.testing.createMethodMock(mynamespace, 'myMethod'); - mynamespace.myMethod().$returns('I have been mocked!'); - - mynamespace.myMethod.$replay(); - assertEquals('I have been mocked!', mynamespace.myMethod()); - mynamespace.myMethod.$verify(); - mynamespace.myMethod.$tearDown(); -} - -function testMethodMockCanOnlyMockExistingMethods() { - assertThrows(function() { - goog.testing.createMethodMock(mynamespace, 'doesNotExist'); - }); -} - -function testMethodMockCallOrdering() { - goog.testing.createMethodMock(mynamespace, 'myMethod'); - mynamespace.myMethod(1); - mynamespace.myMethod(2); - mynamespace.myMethod.$replay(); - assertThrows(function(){mynamespace.myMethod(2);}); - mynamespace.myMethod.$tearDown(); - - goog.testing.createMethodMock(mynamespace, 'myMethod', - goog.testing.Mock.STRICT); - mynamespace.myMethod(1); - mynamespace.myMethod(2); - mynamespace.myMethod.$replay(); - mynamespace.myMethod(1); - mynamespace.myMethod(2); - mynamespace.myMethod.$verify(); - mynamespace.myMethod.$tearDown(); - - goog.testing.createMethodMock(mynamespace, 'myMethod', - goog.testing.Mock.STRICT); - mynamespace.myMethod(1); - mynamespace.myMethod(2); - mynamespace.myMethod.$replay(); - assertThrows(function(){mynamespace.myMethod(2);}); - mynamespace.myMethod.$tearDown(); - - goog.testing.createMethodMock(mynamespace, 'myMethod', - goog.testing.Mock.LOOSE); - mynamespace.myMethod(1); - mynamespace.myMethod(2); - mynamespace.myMethod.$replay(); - mynamespace.myMethod(2); - mynamespace.myMethod(1); - mynamespace.myMethod.$verify(); - mynamespace.myMethod.$tearDown(); -} - -//----- Functions for goog.testing.createConstructorMock to mock - -var constructornamespace = {}; - -constructornamespace.MyConstructor = function() { -}; - -constructornamespace.MyConstructor.prototype.myMethod = function() { - return 'I should be mocked.'; -}; - -constructornamespace.MyConstructorWithArgument = function(argument) { - this.argument_ = argument; -}; - -constructornamespace.MyConstructorWithArgument.prototype.myMethod = function() { - return this.argument_; -}; - -constructornamespace.MyConstructorWithClassMembers = function() { -}; - -constructornamespace.MyConstructorWithClassMembers.CONSTANT = 42; - -constructornamespace.MyConstructorWithClassMembers.classMethod = function() { - return 'class method return value'; -}; - -function testConstructorMock() { - var mockObject = - new goog.testing.StrictMock(constructornamespace.MyConstructor); - var mockConstructor = goog.testing.createConstructorMock( - constructornamespace, 'MyConstructor'); - mockConstructor().$returns(mockObject); - mockObject.myMethod().$returns('I have been mocked!'); - - mockConstructor.$replay(); - mockObject.$replay(); - assertEquals('I have been mocked!', - new constructornamespace.MyConstructor().myMethod()); - mockConstructor.$verify(); - mockObject.$verify(); - mockConstructor.$tearDown(); -} - -function testConstructorMockWithArgument() { - var mockObject = new goog.testing.StrictMock( - constructornamespace.MyConstructorWithArgument); - var mockConstructor = goog.testing.createConstructorMock( - constructornamespace, 'MyConstructorWithArgument'); - mockConstructor(goog.testing.mockmatchers.isString).$returns(mockObject); - mockObject.myMethod().$returns('I have been mocked!'); - - mockConstructor.$replay(); - mockObject.$replay(); - assertEquals('I have been mocked!', - new constructornamespace.MyConstructorWithArgument('I should be mocked.') - .myMethod()); - mockConstructor.$verify(); - mockObject.$verify(); - mockConstructor.$tearDown(); -} - -/** - * Test that class members are copied to the mock constructor. - */ -function testConstructorMockWithClassMembers() { - var mockConstructor = goog.testing.createConstructorMock( - constructornamespace, 'MyConstructorWithClassMembers'); - assertEquals(42, constructornamespace.MyConstructorWithClassMembers.CONSTANT); - assertEquals('class method return value', - constructornamespace.MyConstructorWithClassMembers.classMethod()); - mockConstructor.$tearDown(); -} - -function testConstructorMockCallOrdering() { - var instance = {}; - - goog.testing.createConstructorMock(constructornamespace, - 'MyConstructorWithArgument'); - constructornamespace.MyConstructorWithArgument(1).$returns(instance); - constructornamespace.MyConstructorWithArgument(2).$returns(instance); - constructornamespace.MyConstructorWithArgument.$replay(); - assertThrows( - function(){new constructornamespace.MyConstructorWithArgument(2);}); - constructornamespace.MyConstructorWithArgument.$tearDown(); - - goog.testing.createConstructorMock(constructornamespace, - 'MyConstructorWithArgument', - goog.testing.Mock.STRICT); - constructornamespace.MyConstructorWithArgument(1).$returns(instance); - constructornamespace.MyConstructorWithArgument(2).$returns(instance); - constructornamespace.MyConstructorWithArgument.$replay(); - new constructornamespace.MyConstructorWithArgument(1); - new constructornamespace.MyConstructorWithArgument(2); - constructornamespace.MyConstructorWithArgument.$verify(); - constructornamespace.MyConstructorWithArgument.$tearDown(); - - goog.testing.createConstructorMock(constructornamespace, - 'MyConstructorWithArgument', - goog.testing.Mock.STRICT); - constructornamespace.MyConstructorWithArgument(1).$returns(instance); - constructornamespace.MyConstructorWithArgument(2).$returns(instance); - constructornamespace.MyConstructorWithArgument.$replay(); - assertThrows( - function(){new constructornamespace.MyConstructorWithArgument(2);}); - constructornamespace.MyConstructorWithArgument.$tearDown(); - - goog.testing.createConstructorMock(constructornamespace, - 'MyConstructorWithArgument', - goog.testing.Mock.LOOSE); - constructornamespace.MyConstructorWithArgument(1).$returns(instance); - constructornamespace.MyConstructorWithArgument(2).$returns(instance); - constructornamespace.MyConstructorWithArgument.$replay(); - new constructornamespace.MyConstructorWithArgument(2); - new constructornamespace.MyConstructorWithArgument(1); - constructornamespace.MyConstructorWithArgument.$verify(); - constructornamespace.MyConstructorWithArgument.$tearDown(); -} - -//----- Helper assertions - -function assertQuacksLike(obj, target) { - for (meth in target.prototype) { - if (!goog.string.endsWith(meth, '_')) { - assertNotUndefined('Should have implemented '+ meth +'()', obj[meth]); - } - } -} -</script> - -</body> -</html> |