diff options
author | Michał Gołębiowski-Owczarek <m.goleb@gmail.com> | 2018-04-23 14:16:21 +0200 |
---|---|---|
committer | Michał Gołębiowski-Owczarek <m.goleb@gmail.com> | 2018-04-23 20:39:52 +0200 |
commit | 9a5b3b6ed0803d816984718de23d6af451260c89 (patch) | |
tree | 81acfe6914b0972a15fa748bc34162e578ed4807 | |
parent | 899c56f6ada26821e8af12d9f35fa039100e838e (diff) | |
download | jquery-9a5b3b6ed0803d816984718de23d6af451260c89.tar.gz jquery-9a5b3b6ed0803d816984718de23d6af451260c89.zip |
Tests: ensure support tests are failed by at least one tested browser
A whitelist is available so that some tests can be allowed to always succeed.
This is used only for ajax for now as it can be manually disabled in IE but
is enabled by default.
Closes gh-4052
-rw-r--r-- | test/unit/support.js | 458 |
1 files changed, 253 insertions, 205 deletions
diff --git a/test/unit/support.js b/test/unit/support.js index a42a129f1..199067975 100644 --- a/test/unit/support.js +++ b/test/unit/support.js @@ -56,227 +56,241 @@ testIframe( ( function() { var expected, - userAgent = window.navigator.userAgent; + userAgent = window.navigator.userAgent, + expectedMap = { + edge: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + ie_10_11: { + "ajax": true, + "boxSizingReliable": false, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": false, + "cors": true, + "createHTMLDocument": true, + "focusin": true, + "noCloneChecked": false, + "optSelected": false, + "pixelBoxStyles": true, + "pixelPosition": true, + "radioValue": false, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + ie_9: { + "ajax": true, + "boxSizingReliable": false, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": false, + "cors": false, + "createHTMLDocument": true, + "focusin": true, + "noCloneChecked": false, + "optSelected": false, + "pixelBoxStyles": true, + "pixelPosition": true, + "radioValue": false, + "reliableMarginLeft": true, + "scrollboxSize": "absolute" + }, + chrome: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + safari_11: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + safari_9_10: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + firefox: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, + "radioValue": true, + "reliableMarginLeft": false, + "scrollboxSize": true + }, + ios_11: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + ios_9_10: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + ios_8: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": false, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + ios_7: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": true, + "checkOn": true, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, + "radioValue": true, + "reliableMarginLeft": true, + "scrollboxSize": true + }, + android: { + "ajax": true, + "boxSizingReliable": true, + "checkClone": false, + "checkOn": false, + "clearCloneStyle": true, + "cors": true, + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, + "radioValue": true, + "reliableMarginLeft": false, + "scrollboxSize": true + } + }; if ( /edge\//i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": true, - "pixelPosition": true, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.edge; } else if ( /(msie 10\.0|trident\/7\.0)/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": false, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": false, - "cors": true, - "createHTMLDocument": true, - "focusin": true, - "noCloneChecked": false, - "optSelected": false, - "pixelBoxStyles": true, - "pixelPosition": true, - "radioValue": false, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.ie_10_11; } else if ( /msie 9\.0/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": false, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": false, - "cors": false, - "createHTMLDocument": true, - "focusin": true, - "noCloneChecked": false, - "optSelected": false, - "pixelBoxStyles": true, - "pixelPosition": true, - "radioValue": false, - "reliableMarginLeft": true, - "scrollboxSize": "absolute" - }; + expected = expectedMap.ie_9; } else if ( /chrome/i.test( userAgent ) ) { // Catches Chrome on Android as well (i.e. the default // Android browser on Android >= 4.4). - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": true, - "pixelPosition": true, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.chrome; } else if ( /\b11\.\d(\.\d+)* safari/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": true, - "pixelPosition": true, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.safari_11; } else if ( /\b(?:9|10)\.\d(\.\d+)* safari/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": false, - "pixelPosition": false, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.safari_9_10; } else if ( /firefox/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": true, - "pixelPosition": true, - "radioValue": true, - "reliableMarginLeft": false, - "scrollboxSize": true - }; + expected = expectedMap.firefox; } else if ( /iphone os 11_/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": true, - "pixelPosition": true, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.ios_11; } else if ( /iphone os (?:9|10)_/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": false, - "pixelPosition": false, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.ios_9_10; } else if ( /iphone os 8_/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": false, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": false, - "pixelPosition": false, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.ios_8; } else if ( /iphone os 7_/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": true, - "checkOn": true, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": false, - "pixelPosition": false, - "radioValue": true, - "reliableMarginLeft": true, - "scrollboxSize": true - }; + expected = expectedMap.ios_7; } else if ( /android 4\.[0-3]/i.test( userAgent ) ) { - expected = { - "ajax": true, - "boxSizingReliable": true, - "checkClone": false, - "checkOn": false, - "clearCloneStyle": true, - "cors": true, - "createHTMLDocument": true, - "focusin": false, - "noCloneChecked": true, - "optSelected": true, - "pixelBoxStyles": false, - "pixelPosition": false, - "radioValue": true, - "reliableMarginLeft": false, - "scrollboxSize": true - }; + expected = expectedMap.android; } QUnit.test( "Verify that support tests resolve as expected per browser", function( assert ) { @@ -305,4 +319,38 @@ testIframe( } } ); + QUnit.test( "Verify most support tests are failing in one " + + "of tested browsers", function( assert ) { + + var prop, browserKey, supportTestName, + i = 0, + supportProps = {}, + failingSupportProps = {}, + whitelist = { + ajax: true + }; + + for ( prop in computedSupport ) { + i++; + } + + assert.expect( i ); + + // Record all support props and the failing ones and ensure everyone + // except a few on a whitelist are failing at least once. + for ( browserKey in expectedMap ) { + for ( supportTestName in expectedMap[ browserKey ] ) { + supportProps[ supportTestName ] = true; + if ( expectedMap[ browserKey ][ supportTestName ] !== true ) { + failingSupportProps[ supportTestName ] = true; + } + } + } + + for ( supportTestName in supportProps ) { + assert.ok( whitelist[ supportTestName ] || failingSupportProps[ supportTestName ], + "jQuery.support['" + supportTestName + "'] always succeeds; remove it?" ); + } + } ); + } )(); |