| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- QUnit.module( "support", { afterEach: moduleTeardown } );
- var computedSupport = getComputedSupport( jQuery.support );
- function getComputedSupport( support ) {
- var prop,
- result = {};
- for ( prop in support ) {
- if ( typeof support[ prop ] === "function" ) {
- result[ prop ] = support[ prop ]();
- } else {
- result[ prop ] = support[ prop ];
- }
- }
- return result;
- }
- if ( jQuery.css ) {
- testIframe(
- "body background is not lost if set prior to loading jQuery (#9239)",
- "support/bodyBackground.html",
- function( assert, jQuery, window, document, color, support ) {
- assert.expect( 2 );
- var okValue = {
- "#000000": true,
- "rgb(0, 0, 0)": true
- };
- assert.ok( okValue[ color ], "color was not reset (" + color + ")" );
- assert.deepEqual( jQuery.extend( {}, support ), computedSupport,
- "Same support properties" );
- }
- );
- }
- // This test checks CSP only for browsers with "Content-Security-Policy" header support
- // i.e. no old WebKit or old Firefox
- testIframe(
- "Check CSP (https://developer.mozilla.org/en-US/docs/Security/CSP) restrictions",
- "mock.php?action=cspFrame",
- function( assert, jQuery, window, document, support ) {
- var done = assert.async();
- assert.expect( 2 );
- assert.deepEqual( jQuery.extend( {}, support ), computedSupport,
- "No violations of CSP polices" );
- supportjQuery.get( baseURL + "support/csp.log" ).done( function( data ) {
- assert.equal( data, "", "No log request should be sent" );
- supportjQuery.get( baseURL + "mock.php?action=cspClean" ).done( done );
- } );
- }
- );
- ( function() {
- var browserKey, expected,
- userAgent = window.navigator.userAgent,
- expectedMap = {
- edge: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": false,
- "scrollboxSize": true
- },
- ie_10_11: {
- "ajax": true,
- "boxSizingReliable": false,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": false,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": true,
- "noCloneChecked": false,
- "option": true,
- "optSelected": false,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": false,
- "reliableMarginLeft": true,
- "reliableTrDimensions": false,
- "scrollboxSize": true
- },
- ie_9: {
- "ajax": true,
- "boxSizingReliable": false,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": false,
- "cors": false,
- "createHTMLDocument": true,
- "focusin": true,
- "noCloneChecked": false,
- "option": false,
- "optSelected": false,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": false,
- "reliableMarginLeft": true,
- "reliableTrDimensions": false,
- "scrollboxSize": false
- },
- chrome: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- safari: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- safari_9_10: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": false,
- "pixelPosition": false,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- firefox: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": false,
- "scrollboxSize": true
- },
- firefox_60: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": true,
- "reliableMarginLeft": false,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- ios: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": true,
- "pixelPosition": true,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- ios_9_10: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": false,
- "pixelPosition": false,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- ios_8: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": false,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": false,
- "pixelPosition": false,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- ios_7: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": true,
- "checkOn": true,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": false,
- "pixelPosition": false,
- "radioValue": true,
- "reliableMarginLeft": true,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- },
- android: {
- "ajax": true,
- "boxSizingReliable": true,
- "checkClone": false,
- "checkOn": false,
- "clearCloneStyle": true,
- "cors": true,
- "createHTMLDocument": true,
- "focusin": false,
- "noCloneChecked": true,
- "option": true,
- "optSelected": true,
- "pixelBoxStyles": false,
- "pixelPosition": false,
- "radioValue": true,
- "reliableMarginLeft": false,
- "reliableTrDimensions": true,
- "scrollboxSize": true
- }
- };
- // Make the slim build pass tests.
- for ( browserKey in expectedMap ) {
- if ( !jQuery.ajax ) {
- delete expectedMap[ browserKey ].ajax;
- delete expectedMap[ browserKey ].cors;
- }
- }
- if ( /edge\//i.test( userAgent ) ) {
- expected = expectedMap.edge;
- } else if ( /(msie 10\.0|trident\/7\.0)/i.test( userAgent ) ) {
- expected = expectedMap.ie_10_11;
- } else if ( /msie 9\.0/i.test( userAgent ) ) {
- 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 = expectedMap.chrome;
- } else if ( /\b(?:9|10)\.\d+(\.\d+)* safari/i.test( userAgent ) ) {
- expected = expectedMap.safari_9_10;
- } else if ( /firefox\/(?:4\d|5\d|60)/i.test( userAgent ) ) {
- expected = expectedMap.firefox_60;
- } else if ( /firefox/i.test( userAgent ) ) {
- expected = expectedMap.firefox;
- } else if ( /android 4\.[0-3]/i.test( userAgent ) ) {
- expected = expectedMap.android;
- } else if ( /iphone os (?:9|10)_/i.test( userAgent ) ) {
- expected = expectedMap.ios_9_10;
- } else if ( /iphone os 8_/i.test( userAgent ) ) {
- expected = expectedMap.ios_8;
- } else if ( /iphone os 7_/i.test( userAgent ) ) {
- expected = expectedMap.ios_7;
- } else if ( /(?:iphone|ipad);.*(?:iphone)? os \d+_/i.test( userAgent ) ) {
- expected = expectedMap.ios;
- } else if ( /\b\d+(\.\d+)+ safari/i.test( userAgent ) ) {
- expected = expectedMap.safari;
- }
- QUnit.test( "Verify that support tests resolve as expected per browser", function( assert ) {
- if ( !expected ) {
- assert.expect( 1 );
- assert.ok( false, "Known client: " + userAgent );
- }
- var i, prop,
- j = 0;
- for ( prop in computedSupport ) {
- j++;
- }
- assert.expect( j );
- for ( i in expected ) {
- if ( jQuery.ajax || i !== "ajax" && i !== "cors" ) {
- assert.equal( computedSupport[ i ], expected[ i ],
- "jQuery.support['" + i + "']: " + computedSupport[ i ] +
- ", expected['" + i + "']: " + expected[ i ] );
- } else {
- assert.ok( true, "no ajax; skipping jQuery.support['" + i + "']" );
- }
- }
- } );
- 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?" );
- }
- } );
- } )();
|