UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

242 lines (200 loc) 7 kB
<!DOCTYPE html> <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>Closure Unit Tests - goog.testing.MockClassFactory</title> <script src="../base.js"></script> <script> goog.require('goog.testing.MockClassFactory'); goog.require('goog.testing.jsunit'); </script> </head> <body> <script> goog.provide('fake.BaseClass'); goog.provide('fake.ChildClass'); // Classes that will be mocked. A base class and child class are used to // test inheritance. fake.BaseClass = function(a) { fail('real object should never be called'); }; fake.BaseClass.prototype.foo = function() { fail('real object should never be called'); }; fake.BaseClass.prototype.toString = function() {return 'foo';} fake.BaseClass.prototype.toLocaleString = function() {return 'bar';} fake.ChildClass = function(a) { fail('real object should never be called'); }; goog.inherits(fake.ChildClass, fake.BaseClass); fake.ChildClass.staticFoo = function() { fail('real object should never be called'); }; fake.ChildClass.prototype.bar = function() { fail('real object should never be called'); }; fake.ChildClass.staticProperty = 'staticPropertyOnClass'; function TopLevelBaseClass() { } var mockClassFactory = new goog.testing.MockClassFactory(); var matchers = goog.testing.mockmatchers; function tearDown() { mockClassFactory.reset(); }; function testGetStrictMockClass() { var mock1 = mockClassFactory.getStrictMockClass(fake, fake.BaseClass, 1); mock1.foo(); mock1.$replay(); var mock2 = mockClassFactory.getStrictMockClass(fake, fake.BaseClass, 2); mock2.foo(); mock2.$replay(); var mock3 = mockClassFactory.getStrictMockClass(fake, fake.ChildClass, 3); mock3.foo(); mock3.bar(); mock3.$replay(); var instance1 = new fake.BaseClass(1); instance1.foo(); mock1.$verify(); var instance2 = new fake.BaseClass(2); instance2.foo(); mock2.$verify(); var instance3 = new fake.ChildClass(3); instance3.foo(); instance3.bar(); mock3.$verify(); assertThrows(function() {new fake.BaseClass(-1)}); assertTrue(instance1 instanceof fake.BaseClass); assertTrue(instance2 instanceof fake.BaseClass); assertTrue(instance3 instanceof fake.ChildClass); }; function testGetStrictMockClassCreatesAllProxies() { var mock1 = mockClassFactory.getStrictMockClass(fake, fake.BaseClass, 1); // toString(), toLocaleString() and others are treaded specially in // createProxy_(). mock1.toString(); mock1.toLocaleString(); mock1.$replay(); var instance1 = new fake.BaseClass(1); instance1.toString(); instance1.toLocaleString(); mock1.$verify(); } function testGetLooseMockClass() { var mock1 = mockClassFactory.getLooseMockClass(fake, fake.BaseClass, 1); mock1.foo().$anyTimes().$returns(3); mock1.$replay(); var mock2 = mockClassFactory.getLooseMockClass(fake, fake.BaseClass, 2); mock2.foo().$times(3); mock2.$replay(); var mock3 = mockClassFactory.getLooseMockClass(fake, fake.ChildClass, 3); mock3.foo().$atLeastOnce().$returns(5); mock3.bar().$atLeastOnce(); mock3.$replay(); var instance1 = new fake.BaseClass(1); assertEquals(3, instance1.foo()); assertEquals(3, instance1.foo()); assertEquals(3, instance1.foo()); assertEquals(3, instance1.foo()); assertEquals(3, instance1.foo()); mock1.$verify(); var instance2 = new fake.BaseClass(2); instance2.foo(); instance2.foo(); instance2.foo(); mock2.$verify(); var instance3 = new fake.ChildClass(3); assertEquals(5, instance3.foo()); assertEquals(5, instance3.foo()); instance3.bar(); mock3.$verify(); assertThrows(function() {new fake.BaseClass(-1)}); assertTrue(instance1 instanceof fake.BaseClass); assertTrue(instance2 instanceof fake.BaseClass); assertTrue(instance3 instanceof fake.ChildClass); }; function testGetStrictStaticMock() { var staticMock = mockClassFactory.getStrictStaticMock(fake, fake.ChildClass); var mock = mockClassFactory.getStrictMockClass(fake, fake.ChildClass, 1); mock.foo(); mock.bar(); staticMock.staticFoo(); mock.$replay(); staticMock.$replay(); var instance = new fake.ChildClass(1); instance.foo(); instance.bar(); fake.ChildClass.staticFoo(); mock.$verify(); staticMock.$verify(); assertTrue(instance instanceof fake.BaseClass); assertTrue(instance instanceof fake.ChildClass); assertThrows(function() { mockClassFactory.getLooseStaticMock(fake, fake.ChildClass) }); }; function testGetStrictStaticMockKeepsStaticProperties() { var OriginalChildClass = fake.ChildClass; var staticMock = mockClassFactory.getStrictStaticMock(fake, fake.ChildClass); assertEquals(OriginalChildClass.staticProperty, fake.ChildClass.staticProperty); }; function testGetLooseStaticMockKeepsStaticProperties() { var OriginalChildClass = fake.ChildClass; var staticMock = mockClassFactory.getLooseStaticMock(fake, fake.ChildClass); assertEquals(OriginalChildClass.staticProperty, fake.ChildClass.staticProperty); }; function testGetLooseStaticMock() { var staticMock = mockClassFactory.getLooseStaticMock(fake, fake.ChildClass); var mock = mockClassFactory.getStrictMockClass(fake, fake.ChildClass, 1); mock.foo(); mock.bar(); staticMock.staticFoo().$atLeastOnce(); mock.$replay(); staticMock.$replay(); var instance = new fake.ChildClass(1); instance.foo(); instance.bar(); fake.ChildClass.staticFoo(); fake.ChildClass.staticFoo(); mock.$verify(); staticMock.$verify(); assertTrue(instance instanceof fake.BaseClass); assertTrue(instance instanceof fake.ChildClass); assertThrows(function() { mockClassFactory.getStrictStaticMock(fake, fake.ChildClass) }); }; function testFlexibleClassMockInstantiation() { // This mock should be returned for all instances created with a number // as the first argument. var mock = mockClassFactory.getStrictMockClass(fake, fake.ChildClass, matchers.isNumber); mock.foo(); // Will be called by the first mock instance. mock.foo(); // Will be called by the second mock instance. mock.$replay(); var instance1 = new fake.ChildClass(1); var instance2 = new fake.ChildClass(2); instance1.foo(); instance2.foo(); assertThrows(function() { new fake.ChildClass('foo'); }); mock.$verify(); }; function testMockTopLevelClass() { var mock = mockClassFactory.getStrictMockClass(goog.global, goog.global.TopLevelBaseClass); } </script> </body> </html>