UNPKG

sku-pg

Version:

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

224 lines (179 loc) 5.92 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. --> <!-- @author nicksantos@google.com (Nick Santos) --> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Closure Unit Tests - goog.functions</title> <script src="../base.js"></script> <script> goog.require('goog.functions'); goog.require('goog.testing.jsunit'); </script> </head> <body> <script> var callOrder; var fTrue = makeCallOrderLogger('fTrue', true); var gFalse = makeCallOrderLogger('gFalse', false); var hTrue = makeCallOrderLogger('hTrue', true); function setUp() { callOrder = []; } function testTrue() { assertTrue(goog.functions.TRUE()); } function testFalse() { assertFalse(goog.functions.FALSE()); } function testLock() { function add(var_args) { var result = 0; for (var i = 0; i < arguments.length; i++) { result += arguments[i]; } return result; } assertEquals(6, add(1, 2, 3)); assertEquals(0, goog.functions.lock(add)(1, 2, 3)); assertEquals(3, goog.functions.lock(add, 2)(1, 2, 3)); assertEquals(6, goog.partial(add, 1, 2)(3)); assertEquals(3, goog.functions.lock(goog.partial(add, 1, 2))(3)); } function testIdentity() { assertEquals(3, goog.functions.identity(3)); assertEquals(3, goog.functions.identity(3, 4, 5, 6)); assertEquals('Hi there', goog.functions.identity('Hi there')); assertEquals(null, goog.functions.identity(null)); assertEquals(undefined, goog.functions.identity()); var arr = [1, 'b', null]; assertEquals(arr, goog.functions.identity(arr)); var obj = {a: 'ay', b: 'bee', c: 'see'}; assertEquals(obj, goog.functions.identity(obj)); } function testConstant() { assertEquals(3, goog.functions.constant(3)()); assertEquals(undefined, goog.functions.constant()()); } function testError() { var f = goog.functions.error('x'); var e = assertThrows( 'A function created by goog.functions.error must throw an error', f); assertEquals('x', e.message); } function testFail() { var obj = {}; var f = goog.functions.fail(obj); var e = assertThrows( 'A function created by goog.functions.raise must throw its input', f); assertEquals(obj, e); } function testCompose() { var add2 = function(x) { return x + 2; }; var double = function(x) { return x * 2; }; assertEquals(6, goog.functions.compose(double, add2)(1)); assertEquals(4, goog.functions.compose(add2, double)(1)); assertEquals(6, goog.functions.compose(add2, add2, double)(1)); assertEquals(12, goog.functions.compose(double, add2, add2, double)(1)); assertUndefined(goog.functions.compose()(1)); assertEquals(3, goog.functions.compose(add2)(1)); var add2Numbers = function(x, y) { return x + y; }; assertEquals(17, goog.functions.compose(add2Numbers)(10, 7)); assertEquals(34, goog.functions.compose(double, add2Numbers)(10, 7)); } function testAdd() { assertUndefined(goog.functions.sequence()()); assertCallOrderAndReset([]); assert(goog.functions.sequence(fTrue)()); assertCallOrderAndReset(['fTrue']); assertFalse(goog.functions.sequence(fTrue, gFalse)()); assertCallOrderAndReset(['fTrue', 'gFalse']); assert(goog.functions.sequence(fTrue, gFalse, hTrue)()); assertCallOrderAndReset(['fTrue', 'gFalse', 'hTrue']); assert(goog.functions.sequence(goog.functions.identity)(true)); assertFalse(goog.functions.sequence(goog.functions.identity)(false)); } function testAnd() { // the return value is unspecified for an empty and goog.functions.and()(); assertCallOrderAndReset([]); assert(goog.functions.and(fTrue)()); assertCallOrderAndReset(['fTrue']); assertFalse(goog.functions.and(fTrue, gFalse)()); assertCallOrderAndReset(['fTrue', 'gFalse']); assertFalse(goog.functions.and(fTrue, gFalse, hTrue)()); assertCallOrderAndReset(['fTrue', 'gFalse']); assert(goog.functions.and(goog.functions.identity)(true)); assertFalse(goog.functions.and(goog.functions.identity)(false)); } function testOr() { // the return value is unspecified for an empty or goog.functions.or()(); assertCallOrderAndReset([]); assert(goog.functions.or(fTrue)()); assertCallOrderAndReset(['fTrue']); assert(goog.functions.or(fTrue, gFalse)()); assertCallOrderAndReset(['fTrue']); assert(goog.functions.or(fTrue, gFalse, hTrue)()); assertCallOrderAndReset(['fTrue']); assert(goog.functions.or(goog.functions.identity)(true)); assertFalse(goog.functions.or(goog.functions.identity)(false)); } function testNot() { assertTrue(goog.functions.not(gFalse)()); assertCallOrderAndReset(['gFalse']); assertTrue(goog.functions.not(goog.functions.identity)(false)); assertFalse(goog.functions.not(goog.functions.identity)(true)); var f = function(a, b) { assertEquals(1, a); assertEquals(2, b); return false; }; assertTrue(goog.functions.not(f)(1, 2)); } function testCreate(expectedArray) { var tempConstructor = function(a, b) { this.foo = a; this.bar = b; }; var factory = goog.partial(goog.functions.create, tempConstructor, 'baz'); var instance = factory('qux'); assert(instance instanceof tempConstructor); assertEquals(instance.foo, 'baz'); assertEquals(instance.bar, 'qux'); } function testWithReturnValue() { var obj = {}; var f = function(a, b) { assertEquals(obj, this); assertEquals(1, a); assertEquals(2, b); }; assertTrue(goog.functions.withReturnValue(f, true).call(obj, 1, 2)); assertFalse(goog.functions.withReturnValue(f, false).call(obj, 1, 2)); } function makeCallOrderLogger(name, returnValue) { return function() { callOrder.push(name); return returnValue; }; } function assertCallOrderAndReset(expectedArray) { assertArrayEquals(expectedArray, callOrder); callOrder = []; } </script> </body> </html>