From: Krinkle Date: Thu, 19 May 2011 21:35:32 +0000 (+0000) Subject: QUnit reorganization X-Git-Tag: 1.31.0-rc.0~30069 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=9970000ba24d27ce16a9c43b09b6f54bfa57002d QUnit reorganization * Moved QUnit directory from /resources/test/ to /tests/qunit/. * Includes an .htaccess file in /tests/qunit/ to allow reading this from the browser (since /tests/.htaccess disallows this by default, as it should) * Deleted "/unit/main.css" which wasn't used for anything (was an idea I had but redundant now) * Renamed /qunit/unit/ to /qunit/suites/ * Re-organized structure within /suites/ to match that of MediaWiki's. (ie. /resources/jquery, /resources/mediawiki.util etc.) This will make it easier to write a "check if all JS have a test suite" thingy. * Added a few "Clean up" sections in the test suites to remove added elements (namely added portlet links) --- diff --git a/resources/test/index.html b/resources/test/index.html deleted file mode 100644 index 3138182223..0000000000 --- a/resources/test/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - MediaWiki JavaScript Test Suite - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

MediaWiki JavaScript Test Suite

-

-
-

-
    - -
    -
    -
    -
    - -
    -
    -
    - - diff --git a/resources/test/sample/awesome.js b/resources/test/sample/awesome.js deleted file mode 100644 index 61fbbc7227..0000000000 --- a/resources/test/sample/awesome.js +++ /dev/null @@ -1 +0,0 @@ -window.awesome = true; diff --git a/resources/test/testswarm.inject.js b/resources/test/testswarm.inject.js deleted file mode 100644 index 14ee8f93ab..0000000000 --- a/resources/test/testswarm.inject.js +++ /dev/null @@ -1,349 +0,0 @@ -/* - Copyright (c) 2009 John Resig - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - -*/ -(function(){ - - var DEBUG = false; - - var doPost = false; - - try { - doPost = !!window.top.postMessage; - } catch(e){} - - var search = window.location.search, - url, index; - if( ( index = search.indexOf( "swarmURL=" ) ) != -1 ) - url = decodeURIComponent( search.slice( index + 9 ) ); - - if ( !DEBUG && (!url || url.indexOf("http") !== 0) ) { - return; - } - - var submitTimeout = 5; - - var curHeartbeat; - var beatRate = 20; - - // Expose the TestSwarm API - window.TestSwarm = { - submit: submit, - heartbeat: function(){ - if ( curHeartbeat ) { - clearTimeout( curHeartbeat ); - } - - curHeartbeat = setTimeout(function(){ - submit({ fail: -1, total: -1 }); - }, beatRate * 1000); - }, - serialize: function(){ - return trimSerialize(); - } - }; - - // Prevent careless things from executing - window.print = window.confirm = window.alert = window.open = function(){}; - - window.onerror = function(e){ - document.body.appendChild( document.createTextNode( "ERROR: " + e )); - submit({ fail: 0, error: 1, total: 1 }); - return false; - }; - - // QUnit (jQuery) - // http://docs.jquery.com/QUnit - if ( typeof QUnit !== "undefined" ) { - QUnit.done = function(results){ - submit({ - fail: results.failed, - error: 0, - total: results.total - }); - }; - - QUnit.log = window.TestSwarm.heartbeat; - window.TestSwarm.heartbeat(); - - window.TestSwarm.serialize = function(){ - // Clean up the HTML (remove any un-needed test markup) - remove("nothiddendiv"); - remove("loadediframe"); - remove("dl"); - remove("main"); - - // Show any collapsed results - var ol = document.getElementsByTagName("ol"); - for ( var i = 0; i < ol.length; i++ ) { - ol[i].style.display = "block"; - } - - return trimSerialize(); - }; - - // UnitTestJS (Prototype, Scriptaculous) - // http://github.com/tobie/unittest_js/tree/master - } else if ( typeof Test !== "undefined" && Test && Test.Unit && Test.Unit.runners ) { - var total_runners = Test.Unit.runners.length, cur_runners = 0; - var total = 0, fail = 0, error = 0; - - for (var i = 0; i < Test.Unit.runners.length; i++) (function(i){ - var finish = Test.Unit.runners[i].finish; - Test.Unit.runners[i].finish = function(){ - finish.call( this ); - - var results = this.getResult(); - total += results.assertions; - fail += results.failures; - error += results.errors; - - if ( ++cur_runners === total_runners ) { - submit({ - fail: fail, - error: error, - total: total - }); - } - }; - })(i); - - // JSSpec (MooTools) - // http://jania.pe.kr/aw/moin.cgi/JSSpec - } else if ( typeof JSSpec !== "undefined" && JSSpec && JSSpec.Logger ) { - var onRunnerEnd = JSSpec.Logger.prototype.onRunnerEnd; - JSSpec.Logger.prototype.onRunnerEnd = function(){ - onRunnerEnd.call(this); - - // Show any collapsed results - var ul = document.getElementsByTagName("ul"); - for ( var i = 0; i < ul.length; i++ ) { - ul[i].style.display = "block"; - } - - submit({ - fail: JSSpec.runner.getTotalFailures(), - error: JSSpec.runner.getTotalErrors(), - total: JSSpec.runner.totalExamples - }); - }; - - window.TestSwarm.serialize = function(){ - // Show any collapsed results - var ul = document.getElementsByTagName("ul"); - for ( var i = 0; i < ul.length; i++ ) { - ul[i].style.display = "block"; - } - - return trimSerialize(); - }; - - // JSUnit - // http://www.jsunit.net/ - // Note: Injection file must be included before the frames - // are document.write()d into the page. - } else if ( typeof JsUnitTestManager !== "undefined" ) { - var _done = JsUnitTestManager.prototype._done; - JsUnitTestManager.prototype._done = function(){ - _done.call(this); - - submit({ - fail: this.failureCount, - error: this.errorCount, - total: this.totalCount - }); - }; - - window.TestSwarm.serialize = function(){ - return "
    " + this.log.join("\n") + "
    "; - }; - - // Selenium Core - // http://seleniumhq.org/projects/core/ - } else if ( typeof SeleniumTestResult !== "undefined" && typeof LOG !== "undefined" ) { - // Completely overwrite the postback - SeleniumTestResult.prototype.post = function(){ - submit({ - fail: this.metrics.numCommandFailures, - error: this.metrics.numCommandErrors, - total: this.metrics.numCommandPasses + this.metrics.numCommandFailures + this.metrics.numCommandErrors - }); - }; - - window.TestSwarm.serialize = function(){ - var results = []; - while ( LOG.pendingMessages.length ) { - var msg = LOG.pendingMessages.shift(); - results.push( msg.type + ": " + msg.msg ); - } - - return "
    " + results.join("\n") + "
    "; - }; - - // Dojo Objective Harness - // http://docs.dojocampus.org/quickstart/doh - } else if ( typeof doh !== "undefined" && doh._report ) { - var _report = doh._report; - doh._report = function(){ - _report.apply(this, arguments); - - submit({ - fail: doh._failureCount, - error: doh._errorCount, - total: doh._testCount - }); - }; - - window.TestSwarm.serialize = function(){ - return "
    " + document.getElementById("logBody").innerHTML + "
    "; - }; - // Screw.Unit - // git://github.com/nathansobo/screw-unit.git - } else if ( typeof Screw !== "undefined" && typeof jQuery !== 'undefined' && Screw && Screw.Unit ) { - $(Screw).bind("after", function() { - var passed = $('.passed').length; - var failed = $('.failed').length; - submit({ - fail: failed, - error: 0, - total: failed + passed - }); - }); - - $(Screw).bind("loaded", function() { - $('.it') - .bind("passed", window.TestSwarm.heartbeat) - .bind("failed", window.TestSwarm.heartbeat); - window.TestSwarm.heartbeat(); - }); - - window.TestSwarm.serialize = function(){ - return trimSerialize(); - }; - } - - function trimSerialize(doc) { - doc = doc || document; - - var scripts = doc.getElementsByTagName("script"); - while ( scripts.length ) { - remove( scripts[0] ); - } - - var root = window.location.href.replace(/(https?:\/\/.*?)\/.*/, "$1"); - var cur = window.location.href.replace(/[^\/]*$/, ""); - - var links = doc.getElementsByTagName("link"); - for ( var i = 0; i < links.length; i++ ) { - var href = links[i].href; - if ( href.indexOf("/") === 0 ) { - href = root + href; - } else if ( !/^https?:\/\//.test( href ) ) { - href = cur + href; - } - links[i].href = href; - } - - return ("" + doc.documentElement.innerHTML + "") - .replace(/\s+/g, " "); - } - - function remove(elem){ - if ( typeof elem === "string" ) { - elem = document.getElementById( elem ); - } - - if ( elem ) { - elem.parentNode.removeChild( elem ); - } - } - - function submit(params){ - if ( curHeartbeat ) { - clearTimeout( curHeartbeat ); - } - - var paramItems = (url.split("?")[1] || "").split("&"); - - for ( var i = 0; i < paramItems.length; i++ ) { - if ( paramItems[i] ) { - var parts = paramItems[i].split("="); - if ( !params[ parts[0] ] ) { - params[ parts[0] ] = parts[1]; - } - } - } - - if ( !params.state ) { - params.state = "saverun"; - } - - if ( !params.results ) { - params.results = window.TestSwarm.serialize(); - } - - if ( doPost ) { - // Build Query String - var query = ""; - - for ( var i in params ) { - query += ( query ? "&" : "" ) + i + "=" + - encodeURIComponent(params[i]); - } - - if ( DEBUG ) { - alert( query ); - } else { - window.top.postMessage( query, "*" ); - } - - } else { - var form = document.createElement("form"); - form.action = url; - form.method = "POST"; - - for ( var i in params ) { - var input = document.createElement("input"); - input.type = "hidden"; - input.name = i; - input.value = params[i]; - form.appendChild( input ); - } - - if ( DEBUG ) { - alert( form.innerHTML ); - } else { - - // Watch for the result submission timing out - setTimeout(function(){ - submit( params ); - }, submitTimeout * 1000); - - document.body.appendChild( form ); - form.submit(); - } - } - } - -})(); diff --git a/resources/test/unit/jquery/jquery.autoEllipsis.js b/resources/test/unit/jquery/jquery.autoEllipsis.js deleted file mode 100644 index e0d5b98f63..0000000000 --- a/resources/test/unit/jquery/jquery.autoEllipsis.js +++ /dev/null @@ -1,49 +0,0 @@ -module( 'jquery.autoEllipsis.js' ); - -test( '-- Initial check', function(){ - - ok( jQuery.fn.autoEllipsis, 'jQuery.fn.autoEllipsis defined' ); -}); - -function createWrappedDiv( text ) { - var $wrapper = $( '
    ' ).css( 'width', '100px' ); - var $div = $( '
    ' ).text( text ); - $wrapper.append( $div ); - return $wrapper; -} - -function findDivergenceIndex( a, b ) { - var i = 0; - while ( i < a.length && i < b.length && a[i] == b[i] ) { - i++; - } - return i; -} - -test( 'Position right', function() { - // We need this thing to be visible, so append it to the DOM - var origText = 'This is a really long random string and there is no way it fits in 100 pixels.'; - var $wrapper = createWrappedDiv( origText ); - $( 'body' ).append( $wrapper ); - $wrapper.autoEllipsis( { position: 'right' } ); - - // Verify that, and only one, span element was created - var $span = $wrapper.find( '> span' ); - deepEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' ); - - // Check that the text fits by turning on word wrapping - $span.css( 'whiteSpace', 'nowrap' ); - ok( $span.width() <= $span.parent().width(), "Text fits (span's width is no larger than its parent's width)" ); - - // Add one character using scary black magic - var spanText = $span.text(); - var d = findDivergenceIndex( origText, spanText ); - spanText = spanText.substr( 0, d ) + origText[d] + '...'; - - // Put this text in the span and verify it doesn't fit - $span.text( spanText ); - ok( $span.width() > $span.parent().width(), 'Fit is maximal (adding one character makes it not fit any more)' ); - - // Clean up - $wrapper.remove(); -}); diff --git a/resources/test/unit/jquery/jquery.colorUtil.js b/resources/test/unit/jquery/jquery.colorUtil.js deleted file mode 100644 index 5c8f0676f4..0000000000 --- a/resources/test/unit/jquery/jquery.colorUtil.js +++ /dev/null @@ -1,67 +0,0 @@ -module( 'jquery.colorUtil.js' ); - -test( '-- Initial check', function(){ - - ok( jQuery.colorUtil, 'jQuery.colorUtil defined' ); -}); - -test( 'getRGB', function(){ - - equal( typeof jQuery.colorUtil.getRGB(), 'undefined', 'No arguments' ); - equal( typeof jQuery.colorUtil.getRGB( '' ), 'undefined', 'Empty string' ); - deepEqual( jQuery.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Array' ); - deepEqual( jQuery.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple string' ); - deepEqual( jQuery.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple string (whitespace)' ); - deepEqual( jQuery.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse percentages string' ); - deepEqual( jQuery.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse percentages string (whitespace)' ); - deepEqual( jQuery.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' ); - deepEqual( jQuery.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' ); - deepEqual( jQuery.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' ); - deepEqual( jQuery.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' ); - deepEqual( jQuery.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' ); - deepEqual( jQuery.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' ); - deepEqual( jQuery.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' ); - // Perhaps this is a bug in colorUtil, but it is the current behaviour so, let's keep track - // would that ever change - equal( typeof jQuery.colorUtil.getRGB( 'rgba(0,0,0,0)' ), 'undefined', 'Zero rgba without whitespace' ); - - deepEqual( jQuery.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' ); - deepEqual( jQuery.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (transparent)' ); - equal( typeof jQuery.colorUtil.getRGB( 'mediaWiki' ), 'undefined', 'Inexisting color name' ); - -}); - -test( 'rgbToHsl', function(){ - var hsl = jQuery.colorUtil.rgbToHsl( 144, 238, 144 ); - var dualDecimals = function(a,b){ - return Math.round(a*100)/100; - }; - - ok( hsl, 'Basic return evaluation' ); - deepEqual( dualDecimals(hsl[0]) , 0.33, 'rgb(144, 238, 144): H 0.33' ); - deepEqual( dualDecimals(hsl[1]) , 0.73, 'rgb(144, 238, 144): S 0.73' ); - deepEqual( dualDecimals(hsl[2]) , 0.75, 'rgb(144, 238, 144): L 0.75' ); - -}); - -test( 'hslToRgb', function(){ - var rgb = jQuery.colorUtil.hslToRgb( 0.3, 0.7, 0.8 ); - - ok( rgb, 'Basic return evaluation' ); - deepEqual( Math.round(rgb[0]) , 183, 'hsl(0.3, 0.7, 0.8): R 183' ); - deepEqual( Math.round(rgb[1]) , 240, 'hsl(0.3, 0.7, 0.8): G 240' ); - deepEqual( Math.round(rgb[2]) , 168, 'hsl(0.3, 0.7, 0.8): B 168' ); - -}); - -test( 'getColorBrightness', function(){ - - var a = jQuery.colorUtil.getColorBrightness( 'red', +0.1 ); - - equal( a, 'rgb(255,50,50)', 'Start with named color, brighten 10%' ); - - var b = jQuery.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 ); - - equal( b, 'rgb(118,29,29)', 'Start with rgb string, darken 10%' ); - -}); diff --git a/resources/test/unit/jquery/jquery.mwPrototypes.js b/resources/test/unit/jquery/jquery.mwPrototypes.js deleted file mode 100644 index b53e062d76..0000000000 --- a/resources/test/unit/jquery/jquery.mwPrototypes.js +++ /dev/null @@ -1,58 +0,0 @@ -module( 'jquery.mwPrototypes.js' ); - -test( 'String functions', function(){ - - equal( $j.trimLeft( ' foo bar ' ), 'foo bar ', 'trimLeft' ); - equal( $j.trimRight( ' foo bar ' ), ' foo bar', 'trimRight' ); - equal( $j.ucFirst( 'foo'), 'Foo', 'ucFirst' ); - - equal( $j.escapeRE( ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    MediaWiki JavaScript Test Suite

    +

    +
    +

    +
      + + + +
      +
      +
      +
      +
        +
      +
      +
      +
      + + diff --git a/tests/qunit/sample/awesome.js b/tests/qunit/sample/awesome.js new file mode 100644 index 0000000000..61fbbc7227 --- /dev/null +++ b/tests/qunit/sample/awesome.js @@ -0,0 +1 @@ +window.awesome = true; diff --git a/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.js b/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.js new file mode 100644 index 0000000000..e0d5b98f63 --- /dev/null +++ b/tests/qunit/suites/resources/jquery/jquery.autoEllipsis.js @@ -0,0 +1,49 @@ +module( 'jquery.autoEllipsis.js' ); + +test( '-- Initial check', function(){ + + ok( jQuery.fn.autoEllipsis, 'jQuery.fn.autoEllipsis defined' ); +}); + +function createWrappedDiv( text ) { + var $wrapper = $( '
      ' ).css( 'width', '100px' ); + var $div = $( '
      ' ).text( text ); + $wrapper.append( $div ); + return $wrapper; +} + +function findDivergenceIndex( a, b ) { + var i = 0; + while ( i < a.length && i < b.length && a[i] == b[i] ) { + i++; + } + return i; +} + +test( 'Position right', function() { + // We need this thing to be visible, so append it to the DOM + var origText = 'This is a really long random string and there is no way it fits in 100 pixels.'; + var $wrapper = createWrappedDiv( origText ); + $( 'body' ).append( $wrapper ); + $wrapper.autoEllipsis( { position: 'right' } ); + + // Verify that, and only one, span element was created + var $span = $wrapper.find( '> span' ); + deepEqual( $span.length, 1, 'autoEllipsis wrapped the contents in a span element' ); + + // Check that the text fits by turning on word wrapping + $span.css( 'whiteSpace', 'nowrap' ); + ok( $span.width() <= $span.parent().width(), "Text fits (span's width is no larger than its parent's width)" ); + + // Add one character using scary black magic + var spanText = $span.text(); + var d = findDivergenceIndex( origText, spanText ); + spanText = spanText.substr( 0, d ) + origText[d] + '...'; + + // Put this text in the span and verify it doesn't fit + $span.text( spanText ); + ok( $span.width() > $span.parent().width(), 'Fit is maximal (adding one character makes it not fit any more)' ); + + // Clean up + $wrapper.remove(); +}); diff --git a/tests/qunit/suites/resources/jquery/jquery.colorUtil.js b/tests/qunit/suites/resources/jquery/jquery.colorUtil.js new file mode 100644 index 0000000000..5c8f0676f4 --- /dev/null +++ b/tests/qunit/suites/resources/jquery/jquery.colorUtil.js @@ -0,0 +1,67 @@ +module( 'jquery.colorUtil.js' ); + +test( '-- Initial check', function(){ + + ok( jQuery.colorUtil, 'jQuery.colorUtil defined' ); +}); + +test( 'getRGB', function(){ + + equal( typeof jQuery.colorUtil.getRGB(), 'undefined', 'No arguments' ); + equal( typeof jQuery.colorUtil.getRGB( '' ), 'undefined', 'Empty string' ); + deepEqual( jQuery.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Array' ); + deepEqual( jQuery.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple string' ); + deepEqual( jQuery.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple string (whitespace)' ); + deepEqual( jQuery.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse percentages string' ); + deepEqual( jQuery.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse percentages string (whitespace)' ); + deepEqual( jQuery.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' ); + deepEqual( jQuery.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' ); + deepEqual( jQuery.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' ); + deepEqual( jQuery.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' ); + deepEqual( jQuery.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' ); + deepEqual( jQuery.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' ); + deepEqual( jQuery.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' ); + // Perhaps this is a bug in colorUtil, but it is the current behaviour so, let's keep track + // would that ever change + equal( typeof jQuery.colorUtil.getRGB( 'rgba(0,0,0,0)' ), 'undefined', 'Zero rgba without whitespace' ); + + deepEqual( jQuery.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' ); + deepEqual( jQuery.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (transparent)' ); + equal( typeof jQuery.colorUtil.getRGB( 'mediaWiki' ), 'undefined', 'Inexisting color name' ); + +}); + +test( 'rgbToHsl', function(){ + var hsl = jQuery.colorUtil.rgbToHsl( 144, 238, 144 ); + var dualDecimals = function(a,b){ + return Math.round(a*100)/100; + }; + + ok( hsl, 'Basic return evaluation' ); + deepEqual( dualDecimals(hsl[0]) , 0.33, 'rgb(144, 238, 144): H 0.33' ); + deepEqual( dualDecimals(hsl[1]) , 0.73, 'rgb(144, 238, 144): S 0.73' ); + deepEqual( dualDecimals(hsl[2]) , 0.75, 'rgb(144, 238, 144): L 0.75' ); + +}); + +test( 'hslToRgb', function(){ + var rgb = jQuery.colorUtil.hslToRgb( 0.3, 0.7, 0.8 ); + + ok( rgb, 'Basic return evaluation' ); + deepEqual( Math.round(rgb[0]) , 183, 'hsl(0.3, 0.7, 0.8): R 183' ); + deepEqual( Math.round(rgb[1]) , 240, 'hsl(0.3, 0.7, 0.8): G 240' ); + deepEqual( Math.round(rgb[2]) , 168, 'hsl(0.3, 0.7, 0.8): B 168' ); + +}); + +test( 'getColorBrightness', function(){ + + var a = jQuery.colorUtil.getColorBrightness( 'red', +0.1 ); + + equal( a, 'rgb(255,50,50)', 'Start with named color, brighten 10%' ); + + var b = jQuery.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 ); + + equal( b, 'rgb(118,29,29)', 'Start with rgb string, darken 10%' ); + +}); diff --git a/tests/qunit/suites/resources/jquery/jquery.mwPrototypes.js b/tests/qunit/suites/resources/jquery/jquery.mwPrototypes.js new file mode 100644 index 0000000000..b53e062d76 --- /dev/null +++ b/tests/qunit/suites/resources/jquery/jquery.mwPrototypes.js @@ -0,0 +1,58 @@ +module( 'jquery.mwPrototypes.js' ); + +test( 'String functions', function(){ + + equal( $j.trimLeft( ' foo bar ' ), 'foo bar ', 'trimLeft' ); + equal( $j.trimRight( ' foo bar ' ), ' foo bar', 'trimRight' ); + equal( $j.ucFirst( 'foo'), 'Foo', 'ucFirst' ); + + equal( $j.escapeRE( '