Andrew Meadowsarchive remaining JS scriptsc0b446c10 years agoHistory
181 lines · 5.0 KB · JavaScript
RawDownload
////  Unittest.js//  examples////  Created by Ryan Huffman on 5/4/14//  Copyright 2014 High Fidelity, Inc.////  This provides very basic unit testing functionality.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// test = function(name, func, timeout) {    print("Running test: " + name);    var unitTest = new UnitTest(name, func, timeout);    unitTest.run(function(unitTest) {        print("  Success: " + unitTest.numAssertions + " assertions passed");    }, function(unitTest, error) {        print("  Failure: " + error.name + " " + error.message);    });}; AssertionException = function(expected, actual, message) {    print("Creating exception");    this.message = message + "\n: " + actual + " != " + expected;    this.name = 'AssertionException';}; UnthrownException = function(message) {    print("Creating exception");    this.message = message + "\n";    this.name = 'UnthrownException';}; TimeoutException = function() {    print("Creating exception");    this.message = "UnitTest timed out\n";    this.name = 'TimeoutException';}; SequentialUnitTester = function() {    this.tests = [];    this.testIndex = -1;}; SequentialUnitTester.prototype.addTest = function(name, func, timeout) {    var _this = this;    this.tests.push(function() {        print("Running test: " + name);        var unitTest = new UnitTest(name, func, timeout);        unitTest.run(function(unitTest) {            print("  Success: " + unitTest.numAssertions + " assertions passed");            _this._nextTest();        }, function(unitTest, error) {            print("  Failure: " + error.name + " " + error.message);            _this._nextTest();        });    });}; SequentialUnitTester.prototype._nextTest = function() {    this.testIndex++;    if (this.testIndex < this.tests.length) {        this.tests[this.testIndex]();        return;    }    print("Completed all UnitTests");}; SequentialUnitTester.prototype.run = function() {    this._nextTest();}; UnitTest = function(name, func, timeout) {    this.numAssertions = 0;    this.func = func;    this.timeout = timeout;}; UnitTest.prototype.run = function(successCallback, failureCallback) {    var _this = this;    this.successCallback = successCallback;    this.failureCallback = failureCallback;    if (this.timeout !== undefined) {       this.timeoutTimer = Script.setTimeout(function() {           _this.failureCallback(this, new TimeoutException());       }, this.timeout);    }    try {        this.func();        if (this.timeout === undefined) {            successCallback(this);        }    } catch (exception) {        this.handleException(exception);    }}; UnitTest.prototype.registerCallbackFunction = function(func) {    var _this = this;    return function(one, two, three, four, five, six) {        try {            func(one, two, three, four, five, six);        } catch (exception) {            _this.handleException(exception);        }    };}; UnitTest.prototype.handleException = function(exception) {    if (this.timeout !== undefined) {        Script.clearTimeout(this.timeoutTimer);    }    this.failureCallback(this, exception);}; UnitTest.prototype.assertNotEquals = function(expected, actual, message) {    this.numAssertions++;    if (expected == actual) {        throw new AssertionException(expected, actual, message);    }}; UnitTest.prototype.assertEquals = function(expected, actual, message) {    this.numAssertions++;    if (expected != actual) {        throw new AssertionException(expected, actual, message);    }}; UnitTest.prototype.assertContains = function (expected, actual, message) {    this.numAssertions++;    if (actual.indexOf(expected) == -1) {        throw new AssertionException(expected, actual, message);    }}; UnitTest.prototype.assertHasProperty = function(property, actual, message) {    this.numAssertions++;    if (actual[property] === undefined) {        throw new AssertionException(property, actual, message);    }}; UnitTest.prototype.assertNull = function(value, message) {    this.numAssertions++;    if (value !== null) {        throw new AssertionException(value, null, message);    }} UnitTest.prototype.arrayEqual = function(array1, array2, message) {    this.numAssertions++;    if (array1.length !== array2.length) {        throw new AssertionException(array1.length, array2.length , message);    }    for (var i = 0; i < array1.length; ++i) {        if (array1[i] !== array2[i]) {            throw new AssertionException(array1[i], array2[i], i + " " + message);        }    }} UnitTest.prototype.raises = function(func, message) {    this.numAssertions++;    try {        func();    } catch (error) {        return;    }        throw new UnthrownException(message);} UnitTest.prototype.done = function() {    if (this.timeout !== undefined) {        Script.clearTimeout(this.timeoutTimer);        this.successCallback(this);    }}