diff --git a/Gruntfile.js b/Gruntfile.js
index 3018702f55a..48b9c59dbb5 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -96,7 +96,15 @@ var
"demos/tooltip/ajax/content*.html",
"tests/unit/core/core.html",
"tests/unit/tabs/data/test.html"
- ];
+ ],
+
+ serverOptions = {},
+ binPath = require( "chromedriver" ).path,
+ rdefineEnd = /\}\);[^}\w]*$/,
+ pkg = grunt.file.readJSON( "package.json" );
+
+serverOptions[ "Dwebdriver.chrome.driver=" + binPath ] = "";
+
function mapMinFile( file ) {
return "dist/" + file.replace( /ui\//, "minified/" );
@@ -125,6 +133,7 @@ uiFiles.forEach(function( file ) {
// grunt plugins
require( "load-grunt-tasks" )( grunt );
+grunt.loadNpmTasks( 'intern' )
// local testswarm and build tasks
grunt.loadTasks( "build/tasks" );
@@ -179,6 +188,24 @@ grunt.initConfig({
}
},
+ intern: {
+ options: {
+ runType: "runner"
+ },
+ unitLocal: {
+ options: {
+ config: "tests/intern-local",
+ suites: [ "tests/unit/all" ]
+ }
+ },
+ unitCi: {
+ options: {
+ config: "tests/intern",
+ suites: [ "tests/unit/all" ]
+ }
+ }
+ },
+
// Remove the requireSpacesInsideParentheses override once everything is fixed
jscs: {
"ui-good": [ "ui/*.js" ].concat( jscsBad.map( function( file ) {
@@ -290,6 +317,7 @@ grunt.initConfig({
"qunit-composite/LICENSE.txt": "qunit-composite/LICENSE.txt",
"requirejs/require.js": "requirejs/require.js",
+ "requirejs-text/text.js": "requirejs-text/text.js",
"jquery-mousewheel/jquery.mousewheel.js": "jquery-mousewheel/jquery.mousewheel.js",
"jquery-mousewheel/LICENSE.txt": "jquery-mousewheel/LICENSE.txt",
@@ -378,6 +406,22 @@ grunt.initConfig({
}
},
+ "start-selenium-server": {
+ dev: {
+ options: {
+ downloadUrl: "https://selenium-release.storage.googleapis.com/2.45/" +
+ "selenium-server-standalone-2.45.0.jar",
+ downloadLocation: "node_modules/grunt-selenium-server/",
+ serverOptions: serverOptions,
+ systemProperties: {}
+ }
+ }
+ },
+
+ "stop-selenium-server": {
+ dev: {}
+ },
+
authors: {
prior: [
"Paul Bakaus ",
@@ -442,4 +486,6 @@ grunt.registerTask( "test", [ "qunit" ]);
grunt.registerTask( "sizer", [ "concat:ui", "uglify:main", "compare_size:all" ]);
grunt.registerTask( "sizer_all", [ "concat:ui", "uglify", "compare_size" ]);
+grunt.registerTask( "test-local", [ "start-selenium-server", "intern:unitLocal", "stop-selenium-server" ])
+
};
diff --git a/bower.json b/bower.json
index 2c8b5a6baee..1db344f305c 100644
--- a/bower.json
+++ b/bower.json
@@ -16,9 +16,10 @@
"jshint": "2.4.4",
"qunit": "1.18.0",
"qunit-assert-classes": "1.0.2",
- "qunit-assert-close": "JamesMGreene/qunit-assert-close#v1.1.1",
+ "qunit-assert-close": "apsdehal/qunit-assert-close#amd-patch",
"qunit-composite": "JamesMGreene/qunit-composite#v1.1.0",
"requirejs": "2.1.14",
+ "requirejs-text": "2.0.14",
"jquery-1.7.0": "jquery#1.7.0",
"jquery-1.7.1": "jquery#1.7.1",
diff --git a/external/qunit-assert-close/qunit-assert-close.js b/external/qunit-assert-close/qunit-assert-close.js
index bd843810a52..63c79086df1 100644
--- a/external/qunit-assert-close/qunit-assert-close.js
+++ b/external/qunit-assert-close/qunit-assert-close.js
@@ -1,106 +1,120 @@
-/**
- * Checks that the first two arguments are equal, or are numbers close enough to be considered equal
- * based on a specified maximum allowable difference.
- *
- * @example assert.close(3.141, Math.PI, 0.001);
- *
- * @param Number actual
- * @param Number expected
- * @param Number maxDifference (the maximum inclusive difference allowed between the actual and expected numbers)
- * @param String message (optional)
- */
-function close(actual, expected, maxDifference, message) {
- var actualDiff = (actual === expected) ? 0 : Math.abs(actual - expected),
- result = actualDiff <= maxDifference;
- message = message || (actual + " should be within " + maxDifference + " (inclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff));
- QUnit.push(result, actual, expected, message);
-}
+(function (factory) {
+ if (typeof define === "function" && define.amd) {
+ // AMD. Register as an anonymous module.
+ define([
+ "qunit"
+ ], factory);
+ } else {
-/**
- * Checks that the first two arguments are equal, or are numbers close enough to be considered equal
- * based on a specified maximum allowable difference percentage.
- *
- * @example assert.close.percent(155, 150, 3.4); // Difference is ~3.33%
- *
- * @param Number actual
- * @param Number expected
- * @param Number maxPercentDifference (the maximum inclusive difference percentage allowed between the actual and expected numbers)
- * @param String message (optional)
- */
-close.percent = function closePercent(actual, expected, maxPercentDifference, message) {
- var actualDiff, result;
- if (actual === expected) {
- actualDiff = 0;
- result = actualDiff <= maxPercentDifference;
+ // Browser globals
+ factory(QUnit);
}
- else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {
- actualDiff = Math.abs(100 * (actual - expected) / expected);
- result = actualDiff <= maxPercentDifference;
+}(function (QUnit) {
+ /**
+ * Checks that the first two arguments are equal, or are numbers close enough to be considered equal
+ * based on a specified maximum allowable difference.
+ *
+ * @example assert.close(3.141, Math.PI, 0.001);
+ *
+ * @param Number actual
+ * @param Number expected
+ * @param Number maxDifference (the maximum inclusive difference allowed between the actual and expected numbers)
+ * @param String message (optional)
+ */
+ function close(actual, expected, maxDifference, message) {
+ var actualDiff = (actual === expected) ? 0 : Math.abs(actual - expected),
+ result = actualDiff <= maxDifference;
+ message = message || (actual + " should be within " + maxDifference + " (inclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff));
+ QUnit.push(result, actual, expected, message);
}
- else {
- // Dividing by zero (0)! Should return `false` unless the max percentage was `Infinity`
- actualDiff = Infinity;
- result = maxPercentDifference === Infinity;
- }
- message = message || (actual + " should be within " + maxPercentDifference + "% (inclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff + "%"));
- QUnit.push(result, actual, expected, message);
-};
+ /**
+ * Checks that the first two arguments are equal, or are numbers close enough to be considered equal
+ * based on a specified maximum allowable difference percentage.
+ *
+ * @example assert.close.percent(155, 150, 3.4); // Difference is ~3.33%
+ *
+ * @param Number actual
+ * @param Number expected
+ * @param Number maxPercentDifference (the maximum inclusive difference percentage allowed between the actual and expected numbers)
+ * @param String message (optional)
+ */
+ close.percent = function closePercent(actual, expected, maxPercentDifference, message) {
+ var actualDiff, result;
+ if (actual === expected) {
+ actualDiff = 0;
+ result = actualDiff <= maxPercentDifference;
+ }
+ else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {
+ actualDiff = Math.abs(100 * (actual - expected) / expected);
+ result = actualDiff <= maxPercentDifference;
+ }
+ else {
+ // Dividing by zero (0)! Should return `false` unless the max percentage was `Infinity`
+ actualDiff = Infinity;
+ result = maxPercentDifference === Infinity;
+ }
+ message = message || (actual + " should be within " + maxPercentDifference + "% (inclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff + "%"));
-/**
- * Checks that the first two arguments are numbers with differences greater than the specified
- * minimum difference.
- *
- * @example assert.notClose(3.1, Math.PI, 0.001);
- *
- * @param Number actual
- * @param Number expected
- * @param Number minDifference (the minimum exclusive difference allowed between the actual and expected numbers)
- * @param String message (optional)
- */
-function notClose(actual, expected, minDifference, message) {
- var actualDiff = Math.abs(actual - expected),
- result = actualDiff > minDifference;
- message = message || (actual + " should not be within " + minDifference + " (exclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff));
- QUnit.push(result, actual, expected, message);
-}
+ QUnit.push(result, actual, expected, message);
+ };
-/**
- * Checks that the first two arguments are numbers with differences greater than the specified
- * minimum difference percentage.
- *
- * @example assert.notClose.percent(156, 150, 3.5); // Difference is 4.0%
- *
- * @param Number actual
- * @param Number expected
- * @param Number minPercentDifference (the minimum exclusive difference percentage allowed between the actual and expected numbers)
- * @param String message (optional)
- */
-notClose.percent = function notClosePercent(actual, expected, minPercentDifference, message) {
- var actualDiff, result;
- if (actual === expected) {
- actualDiff = 0;
- result = actualDiff > minPercentDifference;
- }
- else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {
- actualDiff = Math.abs(100 * (actual - expected) / expected);
- result = actualDiff > minPercentDifference;
- }
- else {
- // Dividing by zero (0)! Should only return `true` if the min percentage was `Infinity`
- actualDiff = Infinity;
- result = minPercentDifference !== Infinity;
+ /**
+ * Checks that the first two arguments are numbers with differences greater than the specified
+ * minimum difference.
+ *
+ * @example assert.notClose(3.1, Math.PI, 0.001);
+ *
+ * @param Number actual
+ * @param Number expected
+ * @param Number minDifference (the minimum exclusive difference allowed between the actual and expected numbers)
+ * @param String message (optional)
+ */
+ function notClose(actual, expected, minDifference, message) {
+ var actualDiff = Math.abs(actual - expected),
+ result = actualDiff > minDifference;
+ message = message || (actual + " should not be within " + minDifference + " (exclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff));
+ QUnit.push(result, actual, expected, message);
}
- message = message || (actual + " should not be within " + minPercentDifference + "% (exclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff + "%"));
- QUnit.push(result, actual, expected, message);
-};
+
+ /**
+ * Checks that the first two arguments are numbers with differences greater than the specified
+ * minimum difference percentage.
+ *
+ * @example assert.notClose.percent(156, 150, 3.5); // Difference is 4.0%
+ *
+ * @param Number actual
+ * @param Number expected
+ * @param Number minPercentDifference (the minimum exclusive difference percentage allowed between the actual and expected numbers)
+ * @param String message (optional)
+ */
+ notClose.percent = function notClosePercent(actual, expected, minPercentDifference, message) {
+ var actualDiff, result;
+ if (actual === expected) {
+ actualDiff = 0;
+ result = actualDiff > minPercentDifference;
+ }
+ else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {
+ actualDiff = Math.abs(100 * (actual - expected) / expected);
+ result = actualDiff > minPercentDifference;
+ }
+ else {
+ // Dividing by zero (0)! Should only return `true` if the min percentage was `Infinity`
+ actualDiff = Infinity;
+ result = minPercentDifference !== Infinity;
+ }
+ message = message || (actual + " should not be within " + minPercentDifference + "% (exclusive) of " + expected + (result ? "" : ". Actual: " + actualDiff + "%"));
+
+ QUnit.push(result, actual, expected, message);
+ };
-QUnit.extend(QUnit.assert, {
- close: close,
- notClose: notClose
-});
\ No newline at end of file
+ QUnit.extend(QUnit.assert, {
+ close: close,
+ notClose: notClose
+ });
+}));
diff --git a/external/requirejs-text/text.js b/external/requirejs-text/text.js
new file mode 100644
index 00000000000..4c311edcebe
--- /dev/null
+++ b/external/requirejs-text/text.js
@@ -0,0 +1,391 @@
+/**
+ * @license RequireJS text 2.0.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/requirejs/text for details
+ */
+/*jslint regexp: true */
+/*global require, XMLHttpRequest, ActiveXObject,
+ define, window, process, Packages,
+ java, location, Components, FileUtils */
+
+define(['module'], function (module) {
+ 'use strict';
+
+ var text, fs, Cc, Ci, xpcIsWindows,
+ progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'],
+ xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,
+ bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im,
+ hasLocation = typeof location !== 'undefined' && location.href,
+ defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''),
+ defaultHostName = hasLocation && location.hostname,
+ defaultPort = hasLocation && (location.port || undefined),
+ buildMap = {},
+ masterConfig = (module.config && module.config()) || {};
+
+ text = {
+ version: '2.0.14',
+
+ strip: function (content) {
+ //Strips declarations so that external SVG and XML
+ //documents can be added to a document without worry. Also, if the string
+ //is an HTML document, only the part inside the body tag is returned.
+ if (content) {
+ content = content.replace(xmlRegExp, "");
+ var matches = content.match(bodyRegExp);
+ if (matches) {
+ content = matches[1];
+ }
+ } else {
+ content = "";
+ }
+ return content;
+ },
+
+ jsEscape: function (content) {
+ return content.replace(/(['\\])/g, '\\$1')
+ .replace(/[\f]/g, "\\f")
+ .replace(/[\b]/g, "\\b")
+ .replace(/[\n]/g, "\\n")
+ .replace(/[\t]/g, "\\t")
+ .replace(/[\r]/g, "\\r")
+ .replace(/[\u2028]/g, "\\u2028")
+ .replace(/[\u2029]/g, "\\u2029");
+ },
+
+ createXhr: masterConfig.createXhr || function () {
+ //Would love to dump the ActiveX crap in here. Need IE 6 to die first.
+ var xhr, i, progId;
+ if (typeof XMLHttpRequest !== "undefined") {
+ return new XMLHttpRequest();
+ } else if (typeof ActiveXObject !== "undefined") {
+ for (i = 0; i < 3; i += 1) {
+ progId = progIds[i];
+ try {
+ xhr = new ActiveXObject(progId);
+ } catch (e) {}
+
+ if (xhr) {
+ progIds = [progId]; // so faster next time
+ break;
+ }
+ }
+ }
+
+ return xhr;
+ },
+
+ /**
+ * Parses a resource name into its component parts. Resource names
+ * look like: module/name.ext!strip, where the !strip part is
+ * optional.
+ * @param {String} name the resource name
+ * @returns {Object} with properties "moduleName", "ext" and "strip"
+ * where strip is a boolean.
+ */
+ parseName: function (name) {
+ var modName, ext, temp,
+ strip = false,
+ index = name.lastIndexOf("."),
+ isRelative = name.indexOf('./') === 0 ||
+ name.indexOf('../') === 0;
+
+ if (index !== -1 && (!isRelative || index > 1)) {
+ modName = name.substring(0, index);
+ ext = name.substring(index + 1);
+ } else {
+ modName = name;
+ }
+
+ temp = ext || modName;
+ index = temp.indexOf("!");
+ if (index !== -1) {
+ //Pull off the strip arg.
+ strip = temp.substring(index + 1) === "strip";
+ temp = temp.substring(0, index);
+ if (ext) {
+ ext = temp;
+ } else {
+ modName = temp;
+ }
+ }
+
+ return {
+ moduleName: modName,
+ ext: ext,
+ strip: strip
+ };
+ },
+
+ xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/,
+
+ /**
+ * Is an URL on another domain. Only works for browser use, returns
+ * false in non-browser environments. Only used to know if an
+ * optimized .js version of a text resource should be loaded
+ * instead.
+ * @param {String} url
+ * @returns Boolean
+ */
+ useXhr: function (url, protocol, hostname, port) {
+ var uProtocol, uHostName, uPort,
+ match = text.xdRegExp.exec(url);
+ if (!match) {
+ return true;
+ }
+ uProtocol = match[2];
+ uHostName = match[3];
+
+ uHostName = uHostName.split(':');
+ uPort = uHostName[1];
+ uHostName = uHostName[0];
+
+ return (!uProtocol || uProtocol === protocol) &&
+ (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) &&
+ ((!uPort && !uHostName) || uPort === port);
+ },
+
+ finishLoad: function (name, strip, content, onLoad) {
+ content = strip ? text.strip(content) : content;
+ if (masterConfig.isBuild) {
+ buildMap[name] = content;
+ }
+ onLoad(content);
+ },
+
+ load: function (name, req, onLoad, config) {
+ //Name has format: some.module.filext!strip
+ //The strip part is optional.
+ //if strip is present, then that means only get the string contents
+ //inside a body tag in an HTML string. For XML/SVG content it means
+ //removing the declarations so the content can be inserted
+ //into the current doc without problems.
+
+ // Do not bother with the work if a build and text will
+ // not be inlined.
+ if (config && config.isBuild && !config.inlineText) {
+ onLoad();
+ return;
+ }
+
+ masterConfig.isBuild = config && config.isBuild;
+
+ var parsed = text.parseName(name),
+ nonStripName = parsed.moduleName +
+ (parsed.ext ? '.' + parsed.ext : ''),
+ url = req.toUrl(nonStripName),
+ useXhr = (masterConfig.useXhr) ||
+ text.useXhr;
+
+ // Do not load if it is an empty: url
+ if (url.indexOf('empty:') === 0) {
+ onLoad();
+ return;
+ }
+
+ //Load the text. Use XHR if possible and in a browser.
+ if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) {
+ text.get(url, function (content) {
+ text.finishLoad(name, parsed.strip, content, onLoad);
+ }, function (err) {
+ if (onLoad.error) {
+ onLoad.error(err);
+ }
+ });
+ } else {
+ //Need to fetch the resource across domains. Assume
+ //the resource has been optimized into a JS module. Fetch
+ //by the module name + extension, but do not include the
+ //!strip part to avoid file system issues.
+ req([nonStripName], function (content) {
+ text.finishLoad(parsed.moduleName + '.' + parsed.ext,
+ parsed.strip, content, onLoad);
+ });
+ }
+ },
+
+ write: function (pluginName, moduleName, write, config) {
+ if (buildMap.hasOwnProperty(moduleName)) {
+ var content = text.jsEscape(buildMap[moduleName]);
+ write.asModule(pluginName + "!" + moduleName,
+ "define(function () { return '" +
+ content +
+ "';});\n");
+ }
+ },
+
+ writeFile: function (pluginName, moduleName, req, write, config) {
+ var parsed = text.parseName(moduleName),
+ extPart = parsed.ext ? '.' + parsed.ext : '',
+ nonStripName = parsed.moduleName + extPart,
+ //Use a '.js' file name so that it indicates it is a
+ //script that can be loaded across domains.
+ fileName = req.toUrl(parsed.moduleName + extPart) + '.js';
+
+ //Leverage own load() method to load plugin value, but only
+ //write out values that do not have the strip argument,
+ //to avoid any potential issues with ! in file names.
+ text.load(nonStripName, req, function (value) {
+ //Use own write() method to construct full module value.
+ //But need to create shell that translates writeFile's
+ //write() to the right interface.
+ var textWrite = function (contents) {
+ return write(fileName, contents);
+ };
+ textWrite.asModule = function (moduleName, contents) {
+ return write.asModule(moduleName, fileName, contents);
+ };
+
+ text.write(pluginName, nonStripName, textWrite, config);
+ }, config);
+ }
+ };
+
+ if (masterConfig.env === 'node' || (!masterConfig.env &&
+ typeof process !== "undefined" &&
+ process.versions &&
+ !!process.versions.node &&
+ !process.versions['node-webkit'] &&
+ !process.versions['atom-shell'])) {
+ //Using special require.nodeRequire, something added by r.js.
+ fs = require.nodeRequire('fs');
+
+ text.get = function (url, callback, errback) {
+ try {
+ var file = fs.readFileSync(url, 'utf8');
+ //Remove BOM (Byte Mark Order) from utf8 files if it is there.
+ if (file[0] === '\uFEFF') {
+ file = file.substring(1);
+ }
+ callback(file);
+ } catch (e) {
+ if (errback) {
+ errback(e);
+ }
+ }
+ };
+ } else if (masterConfig.env === 'xhr' || (!masterConfig.env &&
+ text.createXhr())) {
+ text.get = function (url, callback, errback, headers) {
+ var xhr = text.createXhr(), header;
+ xhr.open('GET', url, true);
+
+ //Allow plugins direct access to xhr headers
+ if (headers) {
+ for (header in headers) {
+ if (headers.hasOwnProperty(header)) {
+ xhr.setRequestHeader(header.toLowerCase(), headers[header]);
+ }
+ }
+ }
+
+ //Allow overrides specified in config
+ if (masterConfig.onXhr) {
+ masterConfig.onXhr(xhr, url);
+ }
+
+ xhr.onreadystatechange = function (evt) {
+ var status, err;
+ //Do not explicitly handle errors, those should be
+ //visible via console output in the browser.
+ if (xhr.readyState === 4) {
+ status = xhr.status || 0;
+ if (status > 399 && status < 600) {
+ //An http 4xx or 5xx error. Signal an error.
+ err = new Error(url + ' HTTP status: ' + status);
+ err.xhr = xhr;
+ if (errback) {
+ errback(err);
+ }
+ } else {
+ callback(xhr.responseText);
+ }
+
+ if (masterConfig.onXhrComplete) {
+ masterConfig.onXhrComplete(xhr, url);
+ }
+ }
+ };
+ xhr.send(null);
+ };
+ } else if (masterConfig.env === 'rhino' || (!masterConfig.env &&
+ typeof Packages !== 'undefined' && typeof java !== 'undefined')) {
+ //Why Java, why is this so awkward?
+ text.get = function (url, callback) {
+ var stringBuffer, line,
+ encoding = "utf-8",
+ file = new java.io.File(url),
+ lineSeparator = java.lang.System.getProperty("line.separator"),
+ input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)),
+ content = '';
+ try {
+ stringBuffer = new java.lang.StringBuffer();
+ line = input.readLine();
+
+ // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324
+ // http://www.unicode.org/faq/utf_bom.html
+
+ // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK:
+ // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
+ if (line && line.length() && line.charAt(0) === 0xfeff) {
+ // Eat the BOM, since we've already found the encoding on this file,
+ // and we plan to concatenating this buffer with others; the BOM should
+ // only appear at the top of a file.
+ line = line.substring(1);
+ }
+
+ if (line !== null) {
+ stringBuffer.append(line);
+ }
+
+ while ((line = input.readLine()) !== null) {
+ stringBuffer.append(lineSeparator);
+ stringBuffer.append(line);
+ }
+ //Make sure we return a JavaScript string and not a Java string.
+ content = String(stringBuffer.toString()); //String
+ } finally {
+ input.close();
+ }
+ callback(content);
+ };
+ } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env &&
+ typeof Components !== 'undefined' && Components.classes &&
+ Components.interfaces)) {
+ //Avert your gaze!
+ Cc = Components.classes;
+ Ci = Components.interfaces;
+ Components.utils['import']('resource://gre/modules/FileUtils.jsm');
+ xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc);
+
+ text.get = function (url, callback) {
+ var inStream, convertStream, fileObj,
+ readData = {};
+
+ if (xpcIsWindows) {
+ url = url.replace(/\//g, '\\');
+ }
+
+ fileObj = new FileUtils.File(url);
+
+ //XPCOM, you so crazy
+ try {
+ inStream = Cc['@mozilla.org/network/file-input-stream;1']
+ .createInstance(Ci.nsIFileInputStream);
+ inStream.init(fileObj, 1, 0, false);
+
+ convertStream = Cc['@mozilla.org/intl/converter-input-stream;1']
+ .createInstance(Ci.nsIConverterInputStream);
+ convertStream.init(inStream, "utf-8", inStream.available(),
+ Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
+
+ convertStream.readString(inStream.available(), readData);
+ convertStream.close();
+ inStream.close();
+ callback(readData.value);
+ } catch (e) {
+ throw new Error((fileObj && fileObj.path || '') + ': ' + e);
+ }
+ };
+ }
+ return text;
+});
diff --git a/package.json b/package.json
index d6dabf36605..297b0446b2f 100644
--- a/package.json
+++ b/package.json
@@ -56,6 +56,7 @@
},
"dependencies": {},
"devDependencies": {
+ "chromedriver": "2.13.0",
"commitplease": "2.0.0",
"grunt": "0.4.2",
"grunt-bowercopy": "1.1.0",
@@ -69,8 +70,11 @@
"grunt-git-authors": "2.0.0",
"grunt-html": "4.0.1",
"grunt-jscs": "1.5.0",
+ "grunt-selenium-server": "0.1.2",
+ "intern": "git://github.com/theintern/intern",
"load-grunt-tasks": "0.3.0",
"rimraf": "2.1.4",
+ "requirejs": "2.1.17",
"testswarm": "1.1.0"
},
"keywords": []
diff --git a/tests/config-helper.js b/tests/config-helper.js
new file mode 100644
index 00000000000..02d39c4a507
--- /dev/null
+++ b/tests/config-helper.js
@@ -0,0 +1,34 @@
+define(function () {
+ // Parse the URL into key/value pairs
+ function parseUrl() {
+ var data = {};
+ var parts = document.location.search.slice( 1 ).split( "&" );
+ var length = parts.length;
+ var i = 0;
+ var current;
+
+ for ( ; i < length; i++ ) {
+ current = parts[ i ].split( "=" );
+ data[ current[ 0 ] ] = current[ 1 ];
+ }
+
+ return data;
+ }
+
+ function jqueryUrl () {
+ var version = parseUrl().jquery;
+ var url;
+
+ if ( version === "git" || version === "compat-git" ) {
+ url = "http://code.jquery.com/jquery-" + version;
+ } else {
+ url = "external/jquery-" + ( version || "1.11.3" ) + "/jquery";
+ }
+
+ return url;
+ }
+
+ return {
+ jqueryUrl: jqueryUrl
+ };
+});
diff --git a/tests/intern-local.js b/tests/intern-local.js
new file mode 100644
index 00000000000..9f8ba7d4c4d
--- /dev/null
+++ b/tests/intern-local.js
@@ -0,0 +1,5 @@
+define([ "./intern" ], function (config) {
+ config.environments = [ { browserName: "chrome" } ];
+ config.tunnel = "NullTunnel";
+ return config;
+});
diff --git a/tests/intern.js b/tests/intern.js
new file mode 100644
index 00000000000..ac0baaf6e49
--- /dev/null
+++ b/tests/intern.js
@@ -0,0 +1,50 @@
+
+define( [ "./config-helper" ], function ( configHelper ) {
+ return {
+ proxyPort: 9000,
+ proxyUrl: "http://localhost:9000/",
+ capabilities: {},
+ environments: [
+ { browserName: "chrome" },
+ { browserName: "internet explorer", version: [ "11", "10", "9" ] },
+ // TODO: Firefox 35 is broken for Browserstack, fix when they have Selenium 2.46
+ { browserName: "firefox", version: [ "34" ] }
+ ],
+ maxConcurrency: 2,
+ tunnel: "BrowserStackTunnel",
+ loaders: {
+ "host-node": "requirejs",
+ "host-browser": "external/requirejs/require.js"
+ },
+ loaderOptions: {
+ paths: {
+ "globalize": "external/globalize/globalize",
+ "globalize/ja-JP": "external/globalize/globalize.culture.ja-JP",
+ "jquery": "external/jquery/jquery",
+ "jquery-simulate": "external/jquery-simulate/jquery.simulate",
+ "jshint": "external/jshint/jshint",
+ "lib": "tests/lib",
+ "qunit-assert-classes": "external/qunit-assert-classes/qunit-assert-classes",
+ // "qunit-assert-close": "external/qunit-assert-close/qunit-assert-close",
+ "text": "external/requirejs-text/text",
+ "ui": "ui",
+ "unit": "tests/unit",
+ "intern!qunit": "node_modules/intern/lib/interfaces/qunit"
+ },
+ map: {
+ "*": {
+ "qunit": "intern!qunit"
+ }
+ },
+ shim: {
+ "globalize/ja-JP": [ "globalize" ],
+ "jquery-simulate": [ "jquery" ],
+ "qunit-assert-close": [ "qunit" ]
+ }
+ },
+ suites: [
+ "tests/unit/all",
+ ],
+ excludeInstrumentation: /^(?:node_modules|test)\//
+ };
+});
diff --git a/tests/lib/bootstrap.js b/tests/lib/bootstrap.js
index 47289494cc3..3bd39f840e2 100644
--- a/tests/lib/bootstrap.js
+++ b/tests/lib/bootstrap.js
@@ -1,146 +1,81 @@
-( function() {
+define( [], function() {
-requirejs.config({
- paths: {
- "globalize": "../../../external/globalize/globalize",
- "globalize/ja-JP": "../../../external/globalize/globalize.culture.ja-JP",
- "jquery": jqueryUrl(),
- "jquery-simulate": "../../../external/jquery-simulate/jquery.simulate",
- "jshint": "../../../external/jshint/jshint",
- "lib": "../../lib",
- "phantom-bridge": "../../../node_modules/grunt-contrib-qunit/phantomjs/bridge",
- "qunit-assert-classes": "../../../external/qunit-assert-classes/qunit-assert-classes",
- "qunit-assert-close": "../../../external/qunit-assert-close/qunit-assert-close",
- "qunit": "../../../external/qunit/qunit",
- "testswarm": "http://swarm.jquery.org/js/inject.js?" + (new Date()).getTime(),
- "ui": "../../../ui"
- },
- shim: {
- "globalize/ja-JP": [ "globalize" ],
- "jquery-simulate": [ "jquery" ],
- "qunit-assert-close": [ "qunit" ],
- "testswarm": [ "qunit" ]
- }
-});
-
-// Create a module that disables back compat for UI modules
-define( "jquery-no-back-compat", [ "jquery" ], function( $ ) {
- $.uiBackCompat = false;
-
- return $;
-} );
-
-// Create a dummy bridge if we're not actually testing in PhantomJS
-if ( !/PhantomJS/.test( navigator.userAgent ) ) {
- define( "phantom-bridge", function() {} );
-}
-
-// Load all modules in series
-function requireModules( dependencies, callback, modules ) {
- if ( !dependencies.length ) {
- if ( callback ) {
- callback.apply( null, modules );
- }
- return;
- }
-
- if ( !modules ) {
- modules = [];
- }
+ // Create a module that disables back compat for UI modules
+ define( "jquery-no-back-compat", [ "jquery" ], function( $ ) {
+ $.uiBackCompat = false;
- var dependency = dependencies.shift();
- require( [ dependency ], function( module ) {
- modules.push( module );
- requireModules( dependencies, callback, modules );
+ return $;
} );
-}
-
-// Load a set of test file along with the required test infrastructure
-function requireTests( dependencies, noBackCompat ) {
- dependencies = [
- "lib/qunit",
- noBackCompat ? "jquery-no-back-compat" : "jquery",
- "jquery-simulate"
- ].concat( dependencies );
-
- // Load the TestSwarm injector, if necessary
- if ( parseUrl().swarmURL ) {
- dependencies.push( "testswarm" );
- }
- requireModules( dependencies, function( QUnit ) {
- QUnit.start();
- } );
-}
+ // Load all modules in series
+ function requireModules( dependencies, callback, modules ) {
+ if ( !dependencies.length ) {
+ if ( callback ) {
+ callback.apply( null, modules );
+ }
+ return;
+ }
-// Parse the URL into key/value pairs
-function parseUrl() {
- var data = {};
- var parts = document.location.search.slice( 1 ).split( "&" );
- var length = parts.length;
- var i = 0;
- var current;
+ if ( !modules ) {
+ modules = [];
+ }
- for ( ; i < length; i++ ) {
- current = parts[ i ].split( "=" );
- data[ current[ 0 ] ] = current[ 1 ];
+ var dependency = dependencies.shift();
+ require( [ dependency ], function( module ) {
+ modules.push( module );
+ requireModules( dependencies, callback, modules );
+ } );
}
- return data;
-}
-
-function jqueryUrl() {
- var version = parseUrl().jquery;
- var url;
-
- if ( version === "git" || version === "compat-git" ) {
- url = "http://code.jquery.com/jquery-" + version;
- } else {
- url = "../../../external/jquery-" + ( version || "1.11.3" ) + "/jquery";
+ // Load a set of test file along with the required test infrastructure
+ function requireTests( dependencies, noBackCompat ) {
+ dependencies = [
+ "lib/qunit",
+ noBackCompat ? "jquery-no-back-compat" : "jquery",
+ "jquery-simulate"
+ ].concat( dependencies );
+
+ requireModules( dependencies, function( QUnit ) {
+ QUnit.start();
+ } );
}
- return url;
-}
-
-// Load test modules based on data attributes
-// - data-modules: list of test modules to load
-// - data-widget: A widget to load test modules for
-// - Automatically loads common, core, events, methods, and options
-// - data-deprecated: Loads the deprecated test modules for a widget
-// - data-no-back-compat: Set $.uiBackCompat to false
-(function() {
- // Find the script element
- var scripts = document.getElementsByTagName( "script" );
- var script = scripts[ scripts.length - 1 ];
-
- // Read the modules
- var modules = script.getAttribute( "data-modules" );
- if ( modules ) {
- modules = modules
- .replace( /^\s+|\s+$/g, "" )
- .split( /\s+/ );
- } else {
- modules = [];
- }
- var widget = script.getAttribute( "data-widget" );
- var deprecated = !!script.getAttribute( "data-deprecated" );
- var noBackCompat = !!script.getAttribute( "data-no-back-compat" );
-
- if ( widget ) {
- modules = modules.concat([
- ( deprecated ? "common-deprecated" : "common" ),
- "core",
- "events",
- "methods",
- "options"
- ]);
- if ( deprecated ) {
- modules = modules.concat( "deprecated" );
+ // Load test modules based on data attributes
+ // - modules: list of test modules to load
+ // - widget: A widget to load test modules for
+ // - Automatically loads common, core, events, methods, and options
+ // - deprecated: Loads the deprecated test modules for a widget
+ // - no-back-compat: Set $.uiBackCompat to false
+ return function( options ) {
+
+ // Read the modules
+ var modules = options[ "modules" ];
+ if ( modules ) {
+ modules = modules
+ .replace( /^\s+|\s+$/g, "" )
+ .split( /\s+/ );
+ } else {
+ modules = [];
+ }
+ var widget = options[ "widget" ];
+ var deprecated = !!options[ "deprecated" ];
+ var noBackCompat = !!options[ "no-back-compat" ];
+
+ if ( widget ) {
+ modules = modules.concat([
+ ( deprecated ? "common-deprecated" : "common" ),
+ "core",
+ "events",
+ "methods",
+ "options"
+ ]);
+ if ( deprecated ) {
+ modules = modules.concat( "deprecated" );
+ }
}
- }
- requireTests( modules, noBackCompat );
-} )();
+ requireTests( modules, noBackCompat );
+ };
-} )();
+}) ;
diff --git a/tests/lib/common.js b/tests/lib/common.js
index 9faa4e246b1..dab6ce7c377 100644
--- a/tests/lib/common.js
+++ b/tests/lib/common.js
@@ -1,6 +1,7 @@
define([
+ "lib/qunit",
"jquery"
-], function( $ ) {
+], function( QUnit, $ ) {
var exports = {};
@@ -8,39 +9,39 @@ function testWidgetDefaults( widget, defaults ) {
var pluginDefaults = $.ui[ widget ].prototype.options;
// Ensure that all defaults have the correct value
- test( "defined defaults", function() {
+ QUnit.test( "defined defaults", function( assert ) {
var count = 0;
$.each( defaults, function( key, val ) {
- expect( ++count );
+ assert.expect( ++count );
if ( $.isFunction( val ) ) {
- ok( $.isFunction( pluginDefaults[ key ] ), key );
+ assert.ok( $.isFunction( pluginDefaults[ key ] ), key );
return;
}
- deepEqual( pluginDefaults[ key ], val, key );
+ assert.deepEqual( pluginDefaults[ key ], val, key );
});
});
// Ensure that all defaults were tested
- test( "tested defaults", function() {
+ QUnit.test( "tested defaults", function( assert ) {
var count = 0;
$.each( pluginDefaults, function( key ) {
- expect( ++count );
- ok( key in defaults, key );
+ assert.expect( ++count );
+ assert.ok( key in defaults, key );
});
});
}
function testWidgetOverrides( widget ) {
if ( $.uiBackCompat === false ) {
- test( "$.widget overrides", function() {
- expect( 4 );
+ QUnit.test( "$.widget overrides", function( assert ) {
+ assert.expect( 4 );
$.each([
"_createWidget",
"destroy",
"option",
"_trigger"
], function( i, method ) {
- strictEqual( $.ui[ widget ].prototype[ method ],
+ assert.strictEqual( $.ui[ widget ].prototype[ method ],
$.Widget.prototype[ method ], "should not override " + method );
});
});
@@ -48,32 +49,32 @@ function testWidgetOverrides( widget ) {
}
function testBasicUsage( widget ) {
- test( "basic usage", function() {
- expect( 3 );
+ QUnit.test( "basic usage", function( assert ) {
+ assert.expect( 3 );
var defaultElement = $.ui[ widget ].prototype.defaultElement;
$( defaultElement ).appendTo( "body" )[ widget ]().remove();
- ok( true, "initialized on element" );
+ assert.ok( true, "initialized on element" );
$( defaultElement )[ widget ]().remove();
- ok( true, "initialized on disconnected DOMElement - never connected" );
+ assert.ok( true, "initialized on disconnected DOMElement - never connected" );
// Ensure manipulating removed elements works (#3664)
$( defaultElement ).appendTo( "body" ).remove()[ widget ]().remove();
- ok( true, "initialized on disconnected DOMElement - removed" );
+ assert.ok( true, "initialized on disconnected DOMElement - removed" );
});
}
exports.testWidget = function( widget, settings ) {
- module( widget + ": common widget" );
+ QUnit.module( widget + ": common widget" );
- exports.testJshint( widget );
+ // exports.testJshint( widget );
testWidgetDefaults( widget, settings.defaults );
testWidgetOverrides( widget );
testBasicUsage( widget );
- test( "version", function() {
- expect( 1 );
- ok( "version" in $.ui[ widget ].prototype, "version property exists" );
+ QUnit.test( "version", function( assert ) {
+ assert.expect( 1 );
+ assert.ok( "version" in $.ui[ widget ].prototype, "version property exists" );
});
};
@@ -81,13 +82,14 @@ exports.testJshint = function( module ) {
// Function.prototype.bind check is needed because JSHint doesn't work in ES3 browsers anymore
// https://github.com/jshint/jshint/issues/1384
- if ( QUnit.urlParams.nojshint || !Function.prototype.bind ) {
+ if ( //QUnit.urlParams.nojshint ||
+ !Function.prototype.bind ) {
return;
}
- asyncTest( "JSHint", function() {
+ QUnit.asyncTest( "JSHint", function( assert ) {
require( [ "jshint" ], function() {
- expect( 1 );
+ assert.expect( 1 );
$.when(
$.ajax( {
@@ -117,12 +119,12 @@ exports.testJshint = function( module ) {
return "[L" + error.line + ":C" + error.character + "] " +
error.reason + "\n" + error.evidence + "\n";
} ).join( "\n" );
- ok( passed, errors );
- start();
+ assert.ok( passed, errors );
+ QUnit.start();
} )
.fail(function( hintError, srcError ) {
- ok( false, "error loading source: " + ( hintError || srcError ).statusText );
- start();
+ assert.ok( false, "error loading source: " + ( hintError || srcError ).statusText );
+ QUnit.start();
} );
});
});
diff --git a/tests/lib/css.js b/tests/lib/css.js
index 37353e912ef..7997f20b175 100644
--- a/tests/lib/css.js
+++ b/tests/lib/css.js
@@ -1,23 +1,27 @@
-(function() {
+define( [], function () {
+ return function( options ) {
-function includeStyle( url ) {
- document.write( "" );
-}
+ function includeStyle( url ) {
+ var link = document.createElement( "link" );
+ link.rel = "stylesheet"
+ link.href = "../../" + url;
+ document.head.appendChild( link );
+ }
-// Find the script element
-var scripts = document.getElementsByTagName( "script" );
-var script = scripts[ scripts.length - 1 ];
+ // Find the script element
+ var scripts = document.getElementsByTagName( "script" );
+ var script = scripts[ scripts.length - 1 ];
-// Load the modules
-var modules = script.getAttribute( "data-modules" );
-if ( modules ) {
- modules = modules.split( /\s+/ );
- for ( var i = 0; i < modules.length; i++ ) {
- includeStyle( "themes/base/" + modules[ i ] + ".css" );
- }
-}
-
-// Load the QUnit stylesheet
-includeStyle( "external/qunit/qunit.css" );
+ // Load the modules
+ var modules = options[ "data-modules" ];
+ if ( modules ) {
+ modules = modules.split( /\s+/ );
+ for ( var i = 0; i < modules.length; i++ ) {
+ includeStyle( "themes/base/" + modules[ i ] + ".css" );
+ }
+ }
-} )();
+ // Load the QUnit stylesheet
+ includeStyle( "external/qunit/qunit.css" );
+ }
+});
diff --git a/tests/lib/helper.js b/tests/lib/helper.js
index cc7d8c00032..eded5c4486f 100644
--- a/tests/lib/helper.js
+++ b/tests/lib/helper.js
@@ -1,5 +1,6 @@
define([
- "jquery"
+ "jquery",
+ "qunit"
], function( $ ) {
var exports = {};
diff --git a/tests/lib/qunit-assert-domequal.js b/tests/lib/qunit-assert-domequal.js
index ba516453d9d..c40f9769afa 100644
--- a/tests/lib/qunit-assert-domequal.js
+++ b/tests/lib/qunit-assert-domequal.js
@@ -5,7 +5,7 @@
* otherwise the text. Then compares the result using deepEqual().
*/
define( [
- "qunit",
+ "intern!qunit",
"jquery"
], function( QUnit, $ ) {
@@ -18,7 +18,7 @@ var domEqual = QUnit.assert.domEqual = function( selector, modifier, message ) {
function done() {
var actual = extract( selector, message );
- assert.push( QUnit.equiv( actual, expected ), actual, expected, message );
+ assert.deepEqual( actual, expected, message );
}
// Run modifier (async or sync), then compare state via done()
diff --git a/tests/lib/qunit.js b/tests/lib/qunit.js
index 87ef8b6625d..2b66d3d0f34 100644
--- a/tests/lib/qunit.js
+++ b/tests/lib/qunit.js
@@ -1,36 +1,35 @@
define( [
- "qunit",
+ "intern!qunit",
"jquery",
"qunit-assert-classes",
- "qunit-assert-close",
+ "external/qunit-assert-close/qunit-assert-close",
"lib/qunit-assert-domequal",
- "phantom-bridge"
+ // "phantom-bridge"
], function( QUnit, $ ) {
-QUnit.config.autostart = false;
QUnit.config.requireExpects = true;
-
-QUnit.config.urlConfig.push({
- id: "nojshint",
- label: "Skip JSHint",
- tooltip: "Skip running JSHint, e.g., within TestSwarm, where Jenkins runs it already"
-});
-
-QUnit.config.urlConfig.push({
- id: "jquery",
- label: "jQuery version",
- value: [
- "1.7.0", "1.7.1", "1.7.2",
- "1.8.0", "1.8.1", "1.8.2", "1.8.3",
- "1.9.0", "1.9.1",
- "1.10.0", "1.10.1", "1.10.2",
- "1.11.0", "1.11.1", "1.11.2", "1.11.3",
- "2.0.0", "2.0.1", "2.0.2", "2.0.3",
- "2.1.0", "2.1.1", "2.1.2", "2.1.3",
- "compat-git", "git", "custom"
- ],
- tooltip: "Which jQuery Core version to test against"
-});
+QUnit.config.testTimeout = 10000;
+// QUnit.config.urlConfig.push({
+// id: "nojshint",
+// label: "Skip JSHint",
+// tooltip: "Skip running JSHint, e.g., within TestSwarm, where Jenkins runs it already"
+// });
+
+// QUnit.config.urlConfig.push({
+// id: "jquery",
+// label: "jQuery version",
+// value: [
+// "1.7.0", "1.7.1", "1.7.2",
+// "1.8.0", "1.8.1", "1.8.2", "1.8.3",
+// "1.9.0", "1.9.1",
+// "1.10.0", "1.10.1", "1.10.2",
+// "1.11.0", "1.11.1", "1.11.2", "1.11.3",
+// "2.0.0", "2.0.1", "2.0.2", "2.0.3",
+// "2.1.0", "2.1.1", "2.1.2", "2.1.3",
+// "compat-git", "git", "custom"
+// ],
+// tooltip: "Which jQuery Core version to test against"
+// });
QUnit.reset = ( function( reset ) {
return function() {
diff --git a/tests/unit/accordion/accordion.html b/tests/unit/accordion/accordion.html
index 683b87456cb..5d4879805aa 100644
--- a/tests/unit/accordion/accordion.html
+++ b/tests/unit/accordion/accordion.html
@@ -1,12 +1,4 @@
-
-
-
-
- jQuery UI Accordion Test Suite
-
-
-
-
+
-
-
-
-
-
-
There is one obvious advantage:
-
-
- You've seen it coming!
-
- Buy now and get nothing for free!
-
- Well, at least no free beer. Perhaps a bear, if you can afford it.
-
-
-
Now that you've got...
-
-
- your bear, you have to admit it!
-
- No, we aren't selling bears.
-
-
- We could talk about renting one.
-
-
-
Rent one bear, ...
-
-
- get two for three beer.
-
-
- And now, for something completely different.
-
+
+
There is one obvious advantage:
+
+
+ You've seen it coming!
+
+ Buy now and get nothing for free!
+
+ Well, at least no free beer. Perhaps a bear, if you can afford it.
+
+
+
Now that you've got...
+
+
+ your bear, you have to admit it!
+
+ No, we aren't selling bears.
+
+
+ We could talk about renting one.
+
+
+
Rent one bear, ...
+
+
+ get two for three beer.
+
+
+ And now, for something completely different.
+
+
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
- -
- Accordion Header 1
-
- -
- Accordion Content 1
-
- -
- Accordion Header 2
-
- -
- Accordion Content 2
-
- -
- Accordion Header 3
-
- -
- Accordion Content 3
-
-
+
+
+ -
+
+
+
+ -
+
+
+
+ -
+
+
+
+
+
+
+ -
+ Accordion Header 1
+
+ -
+ Accordion Content 1
+
+ -
+ Accordion Header 2
+
+ -
+ Accordion Content 2
+
+ -
+ Accordion Header 3
+
+ -
+ Accordion Content 3
+
+
-
-
diff --git a/tests/unit/accordion/core.js b/tests/unit/accordion/core.js
index 0a39311624c..cd29e1506e0 100644
--- a/tests/unit/accordion/core.js
+++ b/tests/unit/accordion/core.js
@@ -1,129 +1,130 @@
define( [
+ "lib/qunit",
"jquery",
"./helper",
"ui/accordion"
-], function( $, testHelper ) {
+], function( QUnit, $, testHelper ) {
var setupTeardown = testHelper.setupTeardown,
state = testHelper.state;
-module( "accordion: core", setupTeardown() );
+QUnit.module( "accordion: core", setupTeardown() );
$.each( { div: "#list1", ul: "#navigation", dl: "#accordion-dl" }, function( type, selector ) {
- test( "markup structure: " + type, function( assert ) {
- expect( 10 );
+ QUnit.test( "markup structure: " + type, function( assert ) {
+ assert.expect( 10 );
var element = $( selector ).accordion(),
headers = element.find( ".ui-accordion-header" ),
content = headers.next();
assert.hasClasses( element, "ui-accordion ui-widget" );
- equal( headers.length, 3, ".ui-accordion-header elements exist, correct number" );
+ assert.equal( headers.length, 3, ".ui-accordion-header elements exist, correct number" );
assert.hasClasses( headers[ 0 ],
"ui-accordion-header ui-accordion-header-active ui-accordion-icons" );
assert.hasClasses( headers[ 1 ],
"ui-accordion-header ui-accordion-header-collapsed ui-accordion-icons" );
assert.hasClasses( headers[ 2 ],
"ui-accordion-header ui-accordion-header-collapsed ui-accordion-icons" );
- equal( content.length, 3, ".ui-accordion-content elements exist, correct number" );
+ assert.equal( content.length, 3, ".ui-accordion-content elements exist, correct number" );
assert.hasClasses( content[ 0 ],
"ui-accordion-content ui-widget-content ui-accordion-content-active" );
assert.hasClasses( content[ 1 ], "ui-accordion-content ui-widget-content" );
assert.hasClasses( content[ 2 ], "ui-accordion-content ui-widget-content" );
- deepEqual( element.find( ".ui-accordion-header" ).next().get(),
+ assert.deepEqual( element.find( ".ui-accordion-header" ).next().get(),
element.find( ".ui-accordion-content" ).get(),
"content panels come immediately after headers" );
});
});
-test( "handle click on header-descendant", function() {
- expect( 1 );
+QUnit.test( "handle click on header-descendant", function( assert ) {
+ assert.expect( 1 );
var element = $( "#navigation" ).accordion();
$( "#navigation h2:eq(1) a" ).trigger( "click" );
- state( element, 0, 1, 0 );
+ state( assert, element, 0, 1, 0 );
});
-test( "accessibility", function () {
- expect( 61 );
+QUnit.test( "accessibility", function ( assert ) {
+ assert.expect( 61 );
var element = $( "#list1" ).accordion({
active: 1,
collapsible: true
}),
headers = element.find( ".ui-accordion-header" );
- equal( element.attr( "role" ), "tablist", "element role" );
+ assert.equal( element.attr( "role" ), "tablist", "element role" );
headers.each(function( i ) {
var header = headers.eq( i ),
panel = header.next();
- equal( header.attr( "role" ), "tab", "header " + i + " role" );
- equal( header.attr( "aria-controls" ), panel.attr( "id" ), "header " + i + " aria-controls" );
- equal( panel.attr( "role" ), "tabpanel", "panel " + i + " role" );
- equal( panel.attr( "aria-labelledby" ), header.attr( "id" ), "panel " + i + " aria-labelledby" );
+ assert.equal( header.attr( "role" ), "tab", "header " + i + " role" );
+ assert.equal( header.attr( "aria-controls" ), panel.attr( "id" ), "header " + i + " aria-controls" );
+ assert.equal( panel.attr( "role" ), "tabpanel", "panel " + i + " role" );
+ assert.equal( panel.attr( "aria-labelledby" ), header.attr( "id" ), "panel " + i + " aria-labelledby" );
});
- equal( headers.eq( 1 ).attr( "tabindex" ), 0, "active header has tabindex=0" );
- equal( headers.eq( 1 ).attr( "aria-selected" ), "true", "active tab (1) has aria-selected=true" );
- equal( headers.eq( 1 ).attr( "aria-expanded" ), "true", "active tab (1) has aria-expanded=true" );
- equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "false", "active tabpanel (1) has aria-hidden=false" );
- equal( headers.eq( 0 ).attr( "tabindex" ), -1, "inactive header (0) has tabindex=-1" );
- equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab (0) has aria-selected=false" );
- equal( headers.eq( 0 ).attr( "aria-expanded" ), "false", "inactive tab (0) has aria-expanded=false" );
- equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (0) has aria-hidden=true" );
- equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
- equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
- equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
- equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
+ assert.equal( headers.eq( 1 ).attr( "tabindex" ), 0, "active header has tabindex=0" );
+ assert.equal( headers.eq( 1 ).attr( "aria-selected" ), "true", "active tab (1) has aria-selected=true" );
+ assert.equal( headers.eq( 1 ).attr( "aria-expanded" ), "true", "active tab (1) has aria-expanded=true" );
+ assert.equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "false", "active tabpanel (1) has aria-hidden=false" );
+ assert.equal( headers.eq( 0 ).attr( "tabindex" ), -1, "inactive header (0) has tabindex=-1" );
+ assert.equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab (0) has aria-selected=false" );
+ assert.equal( headers.eq( 0 ).attr( "aria-expanded" ), "false", "inactive tab (0) has aria-expanded=false" );
+ assert.equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (0) has aria-hidden=true" );
+ assert.equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
+ assert.equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
+ assert.equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
+ assert.equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
element.accordion( "option", "active", 0 );
- equal( headers.eq( 0 ).attr( "tabindex" ), 0, "active header (0) has tabindex=0" );
- equal( headers.eq( 0 ).attr( "aria-selected" ), "true", "active tab (0) has aria-selected=true" );
- equal( headers.eq( 0 ).attr( "aria-expanded" ), "true", "active tab (0) has aria-expanded=true" );
- equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "false", "active tabpanel (0) has aria-hidden=false" );
- equal( headers.eq( 1 ).attr( "tabindex" ), -1, "inactive header (1) has tabindex=-1" );
- equal( headers.eq( 1 ).attr( "aria-selected" ), "false", "inactive tab (1) has aria-selected=false" );
- equal( headers.eq( 1 ).attr( "aria-expanded" ), "false", "inactive tab (1) has aria-expanded=false" );
- equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (1) has aria-hidden=true" );
- equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
- equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
- equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
- equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
+ assert.equal( headers.eq( 0 ).attr( "tabindex" ), 0, "active header (0) has tabindex=0" );
+ assert.equal( headers.eq( 0 ).attr( "aria-selected" ), "true", "active tab (0) has aria-selected=true" );
+ assert.equal( headers.eq( 0 ).attr( "aria-expanded" ), "true", "active tab (0) has aria-expanded=true" );
+ assert.equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "false", "active tabpanel (0) has aria-hidden=false" );
+ assert.equal( headers.eq( 1 ).attr( "tabindex" ), -1, "inactive header (1) has tabindex=-1" );
+ assert.equal( headers.eq( 1 ).attr( "aria-selected" ), "false", "inactive tab (1) has aria-selected=false" );
+ assert.equal( headers.eq( 1 ).attr( "aria-expanded" ), "false", "inactive tab (1) has aria-expanded=false" );
+ assert.equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (1) has aria-hidden=true" );
+ assert.equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
+ assert.equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
+ assert.equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
+ assert.equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
element.accordion( "option", "active", false );
- equal( headers.eq( 0 ).attr( "tabindex" ), 0, "previously active header (0) has tabindex=0" );
- equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab (0) has aria-selected=false" );
- equal( headers.eq( 0 ).attr( "aria-expanded" ), "false", "inactive tab (0) has aria-expanded=false" );
- equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (0) has aria-hidden=true" );
- equal( headers.eq( 1 ).attr( "tabindex" ), -1, "inactive header (1) has tabindex=-1" );
- equal( headers.eq( 1 ).attr( "aria-selected" ), "false", "inactive tab (1) has aria-selected=false" );
- equal( headers.eq( 1 ).attr( "aria-expanded" ), "false", "inactive tab (1) has aria-expanded=false" );
- equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (1) has aria-hidden=true" );
- equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
- equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
- equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
- equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
+ assert.equal( headers.eq( 0 ).attr( "tabindex" ), 0, "previously active header (0) has tabindex=0" );
+ assert.equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab (0) has aria-selected=false" );
+ assert.equal( headers.eq( 0 ).attr( "aria-expanded" ), "false", "inactive tab (0) has aria-expanded=false" );
+ assert.equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (0) has aria-hidden=true" );
+ assert.equal( headers.eq( 1 ).attr( "tabindex" ), -1, "inactive header (1) has tabindex=-1" );
+ assert.equal( headers.eq( 1 ).attr( "aria-selected" ), "false", "inactive tab (1) has aria-selected=false" );
+ assert.equal( headers.eq( 1 ).attr( "aria-expanded" ), "false", "inactive tab (1) has aria-expanded=false" );
+ assert.equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (1) has aria-hidden=true" );
+ assert.equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
+ assert.equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
+ assert.equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
+ assert.equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
element.accordion( "option", "active", 1 );
- equal( headers.eq( 1 ).attr( "tabindex" ), 0, "active header has tabindex=0" );
- equal( headers.eq( 1 ).attr( "aria-selected" ), "true", "active tab (1) has aria-selected=true" );
- equal( headers.eq( 1 ).attr( "aria-expanded" ), "true", "active tab (1) has aria-expanded=true" );
- equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "false", "active tabpanel (1) has aria-hidden=false" );
- equal( headers.eq( 0 ).attr( "tabindex" ), -1, "inactive header (0) has tabindex=-1" );
- equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab (0) has aria-selected=false" );
- equal( headers.eq( 0 ).attr( "aria-expanded" ), "false", "inactive tab (0) has aria-expanded=false" );
- equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (0) has aria-hidden=true" );
- equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
- equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
- equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
- equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
+ assert.equal( headers.eq( 1 ).attr( "tabindex" ), 0, "active header has tabindex=0" );
+ assert.equal( headers.eq( 1 ).attr( "aria-selected" ), "true", "active tab (1) has aria-selected=true" );
+ assert.equal( headers.eq( 1 ).attr( "aria-expanded" ), "true", "active tab (1) has aria-expanded=true" );
+ assert.equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "false", "active tabpanel (1) has aria-hidden=false" );
+ assert.equal( headers.eq( 0 ).attr( "tabindex" ), -1, "inactive header (0) has tabindex=-1" );
+ assert.equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab (0) has aria-selected=false" );
+ assert.equal( headers.eq( 0 ).attr( "aria-expanded" ), "false", "inactive tab (0) has aria-expanded=false" );
+ assert.equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (0) has aria-hidden=true" );
+ assert.equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header (2) has tabindex=-1" );
+ assert.equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab (2) has aria-selected=false" );
+ assert.equal( headers.eq( 2 ).attr( "aria-expanded" ), "false", "inactive tab (2) has aria-expanded=false" );
+ assert.equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel (2) has aria-hidden=true" );
});
-asyncTest( "keyboard support", function( assert ) {
- expect( 13 );
+QUnit.asyncTest( "keyboard support", function( assert ) {
+ assert.expect( 13 );
var element = $( "#list1" ).accordion(),
headers = element.find( ".ui-accordion-header" ),
anchor = headers.eq( 1 ).next().find( "a" ).eq( 0 ),
keyCode = $.ui.keyCode;
- equal( headers.filter( ".ui-state-focus" ).length, 0, "no headers focused on init" );
+ assert.equal( headers.filter( ".ui-state-focus" ).length, 0, "no headers focused on init" );
headers.eq( 0 ).simulate( "focus" );
setTimeout( step1 );
@@ -180,13 +181,13 @@ asyncTest( "keyboard support", function( assert ) {
}
function step9() {
- equal( element.accordion( "option", "active" ) , 2, "ENTER activates panel" );
+ assert.equal( element.accordion( "option", "active" ) , 2, "ENTER activates panel" );
headers.eq( 1 ).simulate( "keydown", { keyCode: keyCode.SPACE } );
setTimeout( step10 );
}
function step10() {
- equal( element.accordion( "option", "active" ), 1, "SPACE activates panel" );
+ assert.equal( element.accordion( "option", "active" ), 1, "SPACE activates panel" );
anchor.simulate( "focus" );
setTimeout( step11 );
}
@@ -200,7 +201,7 @@ asyncTest( "keyboard support", function( assert ) {
function step12() {
assert.hasClasses( headers.eq( 1 ), "ui-state-focus", "CTRL+UP moves focus to header" );
- start();
+ QUnit.start();
}
});
diff --git a/tests/unit/accordion/events.js b/tests/unit/accordion/events.js
index fef1a0aac50..ccf56bdabb0 100644
--- a/tests/unit/accordion/events.js
+++ b/tests/unit/accordion/events.js
@@ -1,16 +1,17 @@
define( [
+ "lib/qunit",
"jquery",
"./helper",
"ui/accordion"
-], function( $, testHelper ) {
+], function( QUnit, $, testHelper ) {
var setupTeardown = testHelper.setupTeardown,
state = testHelper.state;
-module( "accordion: events", setupTeardown() );
+QUnit.module( "accordion: events", setupTeardown() );
-test( "create", function() {
- expect( 10 );
+QUnit.test( "create", function( assert ) {
+ assert.expect( 10 );
var element = $( "#list1" ),
headers = element.children( "h3" ),
@@ -18,10 +19,10 @@ test( "create", function() {
element.accordion({
create: function( event, ui ) {
- equal( ui.header.length, 1, "header length" );
- strictEqual( ui.header[ 0 ], headers[ 0 ], "header" );
- equal( ui.panel.length, 1, "panel length" );
- strictEqual( ui.panel[ 0 ], contents[ 0 ], "panel" );
+ assert.equal( ui.header.length, 1, "header length" );
+ assert.strictEqual( ui.header[ 0 ], headers[ 0 ], "header" );
+ assert.equal( ui.panel.length, 1, "panel length" );
+ assert.strictEqual( ui.panel[ 0 ], contents[ 0 ], "panel" );
}
});
element.accordion( "destroy" );
@@ -29,10 +30,10 @@ test( "create", function() {
element.accordion({
active: 2,
create: function( event, ui ) {
- equal( ui.header.length, 1, "header length" );
- strictEqual( ui.header[ 0 ], headers[ 2 ], "header" );
- equal( ui.panel.length, 1, "panel length" );
- strictEqual( ui.panel[ 0 ], contents[ 2 ], "panel" );
+ assert.equal( ui.header.length, 1, "header length" );
+ assert.strictEqual( ui.header[ 0 ], headers[ 2 ], "header" );
+ assert.equal( ui.panel.length, 1, "panel length" );
+ assert.strictEqual( ui.panel[ 0 ], contents[ 2 ], "panel" );
}
});
element.accordion( "destroy" );
@@ -41,15 +42,15 @@ test( "create", function() {
active: false,
collapsible: true,
create: function( event, ui ) {
- equal( ui.header.length, 0, "header length" );
- equal( ui.panel.length, 0, "panel length" );
+ assert.equal( ui.header.length, 0, "header length" );
+ assert.equal( ui.panel.length, 0, "panel length" );
}
});
element.accordion( "destroy" );
});
-test( "beforeActivate", function() {
- expect( 38 );
+QUnit.test( "beforeActivate", function( assert ) {
+ assert.expect( 38 );
var element = $( "#list1" ).accordion({
active: false,
collapsible: true
@@ -58,63 +59,63 @@ test( "beforeActivate", function() {
content = element.find( ".ui-accordion-content" );
element.one( "accordionbeforeactivate", function( event, ui ) {
- ok( !( "originalEvent" in event ) );
- equal( ui.oldHeader.length, 0 );
- equal( ui.oldPanel.length, 0 );
- equal( ui.newHeader.length, 1 );
- strictEqual( ui.newHeader[ 0 ], headers[ 0 ] );
- equal( ui.newPanel.length, 1 );
- strictEqual( ui.newPanel[ 0 ], content[ 0 ] );
- state( element, 0, 0, 0 );
+ assert.ok( !( "originalEvent" in event ) );
+ assert.equal( ui.oldHeader.length, 0 );
+ assert.equal( ui.oldPanel.length, 0 );
+ assert.equal( ui.newHeader.length, 1 );
+ assert.strictEqual( ui.newHeader[ 0 ], headers[ 0 ] );
+ assert.equal( ui.newPanel.length, 1 );
+ assert.strictEqual( ui.newPanel[ 0 ], content[ 0 ] );
+ state( assert, element, 0, 0, 0 );
});
element.accordion( "option", "active", 0 );
- state( element, 1, 0, 0 );
+ state( assert, element, 1, 0, 0 );
element.one( "accordionbeforeactivate", function( event, ui ) {
- equal( event.originalEvent.type, "click" );
- equal( ui.oldHeader.length, 1 );
- strictEqual( ui.oldHeader[ 0 ], headers[ 0 ] );
- equal( ui.oldPanel.length, 1 );
- strictEqual( ui.oldPanel[ 0 ], content[ 0 ] );
- equal( ui.newHeader.length, 1 );
- strictEqual( ui.newHeader[ 0 ], headers[ 1 ] );
- equal( ui.newPanel.length, 1 );
- strictEqual( ui.newPanel[ 0 ], content[ 1 ] );
- state( element, 1, 0, 0 );
+ assert.equal( event.originalEvent.type, "click" );
+ assert.equal( ui.oldHeader.length, 1 );
+ assert.strictEqual( ui.oldHeader[ 0 ], headers[ 0 ] );
+ assert.equal( ui.oldPanel.length, 1 );
+ assert.strictEqual( ui.oldPanel[ 0 ], content[ 0 ] );
+ assert.equal( ui.newHeader.length, 1 );
+ assert.strictEqual( ui.newHeader[ 0 ], headers[ 1 ] );
+ assert.equal( ui.newPanel.length, 1 );
+ assert.strictEqual( ui.newPanel[ 0 ], content[ 1 ] );
+ state( assert, element, 1, 0, 0 );
});
headers.eq( 1 ).trigger( "click" );
- state( element, 0, 1, 0 );
+ state( assert, element, 0, 1, 0 );
element.one( "accordionbeforeactivate", function( event, ui ) {
- ok( !( "originalEvent" in event ) );
- equal( ui.oldHeader.length, 1 );
- strictEqual( ui.oldHeader[ 0 ], headers[ 1 ] );
- equal( ui.oldPanel.length, 1 );
- strictEqual( ui.oldPanel[ 0 ], content[ 1 ] );
- equal( ui.newHeader.length, 0 );
- equal( ui.newPanel.length, 0 );
- state( element, 0, 1, 0 );
+ assert.ok( !( "originalEvent" in event ) );
+ assert.equal( ui.oldHeader.length, 1 );
+ assert.strictEqual( ui.oldHeader[ 0 ], headers[ 1 ] );
+ assert.equal( ui.oldPanel.length, 1 );
+ assert.strictEqual( ui.oldPanel[ 0 ], content[ 1 ] );
+ assert.equal( ui.newHeader.length, 0 );
+ assert.equal( ui.newPanel.length, 0 );
+ state( assert, element, 0, 1, 0 );
});
element.accordion( "option", "active", false );
- state( element, 0, 0, 0 );
+ state( assert, element, 0, 0, 0 );
element.one( "accordionbeforeactivate", function( event, ui ) {
- ok( !( "originalEvent" in event ) );
- equal( ui.oldHeader.length, 0 );
- equal( ui.oldPanel.length, 0 );
- equal( ui.newHeader.length, 1 );
- strictEqual( ui.newHeader[ 0 ], headers[ 2 ] );
- equal( ui.newPanel.length, 1 );
- strictEqual( ui.newPanel[ 0 ], content[ 2 ] );
+ assert.ok( !( "originalEvent" in event ) );
+ assert.equal( ui.oldHeader.length, 0 );
+ assert.equal( ui.oldPanel.length, 0 );
+ assert.equal( ui.newHeader.length, 1 );
+ assert.strictEqual( ui.newHeader[ 0 ], headers[ 2 ] );
+ assert.equal( ui.newPanel.length, 1 );
+ assert.strictEqual( ui.newPanel[ 0 ], content[ 2 ] );
event.preventDefault();
- state( element, 0, 0, 0 );
+ state( assert, element, 0, 0, 0 );
});
element.accordion( "option", "active", 2 );
- state( element, 0, 0, 0 );
+ state( assert, element, 0, 0, 0 );
});
-test( "activate", function() {
- expect( 21 );
+QUnit.test( "activate", function( assert ) {
+ assert.expect( 21 );
var element = $( "#list1" ).accordion({
active: false,
collapsible: true
@@ -123,44 +124,44 @@ test( "activate", function() {
content = element.find( ".ui-accordion-content" );
element.one( "accordionactivate", function( event, ui ) {
- equal( ui.oldHeader.length, 0 );
- equal( ui.oldPanel.length, 0 );
- equal( ui.newHeader.length, 1 );
- strictEqual( ui.newHeader[ 0 ], headers[ 0 ] );
- equal( ui.newPanel.length, 1 );
- strictEqual( ui.newPanel[ 0 ], content[ 0 ] );
+ assert.equal( ui.oldHeader.length, 0 );
+ assert.equal( ui.oldPanel.length, 0 );
+ assert.equal( ui.newHeader.length, 1 );
+ assert.strictEqual( ui.newHeader[ 0 ], headers[ 0 ] );
+ assert.equal( ui.newPanel.length, 1 );
+ assert.strictEqual( ui.newPanel[ 0 ], content[ 0 ] );
});
element.accordion( "option", "active", 0 );
element.one( "accordionactivate", function( event, ui ) {
- equal( ui.oldHeader.length, 1 );
- strictEqual( ui.oldHeader[ 0 ], headers[ 0 ] );
- equal( ui.oldPanel.length, 1 );
- strictEqual( ui.oldPanel[ 0 ], content[ 0 ] );
- equal( ui.newHeader.length, 1 );
- strictEqual( ui.newHeader[ 0 ], headers[ 1 ] );
- equal( ui.newPanel.length, 1 );
- strictEqual( ui.newPanel[ 0 ], content[ 1 ] );
+ assert.equal( ui.oldHeader.length, 1 );
+ assert.strictEqual( ui.oldHeader[ 0 ], headers[ 0 ] );
+ assert.equal( ui.oldPanel.length, 1 );
+ assert.strictEqual( ui.oldPanel[ 0 ], content[ 0 ] );
+ assert.equal( ui.newHeader.length, 1 );
+ assert.strictEqual( ui.newHeader[ 0 ], headers[ 1 ] );
+ assert.equal( ui.newPanel.length, 1 );
+ assert.strictEqual( ui.newPanel[ 0 ], content[ 1 ] );
});
headers.eq( 1 ).trigger( "click" );
element.one( "accordionactivate", function( event, ui ) {
- equal( ui.oldHeader.length, 1 );
- strictEqual( ui.oldHeader[ 0 ], headers[ 1 ] );
- equal( ui.oldPanel.length, 1 );
- strictEqual( ui.oldPanel[ 0 ], content[ 1 ] );
- equal( ui.newHeader.length, 0 );
- equal( ui.newPanel.length, 0 );
+ assert.equal( ui.oldHeader.length, 1 );
+ assert.strictEqual( ui.oldHeader[ 0 ], headers[ 1 ] );
+ assert.equal( ui.oldPanel.length, 1 );
+ assert.strictEqual( ui.oldPanel[ 0 ], content[ 1 ] );
+ assert.equal( ui.newHeader.length, 0 );
+ assert.equal( ui.newPanel.length, 0 );
});
element.accordion( "option", "active", false );
// prevent activation
element.one( "accordionbeforeactivate", function( event ) {
- ok( true );
+ assert.ok( true );
event.preventDefault();
});
element.one( "accordionactivate", function() {
- ok( false );
+ assert.ok( false );
});
element.accordion( "option", "active", 1 );
});
diff --git a/tests/unit/accordion/helper.js b/tests/unit/accordion/helper.js
index 5eb3a4bc3f2..faa24e840d0 100644
--- a/tests/unit/accordion/helper.js
+++ b/tests/unit/accordion/helper.js
@@ -1,13 +1,19 @@
define( [
+ "intern!qunit",
"jquery",
"lib/helper",
- "ui/accordion"
-], function( $, helper ) {
+ "lib/css",
+ "text!tests/unit/accordion/accordion.html",
+ "ui/accordion",
+ "jquery-simulate",
+ "./common"
+], function( QUnit, $, helper, cssjs, htmlContent ) {
+cssjs( { module: "core accordion" } );
return $.extend( helper, {
- equalHeight: function( accordion, height ) {
+ equalHeight: function( assert, accordion, height ) {
accordion.find( ".ui-accordion-content" ).each(function() {
- equal( $( this ).outerHeight(), height );
+ assert.equal( $( this ).outerHeight(), height );
});
},
@@ -15,20 +21,22 @@ return $.extend( helper, {
var animate = $.ui.accordion.prototype.options.animate;
return {
setup: function() {
+ $("body").append(htmlContent);
$.ui.accordion.prototype.options.animate = false;
},
teardown: function() {
+ $("#qunit-fixture").remove();
$.ui.accordion.prototype.options.animate = animate;
}
};
},
- state: function( accordion ) {
- var expected = $.makeArray( arguments ).slice( 1 ),
+ state: function( assert, accordion ) {
+ var expected = $.makeArray( arguments ).slice( 2 ),
actual = accordion.find( ".ui-accordion-content" ).map(function() {
return $( this ).css( "display" ) === "none" ? 0 : 1;
}).get();
- QUnit.push( QUnit.equiv(actual, expected), actual, expected );
+ assert.deepEqual(actual, expected, "State Assert")
}
} );
diff --git a/tests/unit/accordion/methods.js b/tests/unit/accordion/methods.js
index efabfed10b1..5c1c66ba624 100644
--- a/tests/unit/accordion/methods.js
+++ b/tests/unit/accordion/methods.js
@@ -1,46 +1,47 @@
define( [
+ "lib/qunit",
"jquery",
"./helper",
"ui/accordion"
-], function( $, testHelper ) {
+], function( QUnit, $, testHelper ) {
var equalHeight = testHelper.equalHeight,
setupTeardown = testHelper.setupTeardown,
state = testHelper.state;
-module( "accordion: methods", setupTeardown() );
+QUnit.module( "accordion: methods", setupTeardown() );
-test( "destroy", function( assert ) {
- expect( 1 );
+QUnit.test( "destroy", function( assert ) {
+ assert.expect( 1 );
assert.domEqual( "#list1", function() {
$( "#list1" ).accordion().accordion( "destroy" );
});
});
-test( "enable/disable", function( assert ) {
- expect( 7 );
+QUnit.test( "enable/disable", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion();
- state( element, 1, 0, 0 );
+ state( assert, element, 1, 0, 0 );
element.accordion( "disable" );
assert.hasClasses( element, "ui-state-disabled" );
- equal( element.attr( "aria-disabled" ), "true", "element gets aria-disabled" );
+ assert.equal( element.attr( "aria-disabled" ), "true", "element gets aria-disabled" );
assert.hasClasses( element, "ui-accordion-disabled" );
// event does nothing
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "click" );
- state( element, 1, 0, 0 );
+ state( assert, element, 1, 0, 0 );
// option still works
element.accordion( "option", "active", 1 );
- state( element, 0, 1, 0 );
+ state( assert, element, 0, 1, 0 );
element.accordion( "enable" );
element.accordion( "option", "active", 2 );
- state( element, 0, 0, 1 );
+ state( assert, element, 0, 0, 1 );
});
-test( "refresh", function() {
- expect( 19 );
+QUnit.test( "refresh", function( assert ) {
+ assert.expect( 19 );
var element = $( "#navigation" )
.parent()
.height( 300 )
@@ -48,37 +49,37 @@ test( "refresh", function() {
.accordion({
heightStyle: "fill"
});
- equalHeight( element, 255 );
+ equalHeight( assert, element, 255 );
element.parent().height( 500 );
element.accordion( "refresh" );
- equalHeight( element, 455 );
+ equalHeight( assert, element, 455 );
element = $( "#list1" );
element.accordion();
- state( element, 1, 0, 0 );
+ state( assert, element, 1, 0, 0 );
// disable panel via markup
element.find( "h3.bar" ).eq( 1 ).addClass( "ui-state-disabled" );
element.accordion( "refresh" );
- state( element, 1, 0, 0 );
+ state( assert, element, 1, 0, 0 );
// don't add multiple icons
element.accordion( "refresh" );
- equal( element.find( ".ui-accordion-header-icon" ).length, 3 );
+ assert.equal( element.find( ".ui-accordion-header-icon" ).length, 3 );
// add a panel
element
.append("
new 1
")
.append("
new 1
");
element.accordion( "refresh" );
- state( element, 1, 0, 0, 0 );
+ state( assert, element, 1, 0, 0, 0 );
// remove all tabs
element.find( "h3.bar, div.foo" ).remove();
element.accordion( "refresh" );
- state( element );
- equal( element.accordion( "option", "active" ), false, "no active accordion panel" );
+ state( assert, element );
+ assert.equal( element.accordion( "option", "active" ), false, "no active accordion panel" );
// add panels
element
@@ -91,46 +92,46 @@ test( "refresh", function() {
.append("
new 5
")
.append("
new 5
");
element.accordion( "refresh" );
- state( element, 1, 0, 0, 0 );
+ state( assert, element, 1, 0, 0, 0 );
// activate third tab
element.accordion( "option", "active", 2 );
- state( element, 0, 0, 1, 0 );
+ state( assert, element, 0, 0, 1, 0 );
// remove fourth panel, third panel should stay active
element.find( "h3.bar" ).eq( 3 ).remove();
element.find( "div.foo" ).eq( 3 ).remove();
element.accordion( "refresh" );
- state( element, 0, 0, 1 );
+ state( assert, element, 0, 0, 1 );
// remove third (active) panel, second panel should become active
element.find( "h3.bar" ).eq( 2 ).remove();
element.find( "div.foo" ).eq( 2 ).remove();
element.accordion( "refresh" );
- state( element, 0, 1 );
+ state( assert, element, 0, 1 );
// remove first panel, previously active panel (now first) should stay active
element.find( "h3.bar" ).eq( 0 ).remove();
element.find( "div.foo" ).eq( 0 ).remove();
element.accordion( "refresh" );
- state( element, 1 );
+ state( assert, element, 1 );
// collapse all panels
element.accordion( "option", {
collapsible: true,
active: false
});
- state( element, 0 );
+ state( assert, element, 0 );
element.accordion( "refresh" );
- state( element, 0 );
+ state( assert, element, 0 );
});
-test( "widget", function() {
- expect( 2 );
+QUnit.test( "widget", function( assert ) {
+ assert.expect( 2 );
var element = $( "#list1" ).accordion(),
widgetElement = element.accordion( "widget" );
- equal( widgetElement.length, 1, "one element" );
- strictEqual( widgetElement[ 0 ], element[ 0 ], "same element" );
+ assert.equal( widgetElement.length, 1, "one element" );
+ assert.strictEqual( widgetElement[ 0 ], element[ 0 ], "same element" );
});
} );
diff --git a/tests/unit/accordion/options.js b/tests/unit/accordion/options.js
index 52d54ed32e4..af1a3206e5a 100644
--- a/tests/unit/accordion/options.js
+++ b/tests/unit/accordion/options.js
@@ -1,115 +1,116 @@
define( [
+ "lib/qunit",
"jquery",
"./helper",
"ui/accordion"
-], function( $, testHelper ) {
+], function( QUnit, $, testHelper ) {
var equalHeight = testHelper.equalHeight,
setupTeardown = testHelper.setupTeardown,
state = testHelper.state;
-module( "accordion: options", setupTeardown() );
+QUnit.module( "accordion: options", setupTeardown() );
-test( "{ active: default }", function() {
- expect( 2 );
+QUnit.test( "{ active: default }", function( assert ) {
+ assert.expect( 2 );
var element = $( "#list1" ).accordion();
- equal( element.accordion( "option", "active" ), 0 );
- state( element, 1, 0, 0 );
+ assert.equal( element.accordion( "option", "active" ), 0 );
+ state( assert, element, 1, 0, 0 );
});
-test( "{ active: null }", function() {
- expect( 2 );
+QUnit.test( "{ active: null }", function( assert ) {
+ assert.expect( 2 );
var element = $( "#list1" ).accordion({
active: null
});
- equal( element.accordion( "option", "active" ), 0 );
- state( element, 1, 0, 0 );
+ assert.equal( element.accordion( "option", "active" ), 0 );
+ state( assert, element, 1, 0, 0 );
});
-test( "{ active: false }", function() {
- expect( 7 );
+QUnit.test( "{ active: false }", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion({
active: false,
collapsible: true
});
- state( element, 0, 0, 0 );
- equal( element.find( ".ui-accordion-header.ui-state-active" ).length, 0, "no headers selected" );
- equal( element.accordion( "option", "active" ), false );
+ state( assert, element, 0, 0, 0 );
+ assert.equal( element.find( ".ui-accordion-header.ui-state-active" ).length, 0, "no headers selected" );
+ assert.equal( element.accordion( "option", "active" ), false );
element.accordion( "option", "collapsible", false );
- state( element, 1, 0, 0 );
- equal( element.accordion( "option", "active" ), 0 );
+ state( assert, element, 1, 0, 0 );
+ assert.equal( element.accordion( "option", "active" ), 0 );
element.accordion( "destroy" );
element.accordion({
active: false
});
- state( element, 1, 0, 0 );
- strictEqual( element.accordion( "option", "active" ), 0 );
+ state( assert, element, 1, 0, 0 );
+ assert.strictEqual( element.accordion( "option", "active" ), 0 );
});
-test( "{ active: Number }", function() {
- expect( 8 );
+QUnit.test( "{ active: Number }", function( assert ) {
+ assert.expect( 8 );
var element = $( "#list1" ).accordion({
active: 2
});
- equal( element.accordion( "option", "active" ), 2 );
- state( element, 0, 0, 1 );
+ assert.equal( element.accordion( "option", "active" ), 2 );
+ state( assert, element, 0, 0, 1 );
element.accordion( "option", "active", 0 );
- equal( element.accordion( "option", "active" ), 0 );
- state( element, 1, 0, 0 );
+ assert.equal( element.accordion( "option", "active" ), 0 );
+ state( assert, element, 1, 0, 0 );
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "click" );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
element.accordion( "option", "active", 10 );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
});
-test( "{ active: -Number }", function() {
- expect( 8 );
+QUnit.test( "{ active: -Number }", function( assert ) {
+ assert.expect( 8 );
var element = $( "#list1" ).accordion({
active: -1
});
- equal( element.accordion( "option", "active" ), 2 );
- state( element, 0, 0, 1 );
+ assert.equal( element.accordion( "option", "active" ), 2 );
+ state( assert, element, 0, 0, 1 );
element.accordion( "option", "active", -2 );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
element.accordion( "option", "active", -10 );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
element.accordion( "option", "active", -3 );
- equal( element.accordion( "option", "active" ), 0 );
- state( element, 1, 0, 0 );
+ assert.equal( element.accordion( "option", "active" ), 0 );
+ state( assert, element, 1, 0, 0 );
});
-test( "{ animate: false }", function() {
- expect( 3 );
+QUnit.test( "{ animate: false }", function( assert ) {
+ assert.expect( 3 );
var element = $( "#list1" ).accordion({
animate: false
}),
panels = element.find( ".ui-accordion-content" ),
animate = $.fn.animate;
$.fn.animate = function() {
- ok( false, ".animate() called" );
+ assert.ok( false, ".animate() called" );
};
- ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
element.accordion( "option", "active", 1 );
- ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
- ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
+ assert.ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
$.fn.animate = animate;
});
-asyncTest( "{ animate: Number }", function() {
- expect( 7 );
+QUnit.asyncTest( "{ animate: Number }", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion({
animate: 100
}),
@@ -117,23 +118,23 @@ asyncTest( "{ animate: Number }", function() {
animate = $.fn.animate;
// called twice (both panels)
$.fn.animate = function( props, options ) {
- equal( options.duration, 100, "correct duration" );
- equal( options.easing, undefined, "default easing" );
+ assert.equal( options.duration, 100, "correct duration" );
+ assert.equal( options.easing, undefined, "default easing" );
animate.apply( this, arguments );
};
- ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
element.accordion( "option", "active", 1 );
panels.promise().done(function() {
- ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
- ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
+ assert.ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
$.fn.animate = animate;
- start();
+ QUnit.start();
});
});
-asyncTest( "{ animate: String }", function() {
- expect( 7 );
+QUnit.asyncTest( "{ animate: String }", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion({
animate: "linear"
}),
@@ -141,23 +142,23 @@ asyncTest( "{ animate: String }", function() {
animate = $.fn.animate;
// called twice (both panels)
$.fn.animate = function( props, options ) {
- equal( options.duration, undefined, "default duration" );
- equal( options.easing, "linear", "correct easing" );
+ assert.equal( options.duration, undefined, "default duration" );
+ assert.equal( options.easing, "linear", "correct easing" );
animate.apply( this, arguments );
};
- ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
element.accordion( "option", "active", 1 );
panels.promise().done(function() {
- ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
- ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
+ assert.ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
$.fn.animate = animate;
- start();
+ QUnit.start();
});
});
-asyncTest( "{ animate: {} }", function() {
- expect( 7 );
+QUnit.asyncTest( "{ animate: {} }", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion({
animate: {}
}),
@@ -165,23 +166,23 @@ asyncTest( "{ animate: {} }", function() {
animate = $.fn.animate;
// called twice (both panels)
$.fn.animate = function( props, options ) {
- equal( options.duration, undefined, "default duration" );
- equal( options.easing, undefined, "default easing" );
+ assert.equal( options.duration, undefined, "default duration" );
+ assert.equal( options.easing, undefined, "default easing" );
animate.apply( this, arguments );
};
- ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
element.accordion( "option", "active", 1 );
panels.promise().done(function() {
- ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
- ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
+ assert.ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
$.fn.animate = animate;
- start();
+ QUnit.start();
});
});
-asyncTest( "{ animate: { duration, easing } }", function() {
- expect( 7 );
+QUnit.asyncTest( "{ animate: { duration, easing } }", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion({
animate: { duration: 100, easing: "linear" }
}),
@@ -189,23 +190,23 @@ asyncTest( "{ animate: { duration, easing } }", function() {
animate = $.fn.animate;
// called twice (both panels)
$.fn.animate = function( props, options ) {
- equal( options.duration, 100, "correct duration" );
- equal( options.easing, "linear", "correct easing" );
+ assert.equal( options.duration, 100, "correct duration" );
+ assert.equal( options.easing, "linear", "correct easing" );
animate.apply( this, arguments );
};
- ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
element.accordion( "option", "active", 1 );
panels.promise().done(function() {
- ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
- ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
+ assert.ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
+ assert.ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
$.fn.animate = animate;
- start();
+ QUnit.start();
});
});
-asyncTest( "{ animate: { duration, easing } }, animate down", function() {
- expect( 7 );
+QUnit.asyncTest( "{ animate: { duration, easing } }, animate down", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion({
active: 1,
animate: { duration: 100, easing: "linear" }
@@ -214,23 +215,23 @@ asyncTest( "{ animate: { duration, easing } }, animate down", function() {
animate = $.fn.animate;
// called twice (both panels)
$.fn.animate = function( props, options ) {
- equal( options.duration, 100, "correct duration" );
- equal( options.easing, "linear", "correct easing" );
+ assert.equal( options.duration, 100, "correct duration" );
+ assert.equal( options.easing, "linear", "correct easing" );
animate.apply( this, arguments );
};
- ok( panels.eq( 1 ).is( ":visible" ), "first panel visible" );
+ assert.ok( panels.eq( 1 ).is( ":visible" ), "first panel visible" );
element.accordion( "option", "active", 0 );
panels.promise().done(function() {
- ok( panels.eq( 1 ).is( ":hidden" ), "first panel hidden" );
- ok( panels.eq( 0 ).is( ":visible" ), "second panel visible" );
+ assert.ok( panels.eq( 1 ).is( ":hidden" ), "first panel hidden" );
+ assert.ok( panels.eq( 0 ).is( ":visible" ), "second panel visible" );
$.fn.animate = animate;
- start();
+ QUnit.start();
});
});
-asyncTest( "{ animate: { duration, easing, down } }, animate down", function() {
- expect( 7 );
+QUnit.asyncTest( "{ animate: { duration, easing, down } }, animate down", function( assert ) {
+ assert.expect( 7 );
var element = $( "#list1" ).accordion({
active: 1,
animate: {
@@ -245,154 +246,154 @@ asyncTest( "{ animate: { duration, easing, down } }, animate down", function() {
animate = $.fn.animate;
// called twice (both panels)
$.fn.animate = function( props, options ) {
- equal( options.duration, 100, "correct duration" );
- equal( options.easing, "swing", "correct easing" );
+ assert.equal( options.duration, 100, "correct duration" );
+ assert.equal( options.easing, "swing", "correct easing" );
animate.apply( this, arguments );
};
- ok( panels.eq( 1 ).is( ":visible" ), "first panel visible" );
+ assert.ok( panels.eq( 1 ).is( ":visible" ), "first panel visible" );
element.accordion( "option", "active", 0 );
panels.promise().done(function() {
- ok( panels.eq( 1 ).is( ":hidden" ), "first panel hidden" );
- ok( panels.eq( 0 ).is( ":visible" ), "second panel visible" );
+ assert.ok( panels.eq( 1 ).is( ":hidden" ), "first panel hidden" );
+ assert.ok( panels.eq( 0 ).is( ":visible" ), "second panel visible" );
$.fn.animate = animate;
- start();
+ QUnit.start();
});
});
-test( "{ collapsible: false }", function() {
- expect( 4 );
+QUnit.test( "{ collapsible: false }", function( assert ) {
+ assert.expect( 4 );
var element = $( "#list1" ).accordion({
active: 1
});
element.accordion( "option", "active", false );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "click" );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
});
-test( "{ collapsible: true }", function() {
- expect( 6 );
+QUnit.test( "{ collapsible: true }", function( assert ) {
+ assert.expect( 6 );
var element = $( "#list1" ).accordion({
active: 1,
collapsible: true
});
element.accordion( "option", "active", false );
- equal( element.accordion( "option", "active" ), false );
- state( element, 0, 0, 0 );
+ assert.equal( element.accordion( "option", "active" ), false );
+ state( assert, element, 0, 0, 0 );
element.accordion( "option", "active", 1 );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "click" );
- equal( element.accordion( "option", "active" ), false );
- state( element, 0, 0, 0 );
+ assert.equal( element.accordion( "option", "active" ), false );
+ state( assert, element, 0, 0, 0 );
});
-test( "{ event: null }", function() {
- expect( 5 );
+QUnit.test( "{ event: null }", function( assert ) {
+ assert.expect( 5 );
var element = $( "#list1" ).accordion({
event: null
});
- state( element, 1, 0, 0 );
+ state( assert, element, 1, 0, 0 );
element.accordion( "option", "active", 1 );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
// ensure default click handler isn't bound
element.find( ".ui-accordion-header" ).eq( 2 ).trigger( "click" );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
});
-test( "{ event: custom }", function() {
- expect( 11 );
+QUnit.test( "{ event: custom }", function( assert ) {
+ assert.expect( 11 );
var element = $( "#list1" ).accordion({
event: "custom1 custom2"
});
- state( element, 1, 0, 0 );
+ state( assert, element, 1, 0, 0 );
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "custom1" );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
// ensure default click handler isn't bound
element.find( ".ui-accordion-header" ).eq( 2 ).trigger( "click" );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
element.find( ".ui-accordion-header" ).eq( 2 ).trigger( "custom2" );
- equal( element.accordion( "option", "active" ), 2 );
- state( element, 0, 0, 1 );
+ assert.equal( element.accordion( "option", "active" ), 2 );
+ state( assert, element, 0, 0, 1 );
element.accordion( "option", "event", "custom3" );
// ensure old event handlers are unbound
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "custom1" );
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "custom2" );
- equal( element.accordion( "option", "active" ), 2 );
- state( element, 0, 0, 1 );
+ assert.equal( element.accordion( "option", "active" ), 2 );
+ state( assert, element, 0, 0, 1 );
element.find( ".ui-accordion-header" ).eq( 1 ).trigger( "custom3" );
- equal( element.accordion( "option", "active" ), 1 );
- state( element, 0, 1, 0 );
+ assert.equal( element.accordion( "option", "active" ), 1 );
+ state( assert, element, 0, 1, 0 );
});
-test( "{ header: default }", function() {
- expect( 2 );
+QUnit.test( "{ header: default }", function( assert ) {
+ assert.expect( 2 );
// default: > li > :first-child,> :not(li):even
// > :not(li):even
- state( $( "#list1" ).accordion(), 1, 0, 0);
+ state( assert, $( "#list1" ).accordion(), 1, 0, 0);
// > li > :first-child
- state( $( "#navigation" ).accordion(), 1, 0, 0);
+ state( assert, $( "#navigation" ).accordion(), 1, 0, 0);
});
-test( "{ header: custom }", function( assert ) {
- expect( 6 );
+QUnit.test( "{ header: custom }", function( assert ) {
+ assert.expect( 6 );
var element = $( "#navigationWrapper" ).accordion({
header: "h2"
});
element.find( "h2" ).each(function() {
assert.hasClasses( this, "ui-accordion-header" );
});
- equal( element.find( ".ui-accordion-header" ).length, 3 );
- state( element, 1, 0, 0 );
+ assert.equal( element.find( ".ui-accordion-header" ).length, 3 );
+ state( assert, element, 1, 0, 0 );
element.accordion( "option", "active", 2 );
- state( element, 0, 0, 1 );
+ state( assert, element, 0, 0, 1 );
});
-test( "{ heightStyle: 'auto' }", function() {
- expect( 3 );
+QUnit.test( "{ heightStyle: 'auto' }", function( assert ) {
+ assert.expect( 3 );
var element = $( "#navigation" ).accordion({ heightStyle: "auto" });
- equalHeight( element, 105 );
+ equalHeight( assert, element, 105 );
});
-test( "{ heightStyle: 'content' }", function() {
- expect( 3 );
+QUnit.test( "{ heightStyle: 'content' }", function( assert ) {
+ assert.expect( 3 );
var element = $( "#navigation" ).accordion({ heightStyle: "content" }),
sizes = element.find( ".ui-accordion-content" ).map(function() {
return $( this ).height();
}).get();
- equal( sizes[ 0 ], 75 );
- equal( sizes[ 1 ], 105 );
- equal( sizes[ 2 ], 45 );
+ assert.equal( sizes[ 0 ], 75 );
+ assert.equal( sizes[ 1 ], 105 );
+ assert.equal( sizes[ 2 ], 45 );
});
-test( "{ heightStyle: 'fill' }", function() {
- expect( 3 );
+QUnit.test( "{ heightStyle: 'fill' }", function( assert ) {
+ assert.expect( 3 );
$( "#navigationWrapper" ).height( 500 );
var element = $( "#navigation" ).accordion({ heightStyle: "fill" });
- equalHeight( element, 455 );
+ equalHeight( assert, element, 455 );
});
-test( "{ heightStyle: 'fill' } with sibling", function() {
- expect( 3 );
+QUnit.test( "{ heightStyle: 'fill' } with sibling", function( assert ) {
+ assert.expect( 3 );
$( "#navigationWrapper" ).height( 500 );
$( "
Lorem Ipsum
" )
.css({
@@ -402,11 +403,11 @@ test( "{ heightStyle: 'fill' } with sibling", function() {
})
.prependTo( "#navigationWrapper" );
var element = $( "#navigation" ).accordion({ heightStyle: "fill" });
- equalHeight( element , 355 );
+ equalHeight( assert, element , 355 );
});
-test( "{ heightStyle: 'fill' } with multiple siblings", function() {
- expect( 3 );
+QUnit.test( "{ heightStyle: 'fill' } with multiple siblings", function( assert ) {
+ assert.expect( 3 );
$( "#navigationWrapper" ).height( 500 );
$( "
Lorem Ipsum
" )
.css({
@@ -431,15 +432,15 @@ test( "{ heightStyle: 'fill' } with multiple siblings", function() {
})
.prependTo( "#navigationWrapper" );
var element = $( "#navigation" ).accordion({ heightStyle: "fill" });
- equalHeight( element, 305 );
+ equalHeight( assert, element, 305 );
});
-test( "{ icons: false }", function() {
- expect( 8 );
+QUnit.test( "{ icons: false }", function( assert ) {
+ assert.expect( 8 );
var element = $( "#list1" );
function icons( on ) {
- deepEqual( element.find( "span.ui-icon").length, on ? 3 : 0 );
- deepEqual( element.find( ".ui-accordion-header.ui-accordion-icons" ).length, on ? 3 : 0 );
+ assert.deepEqual( element.find( "span.ui-icon").length, on ? 3 : 0 );
+ assert.deepEqual( element.find( ".ui-accordion-header.ui-accordion-icons" ).length, on ? 3 : 0 );
}
element.accordion();
icons( true );
@@ -453,8 +454,8 @@ test( "{ icons: false }", function() {
icons( false );
});
-test( "{ icons: hash }", function( assert ) {
- expect( 3 );
+QUnit.test( "{ icons: hash }", function( assert ) {
+ assert.expect( 3 );
var element = $( "#list1" ).accordion({
icons: { activeHeader: "a1", header: "h1" }
});
diff --git a/tests/unit/all.js b/tests/unit/all.js
new file mode 100644
index 00000000000..f9a1860c73b
--- /dev/null
+++ b/tests/unit/all.js
@@ -0,0 +1,10 @@
+define([
+ "tests/unit/accordion/core",
+ "tests/unit/accordion/events",
+ "tests/unit/accordion/methods",
+ "tests/unit/accordion/options",
+ "tests/unit/autocomplete/core",
+ "tests/unit/autocomplete/events",
+ "tests/unit/autocomplete/methods",
+ "tests/unit/autocomplete/options",
+]);
diff --git a/tests/unit/autocomplete/autocomplete.html b/tests/unit/autocomplete/autocomplete.html
index 484f2d95758..def2fc06902 100644
--- a/tests/unit/autocomplete/autocomplete.html
+++ b/tests/unit/autocomplete/autocomplete.html
@@ -1,16 +1,3 @@
-
-
-
-
-
jQuery UI Autocomplete Test Suite
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/unit/autocomplete/core.js b/tests/unit/autocomplete/core.js
index 184bcdbf423..3e812d7023e 100644
--- a/tests/unit/autocomplete/core.js
+++ b/tests/unit/autocomplete/core.js
@@ -1,12 +1,14 @@
-define( [
+define([ 'qunit', 'qunit',
"jquery",
+ "./helper",
"ui/autocomplete"
-], function( $ ) {
+], function( QUnit, QUnit, $ , testHelper) {
-module( "autocomplete: core" );
+var setupTeardown = testHelper.setupTeardown;
+QUnit.module( "autocomplete: core", setupTeardown() );
-test( "markup structure", function( assert ) {
- expect( 2 );
+QUnit.test( "markup structure", function( assert ) {
+ assert.expect( 2 );
var element = $( "#autocomplete" ).autocomplete(),
menu = element.autocomplete( "widget" );
@@ -14,8 +16,8 @@ test( "markup structure", function( assert ) {
assert.hasClasses( menu, "ui-autocomplete ui-widget ui-widget-content" );
});
-test( "prevent form submit on enter when menu is active", function() {
- expect( 2 );
+QUnit.test( "prevent form submit on enter when menu is active", function( assert ) {
+ assert.expect( 2 );
var event,
element = $( "#autocomplete" )
.autocomplete({
@@ -28,17 +30,17 @@ test( "prevent form submit on enter when menu is active", function() {
event = $.Event( "keydown" );
event.keyCode = $.ui.keyCode.DOWN;
element.trigger( event );
- equal( menu.find( ".ui-menu-item-wrapper.ui-state-active" ).length, 1,
+ assert.equal( menu.find( ".ui-menu-item-wrapper.ui-state-active" ).length, 1,
"menu item is active" );
event = $.Event( "keydown" );
event.keyCode = $.ui.keyCode.ENTER;
element.trigger( event );
- ok( event.isDefaultPrevented(), "default action is prevented" );
+ assert.ok( event.isDefaultPrevented(), "default action is prevented" );
});
-test( "allow form submit on enter when menu is not active", function() {
- expect( 1 );
+QUnit.test( "allow form submit on enter when menu is not active", function( assert ) {
+ assert.expect( 1 );
var event,
element = $( "#autocomplete" )
.autocomplete({
@@ -51,84 +53,84 @@ test( "allow form submit on enter when menu is not active", function() {
event = $.Event( "keydown" );
event.keyCode = $.ui.keyCode.ENTER;
element.trigger( event );
- ok( !event.isDefaultPrevented(), "default action is prevented" );
+ assert.ok( !event.isDefaultPrevented(), "default action is prevented" );
});
(function() {
- test( "up arrow invokes search - input", function() {
- arrowsInvokeSearch( "#autocomplete", true, true );
+ QUnit.test( "up arrow invokes search - input", function( assert ) {
+ arrowsInvokeSearch( assert, "#autocomplete", true, true );
});
- test( "down arrow invokes search - input", function() {
- arrowsInvokeSearch( "#autocomplete", false, true );
+ QUnit.test( "down arrow invokes search - input", function( assert ) {
+ arrowsInvokeSearch( assert, "#autocomplete", false, true );
});
- test( "up arrow invokes search - textarea", function() {
- arrowsInvokeSearch( "#autocomplete-textarea", true, false );
+ QUnit.test( "up arrow invokes search - textarea", function( assert ) {
+ arrowsInvokeSearch( assert, "#autocomplete-textarea", true, false );
});
- test( "down arrow invokes search - textarea", function() {
- arrowsInvokeSearch( "#autocomplete-textarea", false, false );
+ QUnit.test( "down arrow invokes search - textarea", function( assert ) {
+ arrowsInvokeSearch( assert, "#autocomplete-textarea", false, false );
});
- test( "up arrow invokes search - contenteditable", function() {
- arrowsInvokeSearch( "#autocomplete-contenteditable", true, false );
+ QUnit.test( "up arrow invokes search - contenteditable", function( assert ) {
+ arrowsInvokeSearch( assert, "#autocomplete-contenteditable", true, false );
});
- test( "down arrow invokes search - contenteditable", function() {
- arrowsInvokeSearch( "#autocomplete-contenteditable", false, false );
+ QUnit.test( "down arrow invokes search - contenteditable", function( assert ) {
+ arrowsInvokeSearch( assert, "#autocomplete-contenteditable", false, false );
});
- test( "up arrow moves focus - input", function() {
- arrowsMoveFocus( "#autocomplete", true );
+ QUnit.test( "up arrow moves focus - input", function( assert ) {
+ arrowsMoveFocus( assert, "#autocomplete", true );
});
- test( "down arrow moves focus - input", function() {
- arrowsMoveFocus( "#autocomplete", false );
+ QUnit.test( "down arrow moves focus - input", function( assert ) {
+ arrowsMoveFocus( assert, "#autocomplete", false );
});
- test( "up arrow moves focus - textarea", function() {
- arrowsMoveFocus( "#autocomplete-textarea", true );
+ QUnit.test( "up arrow moves focus - textarea", function( assert ) {
+ arrowsMoveFocus( assert, "#autocomplete-textarea", true );
});
- test( "down arrow moves focus - textarea", function() {
- arrowsMoveFocus( "#autocomplete-textarea", false );
+ QUnit.test( "down arrow moves focus - textarea", function( assert ) {
+ arrowsMoveFocus( assert, "#autocomplete-textarea", false );
});
- test( "up arrow moves focus - contenteditable", function() {
- arrowsMoveFocus( "#autocomplete-contenteditable", true );
+ QUnit.test( "up arrow moves focus - contenteditable", function( assert ) {
+ arrowsMoveFocus( assert, "#autocomplete-contenteditable", true );
});
- test( "down arrow moves focus - contenteditable", function() {
- arrowsMoveFocus( "#autocomplete-contenteditable", false );
+ QUnit.test( "down arrow moves focus - contenteditable", function( assert ) {
+ arrowsMoveFocus( assert, "#autocomplete-contenteditable", false );
});
- test( "up arrow moves cursor - input", function() {
- arrowsNavigateElement( "#autocomplete", true, false );
+ QUnit.test( "up arrow moves cursor - input", function( assert ) {
+ arrowsNavigateElement( assert, "#autocomplete", true, false );
});
- test( "down arrow moves cursor - input", function() {
- arrowsNavigateElement( "#autocomplete", false, false );
+ QUnit.test( "down arrow moves cursor - input", function( assert ) {
+ arrowsNavigateElement( assert, "#autocomplete", false, false );
});
- test( "up arrow moves cursor - textarea", function() {
- arrowsNavigateElement( "#autocomplete-textarea", true, true );
+ QUnit.test( "up arrow moves cursor - textarea", function( assert ) {
+ arrowsNavigateElement( assert, "#autocomplete-textarea", true, true );
});
- test( "down arrow moves cursor - textarea", function() {
- arrowsNavigateElement( "#autocomplete-textarea", false, true );
+ QUnit.test( "down arrow moves cursor - textarea", function( assert ) {
+ arrowsNavigateElement( assert, "#autocomplete-textarea", false, true );
});
- test( "up arrow moves cursor - contenteditable", function() {
- arrowsNavigateElement( "#autocomplete-contenteditable", true, true );
+ QUnit.test( "up arrow moves cursor - contenteditable", function( assert ) {
+ arrowsNavigateElement( assert, "#autocomplete-contenteditable", true, true );
});
- test( "down arrow moves cursor - contenteditable", function() {
- arrowsNavigateElement( "#autocomplete-contenteditable", false, true );
+ QUnit.test( "down arrow moves cursor - contenteditable", function( assert ) {
+ arrowsNavigateElement( assert, "#autocomplete-contenteditable", false, true );
});
- function arrowsInvokeSearch( id, isKeyUp, shouldMove ) {
- expect( 1 );
+ function arrowsInvokeSearch( assert, id, isKeyUp, shouldMove ) {
+ assert.expect( 1 );
var didMove = false,
element = $( id ).autocomplete({
@@ -140,11 +142,11 @@ test( "allow form submit on enter when menu is not active", function() {
didMove = true;
};
element.simulate( "keydown", { keyCode: ( isKeyUp ? $.ui.keyCode.UP : $.ui.keyCode.DOWN ) } );
- equal( didMove, shouldMove, "respond to arrow" );
+ assert.equal( didMove, shouldMove, "respond to arrow" );
}
- function arrowsMoveFocus( id, isKeyUp ) {
- expect( 1 );
+ function arrowsMoveFocus( assert, id, isKeyUp ) {
+ assert.expect( 1 );
var element = $( id ).autocomplete({
source: [ "a" ],
@@ -152,14 +154,14 @@ test( "allow form submit on enter when menu is not active", function() {
minLength: 0
});
element.autocomplete( "instance" )._move = function() {
- ok( true, "repsond to arrow" );
+ assert.ok( true, "repsond to arrow" );
};
element.autocomplete( "search" );
element.simulate( "keydown", { keyCode: ( isKeyUp ? $.ui.keyCode.UP : $.ui.keyCode.DOWN ) } );
}
- function arrowsNavigateElement( id, isKeyUp, shouldMove ) {
- expect( 1 );
+ function arrowsNavigateElement( assert, id, isKeyUp, shouldMove ) {
+ assert.expect( 1 );
var didMove = false,
element = $( id ).autocomplete({
@@ -172,19 +174,19 @@ test( "allow form submit on enter when menu is not active", function() {
});
element.simulate( "keydown", { keyCode: ( isKeyUp ? $.ui.keyCode.UP : $.ui.keyCode.DOWN ) } );
element.simulate( "keypress" );
- equal( didMove, shouldMove, "respond to arrow" );
+ assert.equal( didMove, shouldMove, "respond to arrow" );
}
})();
-asyncTest( "past end of menu in multiline autocomplete", function() {
- expect( 2 );
+QUnit.asyncTest( "past end of menu in multiline autocomplete", function( assert ) {
+ assert.expect( 2 );
var customVal = "custom value",
element = $( "#autocomplete-contenteditable" ).autocomplete({
delay: 0,
source: [ "javascript" ],
focus: function( event, ui ) {
- equal( ui.item.value, "javascript", "Item gained focus" );
+ assert.equal( ui.item.value, "javascript", "Item gained focus" );
$( this ).text( customVal );
event.preventDefault();
}
@@ -197,20 +199,20 @@ asyncTest( "past end of menu in multiline autocomplete", function() {
setTimeout(function() {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( element.text(), customVal );
- start();
+ assert.equal( element.text(), customVal );
+ QUnit.start();
});
});
-asyncTest( "ESCAPE in multiline autocomplete", function() {
- expect( 2 );
+QUnit.asyncTest( "ESCAPE in multiline autocomplete", function( assert ) {
+ assert.expect( 2 );
var customVal = "custom value",
element = $( "#autocomplete-contenteditable" ).autocomplete({
delay: 0,
source: [ "javascript" ],
focus: function( event, ui ) {
- equal( ui.item.value, "javascript", "Item gained focus" );
+ assert.equal( ui.item.value, "javascript", "Item gained focus" );
$( this ).text( customVal );
event.preventDefault();
}
@@ -223,26 +225,26 @@ asyncTest( "ESCAPE in multiline autocomplete", function() {
setTimeout(function() {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
- equal( element.text(), customVal );
- start();
+ assert.equal( element.text(), customVal );
+ QUnit.start();
});
});
-asyncTest( "handle race condition", function() {
- expect( 3 );
+QUnit.asyncTest( "handle race condition", function( assert ) {
+ assert.expect( 3 );
var count = 0,
element = $( "#autocomplete" ).autocomplete({
source: function( request, response ) {
count++;
if ( request.term.length === 1 ) {
- equal( count, 1, "request with 1 character is first" );
+ assert.equal( count, 1, "request with 1 character is first" );
setTimeout(function() {
response([ "one" ]);
setTimeout( checkResults );
});
return;
}
- equal( count, 2, "request with 2 characters is second" );
+ assert.equal( count, 2, "request with 2 characters is second" );
response([ "two" ]);
}
});
@@ -251,14 +253,14 @@ asyncTest( "handle race condition", function() {
element.autocomplete( "search", "ab" );
function checkResults() {
- equal( element.autocomplete( "widget" ).find( ".ui-menu-item" ).text(), "two",
+ assert.equal( element.autocomplete( "widget" ).find( ".ui-menu-item" ).text(), "two",
"correct results displayed" );
- start();
+ QUnit.start();
}
});
-asyncTest( "simultaneous searches (#9334)", function() {
- expect( 2 );
+QUnit.asyncTest( "simultaneous searches (#9334)", function( assert ) {
+ assert.expect( 2 );
var element = $( "#autocomplete" ).autocomplete({
source: function( request, response ) {
setTimeout(function() {
@@ -266,7 +268,7 @@ asyncTest( "simultaneous searches (#9334)", function() {
});
},
response: function() {
- ok( true, "response from first instance" );
+ assert.ok( true, "response from first instance" );
}
}),
element2 = $( "#autocomplete-textarea" ).autocomplete({
@@ -276,8 +278,8 @@ asyncTest( "simultaneous searches (#9334)", function() {
});
},
response: function() {
- ok( true, "response from second instance" );
- start();
+ assert.ok( true, "response from second instance" );
+ QUnit.start();
}
});
@@ -285,60 +287,60 @@ asyncTest( "simultaneous searches (#9334)", function() {
element2.autocomplete( "search", "test" );
});
-test( "ARIA", function() {
- expect( 13 );
+QUnit.test( "ARIA", function( assert ) {
+ assert.expect( 13 );
var element = $( "#autocomplete" ).autocomplete({
source: [ "java", "javascript" ]
}),
liveRegion = element.autocomplete( "instance" ).liveRegion;
- equal( liveRegion.children().length, 0, "Empty live region on create" );
- equal( liveRegion.attr( "aria-live" ), "assertive",
+ assert.equal( liveRegion.children().length, 0, "Empty live region on create" );
+ assert.equal( liveRegion.attr( "aria-live" ), "assertive",
"Live region's aria-live attribute must be assertive" );
- equal( liveRegion.attr( "aria-relevant" ), "additions",
+ assert.equal( liveRegion.attr( "aria-relevant" ), "additions",
"Live region's aria-relevant attribute must be additions" );
- equal( liveRegion.attr( "role" ), "status",
+ assert.equal( liveRegion.attr( "role" ), "status",
"Live region's role attribute must be status" );
element.autocomplete( "search", "j" );
- equal( liveRegion.children().first().text(),
+ assert.equal( liveRegion.children().first().text(),
"2 results are available, use up and down arrow keys to navigate.",
"Live region for multiple values" );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( liveRegion.children().filter( ":visible" ).text(), "java",
+ assert.equal( liveRegion.children().filter( ":visible" ).text(), "java",
"Live region changed on keydown to announce the highlighted value" );
element.one( "autocompletefocus", function( event ) {
event.preventDefault();
});
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( liveRegion.children().filter( ":visible" ).text(), "javascript",
+ assert.equal( liveRegion.children().filter( ":visible" ).text(), "javascript",
"Live region updated when default focus is prevented" );
element.autocomplete( "search", "javas" );
- equal( liveRegion.children().filter( ":visible" ).text(),
+ assert.equal( liveRegion.children().filter( ":visible" ).text(),
"1 result is available, use up and down arrow keys to navigate.",
"Live region for one value" );
element.autocomplete( "search", "z" );
- equal( liveRegion.children().filter( ":visible" ).text(), "No search results.",
+ assert.equal( liveRegion.children().filter( ":visible" ).text(), "No search results.",
"Live region for no values" );
- equal( liveRegion.children().length, 5,
+ assert.equal( liveRegion.children().length, 5,
"Should be five children in the live region after the above" );
- equal( liveRegion.children().filter( ":visible" ).length, 1,
+ assert.equal( liveRegion.children().filter( ":visible" ).length, 1,
"Only one should be still visible" );
- ok( liveRegion.children().filter( ":visible" )[ 0 ] === liveRegion.children().last()[ 0 ],
+ assert.ok( liveRegion.children().filter( ":visible" )[ 0 ] === liveRegion.children().last()[ 0 ],
"The last one should be the visible one" );
element.autocomplete( "destroy" );
- equal( liveRegion.parent().length, 0,
+ assert.equal( liveRegion.parent().length, 0,
"The liveRegion should be detached after destroy" );
});
-test( "ARIA, aria-label announcement", function() {
- expect( 1 );
+QUnit.test( "ARIA, aria-label announcement", function( assert ) {
+ assert.expect( 1 );
$.widget( "custom.catcomplete", $.ui.autocomplete, {
_renderMenu: function( ul, items ) {
var that = this;
@@ -354,31 +356,31 @@ test( "ARIA, aria-label announcement", function() {
liveRegion = element.catcomplete( "instance" ).liveRegion;
element.catcomplete( "search", "a" );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( liveRegion.children().filter( ":visible" ).text(), "People : anders andersson",
+ assert.equal( liveRegion.children().filter( ":visible" ).text(), "People : anders andersson",
"Live region changed on keydown to announce the highlighted value's aria-label attribute" );
});
-test( "ARIA, init on detached input", function() {
- expect( 1 );
+QUnit.test( "ARIA, init on detached input", function( assert ) {
+ assert.expect( 1 );
var element = $( "
" ).autocomplete({
source: [ "java", "javascript" ]
}),
liveRegion = element.autocomplete( "instance" ).liveRegion;
- equal( liveRegion.parent().length, 1, "liveRegion must have a parent" );
+ assert.equal( liveRegion.parent().length, 1, "liveRegion must have a parent" );
});
-test( ".replaceWith() (#9172)", function() {
- expect( 1 );
+QUnit.test( ".replaceWith() (#9172)", function( assert ) {
+ assert.expect( 1 );
var element = $( "#autocomplete" ).autocomplete(),
replacement = "
test
",
parent = element.parent();
element.replaceWith( replacement );
- equal( parent.html().toLowerCase(), replacement );
+ assert.equal( parent.html().toLowerCase(), replacement );
});
-asyncTest( "Search if the user retypes the same value (#7434)", function() {
- expect( 3 );
+QUnit.asyncTest( "Search if the user retypes the same value (#7434)", function( assert ) {
+ assert.expect( 3 );
var element = $( "#autocomplete" ).autocomplete({
source: [ "java", "javascript" ],
delay: 0
@@ -387,13 +389,13 @@ asyncTest( "Search if the user retypes the same value (#7434)", function() {
element.val( "j" ).simulate( "keydown" );
setTimeout(function() {
- ok( menu.is( ":visible" ), "menu displays initially" );
+ assert.ok( menu.is( ":visible" ), "menu displays initially" );
element.trigger( "blur" );
- ok( !menu.is( ":visible" ), "menu hidden after blur" );
+ assert.ok( !menu.is( ":visible" ), "menu hidden after blur" );
element.val( "j" ).simulate( "keydown" );
setTimeout(function() {
- ok( menu.is( ":visible" ), "menu displays after typing the same value" );
- start();
+ assert.ok( menu.is( ":visible" ), "menu displays after typing the same value" );
+ QUnit.start();
});
});
});
diff --git a/tests/unit/autocomplete/events.js b/tests/unit/autocomplete/events.js
index 8f96fb77f1d..2ef9a464d52 100644
--- a/tests/unit/autocomplete/events.js
+++ b/tests/unit/autocomplete/events.js
@@ -1,9 +1,13 @@
-define( [
+define([
+ "lib/qunit",
"jquery",
+ "./helper",
"ui/autocomplete"
-], function( $ ) {
+], function( QUnit, $, testHelper ) {
-module( "autocomplete: events" );
+var setupTeardown = testHelper.setupTeardown;
+
+QUnit.module( "autocomplete: events", setupTeardown() );
var data = [ "Clojure", "COBOL", "ColdFusion", "Java", "JavaScript", "Scala", "Scheme" ];
@@ -24,18 +28,18 @@ $.each([
valueMethod: "text"
}
], function( i, settings ) {
- asyncTest( "all events - " + settings.type, function() {
- expect( 13 );
+ QUnit.asyncTest( "all events - " + settings.type, function( assert ) {
+ assert.expect( 13 );
var element = $( settings.selector )
.autocomplete({
autoFocus: false,
delay: 0,
source: data,
search: function( event ) {
- equal( event.originalEvent.type, "keydown", "search originalEvent" );
+ assert.equal( event.originalEvent.type, "keydown", "search originalEvent" );
},
response: function( event, ui ) {
- deepEqual( ui.content, [
+ assert.deepEqual( ui.content, [
{ label: "Clojure", value: "Clojure" },
{ label: "Java", value: "Java" },
{ label: "JavaScript", value: "JavaScript" }
@@ -43,32 +47,32 @@ $.each([
ui.content.splice( 0, 1 );
},
open: function() {
- ok( menu.is( ":visible" ), "menu open on open" );
+ assert.ok( menu.is( ":visible" ), "menu open on open" );
},
focus: function( event, ui ) {
- equal( event.originalEvent.type, "menufocus", "focus originalEvent" );
- deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" );
+ assert.equal( event.originalEvent.type, "menufocus", "focus originalEvent" );
+ assert.deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" );
},
close: function( event ) {
- equal( event.originalEvent.type, "menuselect", "close originalEvent" );
- ok( menu.is( ":hidden" ), "menu closed on close" );
+ assert.equal( event.originalEvent.type, "menuselect", "close originalEvent" );
+ assert.ok( menu.is( ":hidden" ), "menu closed on close" );
},
select: function( event, ui ) {
- equal( event.originalEvent.type, "menuselect", "select originalEvent" );
- deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" );
+ assert.equal( event.originalEvent.type, "menuselect", "select originalEvent" );
+ assert.deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" );
},
change: function( event, ui ) {
- equal( event.originalEvent.type, "blur", "change originalEvent" );
- deepEqual( ui.item, { label: "Java", value: "Java" }, "change ui.item" );
- ok( menu.is( ":hidden" ), "menu closed on change" );
- start();
+ assert.equal( event.originalEvent.type, "blur", "change originalEvent" );
+ assert.deepEqual( ui.item, { label: "Java", value: "Java" }, "change ui.item" );
+ assert.ok( menu.is( ":hidden" ), "menu closed on change" );
+ QUnit.start();
}
}),
menu = element.autocomplete( "widget" );
element.simulate( "focus" )[ settings.valueMethod ]( "j" ).trigger( "keydown" );
setTimeout(function() {
- ok( menu.is( ":visible" ), "menu is visible after delay" );
+ assert.ok( menu.is( ":visible" ), "menu is visible after delay" );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
// blur must be async for IE to handle it properly
@@ -79,53 +83,53 @@ $.each([
});
});
-asyncTest( "change without selection", function() {
- expect( 1 );
+QUnit.asyncTest( "change without selection", function( assert ) {
+ assert.expect( 1 );
var element = $( "#autocomplete" ).autocomplete({
delay: 0,
source: data,
change: function( event, ui ) {
- strictEqual( ui.item, null );
- start();
+ assert.strictEqual( ui.item, null );
+ QUnit.start();
}
});
element.triggerHandler( "focus" );
element.val( "ja" ).triggerHandler( "blur" );
});
-asyncTest( "cancel search", function() {
- expect( 6 );
+QUnit.asyncTest( "cancel search", function( assert ) {
+ assert.expect( 6 );
var first = true,
element = $( "#autocomplete" ).autocomplete({
delay: 0,
source: data,
search: function() {
if ( first ) {
- equal( element.val(), "ja", "val on first search" );
+ assert.equal( element.val(), "ja", "val on first search" );
first = false;
return false;
}
- equal( element.val(), "java", "val on second search" );
+ assert.equal( element.val(), "java", "val on second search" );
},
open: function() {
- ok( true, "menu opened" );
+ assert.ok( true, "menu opened" );
}
}),
menu = element.autocomplete( "widget" );
element.val( "ja" ).trigger( "keydown" );
setTimeout(function() {
- ok( menu.is( ":hidden" ), "menu is hidden after first search" );
+ assert.ok( menu.is( ":hidden" ), "menu is hidden after first search" );
element.val( "java" ).trigger( "keydown" );
setTimeout(function() {
- ok( menu.is( ":visible" ), "menu is visible after second search" );
- equal( menu.find( ".ui-menu-item" ).length, 2, "# of menu items" );
- start();
+ assert.ok( menu.is( ":visible" ), "menu is visible after second search" );
+ assert.equal( menu.find( ".ui-menu-item" ).length, 2, "# of menu items" );
+ QUnit.start();
});
});
});
-asyncTest( "cancel focus", function() {
- expect( 1 );
+QUnit.asyncTest( "cancel focus", function( assert ) {
+ assert.expect( 1 );
var customVal = "custom value",
element = $( "#autocomplete" ).autocomplete({
delay: 0,
@@ -138,13 +142,13 @@ asyncTest( "cancel focus", function() {
element.val( "ja" ).trigger( "keydown" );
setTimeout(function() {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( element.val(), customVal );
- start();
+ assert.equal( element.val(), customVal );
+ QUnit.start();
});
});
-asyncTest( "cancel select", function() {
- expect( 1 );
+QUnit.asyncTest( "cancel select", function( assert ) {
+ assert.expect( 1 );
var customVal = "custom value",
element = $( "#autocomplete" ).autocomplete({
delay: 0,
@@ -158,25 +162,25 @@ asyncTest( "cancel select", function() {
setTimeout(function() {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
- equal( element.val(), customVal );
- start();
+ assert.equal( element.val(), customVal );
+ QUnit.start();
});
});
-asyncTest( "blur during remote search", function() {
- expect( 1 );
+QUnit.asyncTest( "blur during remote search", function( assert ) {
+ assert.expect( 1 );
var ac = $( "#autocomplete" ).autocomplete({
delay: 0,
source: function( request, response ) {
- ok( true, "trigger request" );
+ assert.ok( true, "trigger request" );
ac.simulate( "blur" );
setTimeout(function() {
response([ "result" ]);
- start();
+ QUnit.start();
}, 25);
},
open: function() {
- ok( false, "opened after a blur" );
+ assert.ok( false, "opened after a blur" );
}
});
ac.val( "ro" ).trigger( "keydown" );
diff --git a/tests/unit/autocomplete/helper.js b/tests/unit/autocomplete/helper.js
new file mode 100644
index 00000000000..e382857a261
--- /dev/null
+++ b/tests/unit/autocomplete/helper.js
@@ -0,0 +1,26 @@
+define( [
+ "intern!qunit",
+ "jquery",
+ "lib/helper",
+ "lib/css",
+ "text!tests/unit/autocomplete/autocomplete.html",
+ "ui/accordion",
+ "jquery-simulate",
+ "./common"
+], function( QUnit, $, helper, cssjs, htmlContent ) {
+cssjs( { module: "core menu autocomplete" } );
+
+return $.extend( helper, {
+ setupTeardown: function() {
+ return {
+ setup: function() {
+ $("body").append(htmlContent);
+ },
+ teardown: function() {
+ $("#qunit-fixture").remove();
+ }
+ };
+ }
+} );
+
+} );
diff --git a/tests/unit/autocomplete/methods.js b/tests/unit/autocomplete/methods.js
index 32080207add..72423f7b6ce 100644
--- a/tests/unit/autocomplete/methods.js
+++ b/tests/unit/autocomplete/methods.js
@@ -1,19 +1,22 @@
-define( [
+define([ 'qunit',
"jquery",
+ "./helper",
"ui/autocomplete"
-], function( $ ) {
+], function( QUnit, $, testHelper ) {
-module( "autocomplete: methods" );
+var setupTeardown = testHelper.setupTeardown;
-test( "destroy", function( assert ) {
- expect( 1 );
+QUnit.module( "autocomplete: methods", setupTeardown() );
+
+QUnit.test( "destroy", function( assert ) {
+ assert.expect( 1 );
assert.domEqual( "#autocomplete", function() {
$( "#autocomplete" ).autocomplete().autocomplete( "destroy" );
});
});
-test( "search, close", function() {
- expect( 6 );
+QUnit.test( "search, close", function( assert ) {
+ assert.expect( 6 );
var data = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "perl" ],
element = $( "#autocomplete" ).autocomplete({
source: data,
@@ -21,27 +24,27 @@ test( "search, close", function() {
}),
menu = element.autocomplete( "widget" );
- ok( menu.is( ":hidden" ), "menu is hidden on init" );
+ assert.ok( menu.is( ":hidden" ), "menu is hidden on init" );
element.autocomplete( "search" );
- ok( menu.is( ":visible" ), "menu is visible after search" );
- equal( menu.find( ".ui-menu-item" ).length, data.length, "all items for a blank search" );
+ assert.ok( menu.is( ":visible" ), "menu is visible after search" );
+ assert.equal( menu.find( ".ui-menu-item" ).length, data.length, "all items for a blank search" );
element.val( "has" ).autocomplete( "search" );
- equal( menu.find( ".ui-menu-item" ).text(), "haskell", "only one item for set input value" );
+ assert.equal( menu.find( ".ui-menu-item" ).text(), "haskell", "only one item for set input value" );
element.autocomplete( "search", "ja" );
- equal( menu.find( ".ui-menu-item" ).length, 2, "only java and javascript for 'ja'" );
+ assert.equal( menu.find( ".ui-menu-item" ).length, 2, "only java and javascript for 'ja'" );
element.autocomplete( "close" );
- ok( menu.is( ":hidden" ), "menu is hidden after close" );
+ assert.ok( menu.is( ":hidden" ), "menu is hidden after close" );
});
-test( "widget", function( assert ) {
- expect( 2 );
+QUnit.test( "widget", function( assert ) {
+ assert.expect( 2 );
var element = $( "#autocomplete" ).autocomplete(),
widgetElement = element.autocomplete( "widget" );
- equal( widgetElement.length, 1, "one element" );
+ assert.equal( widgetElement.length, 1, "one element" );
assert.hasClasses( widgetElement, "ui-menu" );
});
diff --git a/tests/unit/autocomplete/options.js b/tests/unit/autocomplete/options.js
index 06c75722b32..63bffe71863 100644
--- a/tests/unit/autocomplete/options.js
+++ b/tests/unit/autocomplete/options.js
@@ -1,108 +1,110 @@
-define( [
+define([ 'qunit',
"jquery",
+ "./helper",
"ui/autocomplete"
-], function( $ ) {
+], function( QUnit, $, testHelper ) {
-module( "autocomplete: options" );
+var setupTeardown = testHelper.setupTeardown;
+
+QUnit.module( "autocomplete: options", setupTeardown() );
var data = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby",
"python", "c", "scala", "groovy", "haskell", "perl" ];
-test( "appendTo: null", function() {
- expect( 1 );
+QUnit.test( "appendTo: null", function( assert ) {
+ assert.expect( 1 );
var element = $( "#autocomplete" ).autocomplete();
- equal( element.autocomplete( "widget" ).parent()[ 0 ], document.body,
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ], document.body,
"defaults to body" );
element.autocomplete( "destroy" );
});
-test( "appendTo: explicit", function() {
- expect( 6 );
+QUnit.test( "appendTo: explicit", function( assert ) {
+ assert.expect( 6 );
var detached = $( "
" ),
element = $( "#autocomplete" );
element.autocomplete({
appendTo: ".autocomplete-wrap"
});
- equal( element.autocomplete( "widget" ).parent()[ 0 ],
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ],
$( "#autocomplete-wrap1" )[ 0 ], "first found element" );
- equal( $( "#autocomplete-wrap2 .ui-autocomplete" ).length, 0,
+ assert.equal( $( "#autocomplete-wrap2 .ui-autocomplete" ).length, 0,
"only appends to one element" );
element.autocomplete( "destroy" );
element.autocomplete().autocomplete( "option", "appendTo", "#autocomplete-wrap1" );
- equal( element.autocomplete( "widget" ).parent()[ 0 ],
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ],
$( "#autocomplete-wrap1" )[ 0 ], "modified after init" );
element.autocomplete( "destroy" );
element.autocomplete({
appendTo: detached
});
- equal( element.autocomplete( "widget" ).parent()[ 0 ], detached[ 0 ],
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ], detached[ 0 ],
"detached jQuery object" );
element.autocomplete( "destroy" );
element.autocomplete({
appendTo: detached[ 0 ]
});
- equal( element.autocomplete( "widget" ).parent()[ 0 ], detached[ 0 ],
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ], detached[ 0 ],
"detached DOM element" );
element.autocomplete( "destroy" );
element.autocomplete().autocomplete( "option", "appendTo", detached );
- equal( element.autocomplete( "widget" ).parent()[ 0 ], detached[ 0 ],
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ], detached[ 0 ],
"detached DOM element via option()" );
element.autocomplete( "destroy" );
});
-test( "appendTo: ui-front", function() {
- expect( 2 );
+QUnit.test( "appendTo: ui-front", function( assert ) {
+ assert.expect( 2 );
var element = $( "#autocomplete" );
$( "#autocomplete-wrap2" ).addClass( "ui-front" );
element.autocomplete();
- equal( element.autocomplete( "widget" ).parent()[ 0 ],
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ],
$( "#autocomplete-wrap2" )[ 0 ], "null, inside .ui-front" );
element.autocomplete( "destroy" );
element.autocomplete({
appendTo: $()
});
- equal( element.autocomplete( "widget" ).parent()[ 0 ],
+ assert.equal( element.autocomplete( "widget" ).parent()[ 0 ],
$( "#autocomplete-wrap2" )[ 0 ], "empty jQuery object, inside .ui-front" );
});
-function autoFocusTest( afValue, focusedLength ) {
+function autoFocusTest( assert, afValue, focusedLength ) {
var element = $( "#autocomplete" ).autocomplete({
autoFocus: afValue,
delay: 0,
source: data,
open: function() {
- equal(
+ assert.equal(
element.autocomplete( "widget" )
.find( ".ui-menu-item-wrapper.ui-state-active" )
.length,
focusedLength,
"first item is " + (afValue ? "" : "not") + " auto focused" );
- start();
+ QUnit.start();
}
});
element.val( "ja" ).trigger( "keydown" );
- stop();
}
-test( "autoFocus: false", function() {
- expect( 1 );
- autoFocusTest( false, 0 );
+QUnit.asyncTest( "autoFocus: false", function( assert ) {
+ assert.expect( 1 );
+ autoFocusTest( assert, false, 0 );
});
-test( "autoFocus: true", function() {
- expect( 1 );
- autoFocusTest( true, 1 );
+QUnit.asyncTest( "autoFocus: true", function( assert ) {
+ assert.expect( 1 );
+ autoFocusTest( assert, true, 1 );
});
-asyncTest( "delay", function() {
- expect( 2 );
+QUnit.asyncTest( "delay", function( assert ) {
+ assert.expect( 2 );
var element = $( "#autocomplete" ).autocomplete({
source: data,
delay: 25
@@ -110,16 +112,16 @@ asyncTest( "delay", function() {
menu = element.autocomplete( "widget" );
element.val( "ja" ).trigger( "keydown" );
- ok( menu.is( ":hidden" ), "menu is closed immediately after search" );
+ assert.ok( menu.is( ":hidden" ), "menu is closed immediately after search" );
setTimeout(function() {
- ok( menu.is( ":visible" ), "menu is open after delay" );
- start();
+ assert.ok( menu.is( ":visible" ), "menu is open after delay" );
+ QUnit.start();
}, 50 );
});
-asyncTest( "disabled", function( assert ) {
- expect( 5 );
+QUnit.asyncTest( "disabled", function( assert ) {
+ assert.expect( 5 );
var element = $( "#autocomplete" ).autocomplete({
source: data,
delay: 0
@@ -127,38 +129,38 @@ asyncTest( "disabled", function( assert ) {
menu = element.autocomplete( "disable" ).autocomplete( "widget" );
element.val( "ja" ).trigger( "keydown" );
- ok( menu.is( ":hidden" ) );
+ assert.ok( menu.is( ":hidden" ) );
assert.lacksClasses( element, "ui-state-disabled" );
assert.hasClasses( menu, "ui-autocomplete-disabled" );
- ok( !element.attr( "aria-disabled" ), "element doesn't get aria-disabled" );
+ assert.ok( !element.attr( "aria-disabled" ), "element doesn't get aria-disabled" );
setTimeout(function() {
- ok( menu.is( ":hidden" ) );
- start();
+ assert.ok( menu.is( ":hidden" ) );
+ QUnit.start();
});
});
-test( "minLength", function() {
- expect( 2 );
+QUnit.test( "minLength", function( assert ) {
+ assert.expect( 2 );
var element = $( "#autocomplete" ).autocomplete({
source: data
}),
menu = element.autocomplete( "widget" );
element.autocomplete( "search", "" );
- ok( menu.is( ":hidden" ), "blank not enough for minLength: 1" );
+ assert.ok( menu.is( ":hidden" ), "blank not enough for minLength: 1" );
element.autocomplete( "option", "minLength", 0 );
element.autocomplete( "search", "" );
- ok( menu.is( ":visible" ), "blank enough for minLength: 0" );
+ assert.ok( menu.is( ":visible" ), "blank enough for minLength: 0" );
});
-asyncTest( "minLength, exceed then drop below", function() {
- expect( 4 );
+QUnit.asyncTest( "minLength, exceed then drop below", function( assert ) {
+ assert.expect( 4 );
var element = $( "#autocomplete" ).autocomplete({
minLength: 2,
source: function( req, res ) {
- equal( req.term, "12", "correct search term" );
+ assert.equal( req.term, "12", "correct search term" );
setTimeout(function() {
res([ "item" ]);
});
@@ -166,20 +168,20 @@ asyncTest( "minLength, exceed then drop below", function() {
}),
menu = element.autocomplete( "widget" );
- ok( menu.is( ":hidden" ), "menu is hidden before first search" );
+ assert.ok( menu.is( ":hidden" ), "menu is hidden before first search" );
element.autocomplete( "search", "12" );
- ok( menu.is( ":hidden" ), "menu is hidden before second search" );
+ assert.ok( menu.is( ":hidden" ), "menu is hidden before second search" );
element.autocomplete( "search", "1" );
setTimeout(function() {
- ok( menu.is( ":hidden" ), "menu is hidden after searches" );
- start();
+ assert.ok( menu.is( ":hidden" ), "menu is hidden after searches" );
+ QUnit.start();
});
});
-test( "minLength, exceed then drop below then exceed", function() {
- expect( 3 );
+QUnit.test( "minLength, exceed then drop below then exceed", function( assert ) {
+ assert.expect( 3 );
var _res = [],
element = $( "#autocomplete" ).autocomplete({
minLength: 2,
@@ -190,11 +192,11 @@ test( "minLength, exceed then drop below then exceed", function() {
menu = element.autocomplete( "widget" );
// trigger a valid search
- ok( menu.is( ":hidden" ), "menu is hidden before first search" );
+ assert.ok( menu.is( ":hidden" ), "menu is hidden before first search" );
element.autocomplete( "search", "12" );
// trigger a search below the minLength, to turn on cancelSearch flag
- ok( menu.is( ":hidden" ), "menu is hidden before second search" );
+ assert.ok( menu.is( ":hidden" ), "menu is hidden before second search" );
element.autocomplete( "search", "1" );
// trigger a valid search
@@ -204,46 +206,45 @@ test( "minLength, exceed then drop below then exceed", function() {
// react to second search
_res[ 1 ]([ "13" ]);
- ok( menu.is( ":visible" ), "menu is visible after searches" );
+ assert.ok( menu.is( ":visible" ), "menu is visible after searches" );
});
-test( "source, local string array", function() {
- expect( 1 );
+QUnit.test( "source, local string array", function( assert ) {
+ assert.expect( 1 );
var element = $( "#autocomplete" ).autocomplete({
source: data
}),
menu = element.autocomplete( "widget" );
element.val( "ja" ).autocomplete( "search" );
- equal( menu.find( ".ui-menu-item" ).text(), "javajavascript" );
+ assert.equal( menu.find( ".ui-menu-item" ).text(), "javajavascript" );
});
-function sourceTest( source, async ) {
+function sourceTest( assert, source, async ) {
var element = $( "#autocomplete" ).autocomplete({
source: source
}),
menu = element.autocomplete( "widget" );
function result() {
var items = menu.find( ".ui-menu-item" );
- equal( items.length, 3, "Should find three results." );
- deepEqual( items.eq( 0 ).data( "ui-autocomplete-item" ), {
+ assert.equal( items.length, 3, "Should find three results." );
+ assert.deepEqual( items.eq( 0 ).data( "ui-autocomplete-item" ), {
label: "java",
value: "java"
});
- deepEqual( items.eq( 1 ).data( "ui-autocomplete-item" ), {
+ assert.deepEqual( items.eq( 1 ).data( "ui-autocomplete-item" ), {
label: "javascript",
value: "javascript"
});
- deepEqual( items.eq( 2 ).data( "ui-autocomplete-item" ), {
+ assert.deepEqual( items.eq( 2 ).data( "ui-autocomplete-item" ), {
label: "clojure",
value: "clojure"
});
element.autocomplete( "destroy" );
if ( async ) {
- start();
+ QUnit.start();
}
}
if ( async ) {
- stop();
$( document ).one( "ajaxStop", result );
}
element.val( "j" ).autocomplete( "search" );
@@ -252,9 +253,9 @@ function sourceTest( source, async ) {
}
}
-test( "source, local object array, only labels", function() {
- expect( 4 );
- sourceTest([
+QUnit.test( "source, local object array, only labels", function( assert ) {
+ assert.expect( 4 );
+ sourceTest( assert, [
{ label: "java", value: null },
{ label: "php", value: null },
{ label: "coldfusion", value: "" },
@@ -263,9 +264,9 @@ test( "source, local object array, only labels", function() {
]);
});
-test( "source, local object array, only values", function() {
- expect( 4 );
- sourceTest([
+QUnit.test( "source, local object array, only values", function( assert ) {
+ assert.expect( 4 );
+ sourceTest( assert, [
{ value: "java", label: null },
{ value: "php", label: null },
{ value: "coldfusion", label: "" },
@@ -274,25 +275,25 @@ test( "source, local object array, only values", function() {
]);
});
-test( "source, url string with remote json string array", function() {
- expect( 4 );
- sourceTest( "remote_string_array.txt", true );
+QUnit.asyncTest( "source, url string with remote json string array", function( assert ) {
+ assert.expect( 4 );
+ sourceTest( assert, "../../tests/unit/autocomplete/remote_string_array.txt", true );
});
-test( "source, url string with remote json object array, only value properties", function() {
- expect( 4 );
- sourceTest( "remote_object_array_values.txt", true );
+QUnit.asyncTest( "source, url string with remote json object array, only value properties", function( assert ) {
+ assert.expect( 4 );
+ sourceTest( assert, "../../tests/unit/autocomplete/remote_object_array_values.txt", true );
});
-test( "source, url string with remote json object array, only label properties", function() {
- expect( 4 );
- sourceTest( "remote_object_array_labels.txt", true );
+QUnit.asyncTest( "source, url string with remote json object array, only label properties", function( assert ) {
+ assert.expect( 4 );
+ sourceTest( assert, "../../tests/unit/autocomplete/remote_object_array_labels.txt", true );
});
-test( "source, custom", function() {
- expect( 5 );
- sourceTest(function( request, response ) {
- equal( request.term, "j" );
+QUnit.test( "source, custom", function( assert ) {
+ assert.expect( 5 );
+ sourceTest( assert,function( request, response ) {
+ assert.equal( request.term, "j" );
response([
"java",
{ label: "javascript", value: null },
@@ -301,17 +302,17 @@ test( "source, custom", function() {
});
});
-test( "source, update after init", function() {
- expect( 2 );
+QUnit.test( "source, update after init", function( assert ) {
+ assert.expect( 2 );
var element = $( "#autocomplete" ).autocomplete({
source: [ "java", "javascript", "haskell" ]
}),
menu = element.autocomplete( "widget" );
element.val( "ja" ).autocomplete( "search" );
- equal( menu.find( ".ui-menu-item" ).text(), "javajavascript" );
+ assert.equal( menu.find( ".ui-menu-item" ).text(), "javajavascript" );
element.autocomplete( "option", "source", [ "php", "asp" ] );
element.val( "ph" ).autocomplete( "search" );
- equal( menu.find( ".ui-menu-item" ).text(), "php" );
+ assert.equal( menu.find( ".ui-menu-item" ).text(), "php" );
});
} );