UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

148 lines (122 loc) 3.95 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Fabian Jakobs (fjakobs) ************************************************************************ */ /** * A TestSuite is a collection of test functions, classes and other test suites, * which should be run together. */ qx.Class.define("qx.dev.unit.TestSuite", { extend : qx.dev.unit.AbstractTestSuite, /** * @param testClassOrNamespace {var} Either a string with the name of the test * class or test namespace or a reference to the test class or namespace. * All test in the given class/namespace will be added to the suite. */ construct : function(testClassOrNamespace) { this.base(arguments); this._tests = []; if (testClassOrNamespace) { this.add(testClassOrNamespace); } }, members : { /** * Add a test class or namespace to the suite * * @lint ignoreDeprecated(alert, eval) * * @param testClassOrNamespace {var} Either a string with the name of the test * class or test namespace or a reference to the test class or namespace. * All test in the given class/namespace will be added to the suite. */ add : function(testClassOrNamespace) { // This try-block is needed to avoid errors (e.g. "too much recursion") // try // { if (qx.lang.Type.isString(testClassOrNamespace)) { var evalTestClassOrNamespace = window.eval(testClassOrNamespace); if (!evalTestClassOrNamespace) { this.addFail(testClassOrNamespace, "The class/namespace '" + testClassOrNamespace + "' is undefined!"); } testClassOrNamespace = evalTestClassOrNamespace; } if (qx.lang.Type.isFunction(testClassOrNamespace)) { this.addTestClass(testClassOrNamespace); } else if (qx.lang.Type.isObject(testClassOrNamespace)) { this.addTestNamespace(testClassOrNamespace); } else { this.addFail("existsCheck", "Unknown test class '" + testClassOrNamespace + "'!"); return; } // } // catch (ex) // { // window.alert("An error occurred while adding test classes/namespaces\nPlease try a different test file."); // } }, /** * Add all tests from the given namespace to the suite * * @param namespace {Object} The topmost namespace of the tests classes to add. */ addTestNamespace : function(namespace) { if (qx.lang.Type.isFunction(namespace) && namespace.classname) { if (qx.Class.isSubClassOf(namespace, qx.dev.unit.TestCase)) { if (namespace.$$classtype !== "abstract") { this.addTestClass(namespace); } return; } } else if (qx.lang.Type.isObject(namespace) && !(namespace instanceof Array)) { for (var key in namespace) { this.addTestNamespace(namespace[key]); } } }, /** * Add a test class to the suite * * @param clazz {Class} The test class to add */ addTestClass : function(clazz) { this._tests.push(new qx.dev.unit.TestClass(clazz)); }, /** * Get a list of all test classes in the suite * * @return {Class[]} A list of all test classes in the suite */ getTestClasses : function() { var classes = []; for (var i=0; i<this._tests.length; i++) { var test = this._tests[i]; if (test instanceof qx.dev.unit.TestClass) { classes.push(test); } } return classes; } } });