From 29a9030c78a02d5c3b41b66283fe7b5325ac11a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?= Date: Mon, 3 Jun 2024 18:15:39 +0200 Subject: [PATCH] CSS:Tests: Fix tests & support tests under CSS Zoom (3.x version) Firefox 126+ implements CSS zoom in a way it affects width computed style very slightly (`100.008px` instead of `100px`); accept that difference. Also, skip the width setter under zoom test in Firefox 126 completely - that version has CSS zoom affecting `offsetWidth` values. This has been fixed in Firefox 127 so it's not worth working around it. Add a test for support tests resolving the same under CSS zoom & without one. That test uncovered Chrome failing the `reliableTrDimensions` support test under zoom; the test has been fixed. Fixes gh-5489 Closes gh-5496 Ref gh-5495 --- src/css/support.js | 6 +++--- test/data/support/zoom.html | 24 ++++++++++++++++++++++++ test/unit/css.js | 16 ++++++++++++++-- test/unit/support.js | 20 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 test/data/support/zoom.html diff --git a/src/css/support.js b/src/css/support.js index 8838f0bc1..0a730593d 100644 --- a/src/css/support.js +++ b/src/css/support.js @@ -151,9 +151,9 @@ define( [ } trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + reliableTrDimensionsVal = ( Math.round( parseFloat( trStyle.height ) ) + + Math.round( parseFloat( trStyle.borderTopWidth ) ) + + Math.round( parseFloat( trStyle.borderBottomWidth ) ) ) === tr.offsetHeight; documentElement.removeChild( table ); } diff --git a/test/data/support/zoom.html b/test/data/support/zoom.html new file mode 100644 index 000000000..318b834ec --- /dev/null +++ b/test/data/support/zoom.html @@ -0,0 +1,24 @@ + + + + + + + +
+ + + +
+ + + diff --git a/test/unit/css.js b/test/unit/css.js index 2603e73d9..851c5f68f 100644 --- a/test/unit/css.js +++ b/test/unit/css.js @@ -1396,8 +1396,20 @@ testIframe( "css/cssWidthBrowserZoom.html", function( assert, jQuery, window, document, widthBeforeSet, widthAfterSet ) { assert.expect( 2 ); - assert.strictEqual( widthBeforeSet, "100px", "elem.css('width') works correctly with browser zoom" ); - assert.strictEqual( widthAfterSet, "100px", "elem.css('width', val) works correctly with browser zoom" ); + + // Support: Firefox 126+ + // Newer Firefox implements CSS zoom in a way it affects + // those values slightly. + assert.ok( /^100(?:|\.0\d*)px$/.test( widthBeforeSet ), "elem.css('width') works correctly with browser zoom" ); + + // Support: Firefox 126 only + // In Firefox 126 only, CSS zoom affects `offsetWidth`. Since the issue + // is fixed in v127, let's just skip the test in v126. + if ( /\bfirefox\/126\.\d\b/i.test( navigator.userAgent ) ) { + assert.ok( true, "elem.css('width', val) works incorrectly with browser zoom in Firefox 126 and we accept that" ); + } else { + assert.ok( /^100(?:|\.0\d*)px$/.test( widthAfterSet ), "elem.css('width', val) works correctly with browser zoom" ); + } } ); diff --git a/test/unit/support.js b/test/unit/support.js index 8ea87bab8..0a65d29f3 100644 --- a/test/unit/support.js +++ b/test/unit/support.js @@ -66,6 +66,26 @@ testIframe( } ); +testIframe( + "Verify correctness of support tests with CSS zoom on the root element", + "support/zoom.html", + function( assert, jQuery, window, document, htmlStyle, support ) { + assert.expect( 1 ); + + // Support: Firefox 126 only + // In Firefox 126 only, CSS zoom affects `offsetWidth`, causing + // the `scrollboxSize` support test to fail. Accept that. + if ( /\bfirefox\/126\.\d\b/i.test( navigator.userAgent ) ) { + assert.deepEqual( jQuery.extend( {}, support ), + jQuery.extend( {}, computedSupport, { scrollboxSize: false } ), + "Same support properties except for `scrollboxSize`" ); + } else { + assert.deepEqual( jQuery.extend( {}, support ), computedSupport, + "Same support properties" ); + } + } +); + ( function() { var browserKey, expected, userAgent = window.navigator.userAgent,