2021-07-03 19:18:21 -07:00
/ * *
* Copyright ( c ) Microsoft Corporation .
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
* /
2022-03-25 15:05:50 -08:00
import { browserTest as it , expect } from '../config/browserTest' ;
2021-07-03 19:18:21 -07:00
import fs from 'fs' ;
2022-06-21 14:04:52 -07:00
import os from 'os' ;
2021-07-03 19:18:21 -07:00
async function checkFeatures ( name : string , context : any , server : any ) {
try {
const page = await context . newPage ( ) ;
2024-08-23 16:59:55 +02:00
await page . goto ( server . PREFIX + '/modernizr/index.html' ) ;
2021-07-03 19:18:21 -07:00
const actual = await page . evaluate ( 'window.report' ) ;
2022-03-25 21:11:29 -08:00
const expected = JSON . parse ( fs . readFileSync ( require . resolve ( ` ../assets/modernizr/ ${ name } .json ` ) , 'utf-8' ) ) ;
2021-07-23 09:13:57 -07:00
return { actual , expected } ;
2021-07-03 19:18:21 -07:00
} finally {
await context . close ( ) ;
}
}
2024-08-23 16:59:55 +02:00
it ( 'Safari Desktop' , async ( { browser , browserName , platform , server , headless , isMac } ) = > {
2021-07-23 09:13:57 -07:00
it . skip ( browserName !== 'webkit' ) ;
2024-08-19 10:29:23 -07:00
it . skip ( browserName === 'webkit' && platform === 'darwin' && parseInt ( os . release ( ) , 10 ) === 22 , 'Modernizr uses WebGL which is not available in macOS-13 - https://bugs.webkit.org/show_bug.cgi?id=278277' ) ;
2021-07-12 08:35:59 -07:00
const context = await browser . newContext ( {
deviceScaleFactor : 2
} ) ;
2024-08-23 16:59:55 +02:00
const { actual , expected } = await checkFeatures ( 'safari-18' , context , server ) ;
expected . pushmanager = false ;
expected . devicemotion2 = false ;
expected . devicemotion = false ;
expected . deviceorientation = false ;
expected . deviceorientation3 = false ;
delete expected . webglextensions ;
delete actual . webglextensions ;
expected . audio = ! ! expected . audio ;
actual . audio = ! ! actual . audio ;
expected . video = ! ! expected . video ;
actual . video = ! ! actual . video ;
2021-07-23 09:13:57 -07:00
if ( platform === 'linux' ) {
expected . subpixelfont = false ;
2024-08-23 12:51:49 +02:00
expected . speechrecognition = false ;
2024-08-23 16:59:55 +02:00
expected . publickeycredential = false ;
expected . mediastream = false ;
2021-07-23 09:13:57 -07:00
if ( headless )
expected . todataurljpeg = false ;
// GHA
delete actual . variablefonts ;
delete expected . variablefonts ;
}
if ( platform === 'win32' ) {
expected . datalistelem = false ;
expected . getusermedia = false ;
expected . peerconnection = false ;
expected . speechrecognition = false ;
expected . speechsynthesis = false ;
expected . todataurljpeg = false ;
expected . webaudio = false ;
2024-08-23 12:51:49 +02:00
expected . gamepads = false ;
2021-07-23 09:13:57 -07:00
expected . input . list = false ;
2024-08-23 16:59:55 +02:00
delete expected . datalistelem ;
expected . publickeycredential = false ;
expected . mediastream = false ;
expected . mediasource = false ;
expected . datachannel = false ;
2021-07-23 09:13:57 -07:00
expected . inputtypes . color = false ;
2024-08-23 16:59:55 +02:00
expected . inputtypes . month = false ;
expected . inputtypes . week = false ;
2021-07-23 09:13:57 -07:00
expected . inputtypes . date = false ;
expected . inputtypes [ 'datetime-local' ] = false ;
expected . inputtypes . time = false ;
}
2022-08-03 14:51:11 -07:00
2021-07-23 09:13:57 -07:00
expect ( actual ) . toEqual ( expected ) ;
2021-07-03 19:18:21 -07:00
} ) ;
2024-08-23 16:59:55 +02:00
it ( 'Mobile Safari' , async ( { playwright , browser , browserName , platform , isMac , server , headless } ) = > {
2021-07-23 09:13:57 -07:00
it . skip ( browserName !== 'webkit' ) ;
2024-08-19 10:29:23 -07:00
it . skip ( browserName === 'webkit' && platform === 'darwin' && parseInt ( os . release ( ) , 10 ) === 22 , 'Modernizr uses WebGL which is not available in macOS-13 - https://bugs.webkit.org/show_bug.cgi?id=278277' ) ;
2021-07-03 19:18:21 -07:00
const iPhone = playwright . devices [ 'iPhone 12' ] ;
const context = await browser . newContext ( iPhone ) ;
2024-08-23 16:59:55 +02:00
const { actual , expected } = await checkFeatures ( 'mobile-safari-18' , context , server ) ;
2021-07-23 09:13:57 -07:00
{
// All platforms.
expected . capture = false ;
expected . cssscrollbar = true ;
expected . cssvhunit = true ;
expected . cssvmaxunit = true ;
expected . overflowscrolling = false ;
2024-08-23 16:59:55 +02:00
expected . mediasource = true ;
expected . scrolltooptions = false ;
delete expected . webglextensions ;
delete actual . webglextensions ;
expected . audio = ! ! expected . audio ;
actual . audio = ! ! actual . audio ;
expected . video = ! ! expected . video ;
actual . video = ! ! actual . video ;
2021-07-23 09:13:57 -07:00
}
if ( platform === 'linux' ) {
expected . subpixelfont = false ;
2024-08-23 12:51:49 +02:00
expected . speechrecognition = false ;
2024-08-23 16:59:55 +02:00
expected . publickeycredential = false ;
expected . mediastream = false ;
2021-07-23 09:13:57 -07:00
if ( headless )
expected . todataurljpeg = false ;
// GHA
delete actual . variablefonts ;
delete expected . variablefonts ;
}
if ( platform === 'win32' ) {
expected . datalistelem = false ;
expected . getusermedia = false ;
expected . peerconnection = false ;
expected . speechrecognition = false ;
expected . speechsynthesis = false ;
expected . todataurljpeg = false ;
expected . webaudio = false ;
2024-08-23 12:51:49 +02:00
expected . gamepads = false ;
2021-07-23 09:13:57 -07:00
expected . input . list = false ;
2024-08-23 16:59:55 +02:00
delete expected . datalistelem ;
expected . publickeycredential = false ;
expected . mediastream = false ;
expected . mediasource = false ;
expected . datachannel = false ;
2021-07-23 09:13:57 -07:00
expected . inputtypes . color = false ;
expected . inputtypes . month = false ;
expected . inputtypes . week = false ;
expected . inputtypes . date = false ;
expected . inputtypes [ 'datetime-local' ] = false ;
expected . inputtypes . time = false ;
}
expect ( actual ) . toEqual ( expected ) ;
2021-07-03 19:18:21 -07:00
} ) ;