1 QUnit.module( "support", { afterEach: moduleTeardown } );
3 var computedSupport = getComputedSupport( jQuery.support );
5 function getComputedSupport( support ) {
9 for ( prop in support ) {
10 if ( typeof support[ prop ] === "function" ) {
11 result[ prop ] = support[ prop ]();
13 result[ prop ] = support[ prop ];
20 if ( includesModule( "css" ) ) {
22 "body background is not lost if set prior to loading jQuery (trac-9239)",
23 "support/bodyBackground.html",
24 function( assert, jQuery, window, document, color, support ) {
30 assert.ok( okValue[ color ], "color was not reset (" + color + ")" );
32 assert.deepEqual( jQuery.extend( {}, support ), computedSupport,
33 "Same support properties" );
38 // This test checks CSP only for browsers with "Content-Security-Policy" header support
41 "Check CSP (https://developer.mozilla.org/en-US/docs/Security/CSP) restrictions",
42 "mock.php?action=cspFrame",
43 function( assert, jQuery, window, document, support ) {
44 var done = assert.async();
47 assert.deepEqual( jQuery.extend( {}, support ), computedSupport,
48 "No violations of CSP polices" );
50 supportjQuery.get( baseURL + "support/csp.log" ).done( function( data ) {
51 assert.equal( data, "", "No log request should be sent" );
52 supportjQuery.get( baseURL + "mock.php?action=cspClean" ).done( done );
59 userAgent = window.navigator.userAgent,
62 cssSupportsSelector: false,
63 reliableTrDimensions: false
66 cssSupportsSelector: false,
67 reliableTrDimensions: true
70 cssSupportsSelector: false,
71 reliableTrDimensions: true
74 cssSupportsSelector: false,
75 reliableTrDimensions: false
78 cssSupportsSelector: false,
79 reliableTrDimensions: true
83 if ( document.documentMode ) {
84 expected = expectedMap.ie_11;
85 } else if ( /chrome/i.test( userAgent ) ) {
87 // Catches Edge, Chrome on Android & Opera as well.
88 expected = expectedMap.chrome;
89 } else if ( /\b\d+(\.\d+)+ safari/i.test( userAgent ) ) {
90 expected = expectedMap.safari;
91 } else if ( /firefox/i.test( userAgent ) ) {
92 expected = expectedMap.firefox;
93 } else if ( /(?:iphone|ipad);.*(?:iphone)? os \d+_/i.test( userAgent ) ) {
94 expected = expectedMap.ios;
97 QUnit.test( "Verify that support tests resolve as expected per browser", function( assert ) {
100 assert.ok( false, "Known client: " + userAgent );
106 for ( prop in computedSupport ) {
110 // Add an assertion per undefined support prop as it may
111 // not even exist on computedSupport but we still want to run
113 for ( prop in expected ) {
114 if ( expected[ prop ] === undefined ) {
121 for ( i in expected ) {
122 assert.equal( computedSupport[ i ], expected[ i ],
123 "jQuery.support['" + i + "']: " + computedSupport[ i ] +
124 ", expected['" + i + "']: " + expected[ i ] );
128 QUnit.test( "Verify support tests are failing in one of tested browsers",
131 var prop, browserKey, supportTestName,
134 failingSupportProps = {};
136 for ( prop in computedSupport ) {
140 // Add an assertion per undefined support prop as it may
141 // not even exist on computedSupport but we still want to run
143 for ( prop in expected ) {
144 if ( expected[ prop ] === undefined ) {
151 // Record all support props and the failing ones and ensure every test
152 // is failing at least once.
153 for ( browserKey in expectedMap ) {
154 for ( supportTestName in expectedMap[ browserKey ] ) {
155 supportProps[ supportTestName ] = true;
156 if ( !expectedMap[ browserKey ][ supportTestName ] ) {
157 failingSupportProps[ supportTestName ] = true;
162 for ( supportTestName in supportProps ) {
163 assert.ok( failingSupportProps[ supportTestName ],
164 "jQuery.support['" + supportTestName +
165 "'] is expected to fail at least in one browser" );