UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

139 lines (117 loc) 3.91 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(testClassOrNamespace) { super(); 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(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(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(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() { 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; } } });