2021-03-04 01:32:09 +03: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 .
* /
import fs from 'fs' ;
import path from 'path' ;
2021-05-09 03:45:04 +03:00
import { test , expect } from './inspectorTest' ;
2021-03-04 01:32:09 +03:00
2022-03-26 02:05:50 +03:00
const emptyHTML = new URL ( 'file://' + path . join ( __dirname , '..' , '..' , 'assets' , 'empty.html' ) ) . toString ( ) ;
2021-03-15 18:07:57 +03:00
const launchOptions = ( channel : string ) = > {
2022-07-05 23:30:46 +03:00
return channel ? ` .setChannel(" ${ channel } ") \ n .setHeadless(false) ` : '.setHeadless(false)' ;
2021-03-15 18:07:57 +03:00
} ;
2021-03-04 01:32:09 +03:00
2021-05-13 20:22:23 +03:00
test ( 'should print the correct imports and context options' , async ( { runCLI , channel , browserName } ) = > {
2021-03-15 18:07:57 +03:00
const cli = runCLI ( [ '--target=java' , emptyHTML ] ) ;
2021-03-04 01:32:09 +03:00
const expectedResult = ` import com.microsoft.playwright.*;
import com . microsoft . playwright . options . * ;
2022-02-17 22:52:35 +03:00
import static com . microsoft . playwright . assertions . PlaywrightAssertions . assertThat ;
2021-05-22 02:17:25 +03:00
import java . util . * ;
2021-03-04 01:32:09 +03:00
public class Example {
public static void main ( String [ ] args ) {
try ( Playwright playwright = Playwright . create ( ) ) {
Browser browser = playwright . $ { browserName } ( ) . launch ( new BrowserType . LaunchOptions ( )
2021-05-13 20:22:23 +03:00
$ { launchOptions ( channel ) } ) ;
2021-03-04 01:32:09 +03:00
BrowserContext context = browser . newContext ( ) ; ` ;
await cli . waitFor ( expectedResult ) ;
expect ( cli . text ( ) ) . toContain ( expectedResult ) ;
} ) ;
2021-04-02 21:19:26 +03:00
test ( 'should print the correct context options for custom settings' , async ( { runCLI , browserName } ) = > {
2021-03-15 18:07:57 +03:00
const cli = runCLI ( [ '--color-scheme=light' , '--target=java' , emptyHTML ] ) ;
2021-03-04 01:32:09 +03:00
const expectedResult = ` BrowserContext context = browser.newContext(new Browser.NewContextOptions()
2021-03-06 01:05:48 +03:00
. setColorScheme ( ColorScheme . LIGHT ) ) ; ` ;
2021-03-04 01:32:09 +03:00
await cli . waitFor ( expectedResult ) ;
expect ( cli . text ( ) ) . toContain ( expectedResult ) ;
} ) ;
2021-04-02 21:19:26 +03:00
test ( 'should print the correct context options when using a device' , async ( { browserName , runCLI } ) = > {
2021-03-12 07:22:50 +03:00
test . skip ( browserName !== 'chromium' ) ;
2021-04-02 21:19:26 +03:00
2021-03-15 18:07:57 +03:00
const cli = runCLI ( [ '--device=Pixel 2' , '--target=java' , emptyHTML ] ) ;
2021-05-22 02:17:25 +03:00
await cli . waitFor ( ` .setViewportSize(411, 731)); ` ) ;
2021-03-04 01:32:09 +03:00
const expectedResult = ` BrowserContext context = browser.newContext(new Browser.NewContextOptions()
2021-03-06 01:05:48 +03:00
. setDeviceScaleFactor ( 2.625 )
2021-05-22 02:17:25 +03:00
. setHasTouch ( true )
2021-03-06 01:05:48 +03:00
. setIsMobile ( true )
2021-05-22 02:17:25 +03:00
. setUserAgent ( "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/XXXX Mobile Safari/537.36" )
. setViewportSize ( 411 , 731 ) ) ; ` ;
2021-05-18 10:29:48 +03:00
expect ( cli . text ( ) . replace ( /(.*Chrome\/)(.*?)( .*)/m , '$1XXXX$3' ) ) . toContain ( expectedResult ) ;
2021-03-04 01:32:09 +03:00
} ) ;
2021-04-02 21:19:26 +03:00
test ( 'should print the correct context options when using a device and additional options' , async ( { browserName , runCLI } ) = > {
2021-03-12 07:22:50 +03:00
test . skip ( browserName !== 'webkit' ) ;
2021-04-02 21:19:26 +03:00
2021-03-15 18:07:57 +03:00
const cli = runCLI ( [ '--color-scheme=light' , '--device=iPhone 11' , '--target=java' , emptyHTML ] ) ;
2021-07-15 18:41:23 +03:00
await cli . waitFor ( ` .setViewportSize(414, 715)); ` ) ;
2021-03-04 01:32:09 +03:00
const expectedResult = ` BrowserContext context = browser.newContext(new Browser.NewContextOptions()
2021-03-06 01:05:48 +03:00
. setColorScheme ( ColorScheme . LIGHT )
. setDeviceScaleFactor ( 2 )
2021-05-22 02:17:25 +03:00
. setHasTouch ( true )
2021-03-06 01:05:48 +03:00
. setIsMobile ( true )
2021-07-15 18:41:23 +03:00
. setUserAgent ( "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/XXXX Mobile/15E148 Safari/604.1" )
2021-05-22 02:17:25 +03:00
. setViewportSize ( 414 , 715 ) ) ; ` ;
2021-07-15 18:41:23 +03:00
expect ( cli . text ( ) . replace ( /(.*Version\/)(.*?)( .*)/m , '$1XXXX$3' ) ) . toContain ( expectedResult ) ;
2021-03-04 01:32:09 +03:00
} ) ;
2021-04-02 21:19:26 +03:00
test ( 'should print load/save storage_state' , async ( { runCLI , browserName } , testInfo ) = > {
2021-03-04 01:32:09 +03:00
const loadFileName = testInfo . outputPath ( 'load.json' ) ;
const saveFileName = testInfo . outputPath ( 'save.json' ) ;
await fs . promises . writeFile ( loadFileName , JSON . stringify ( { cookies : [ ] , origins : [ ] } ) , 'utf8' ) ;
2021-03-15 18:07:57 +03:00
const cli = runCLI ( [ ` --load-storage= ${ loadFileName } ` , ` --save-storage= ${ saveFileName } ` , '--target=java' , emptyHTML ] ) ;
2021-03-04 01:32:09 +03:00
const expectedResult1 = ` BrowserContext context = browser.newContext(new Browser.NewContextOptions()
2022-07-05 23:30:46 +03:00
. setStorageStatePath ( Paths . get ( $ { JSON . stringify ( loadFileName ) } ) ) ) ; ` ;
2021-03-04 01:32:09 +03:00
await cli . waitFor ( expectedResult1 ) ;
const expectedResult2 = `
2021-08-24 05:38:50 +03:00
context . storageState ( new BrowserContext . StorageStateOptions ( ) . setPath ( "${saveFileName.replace(/\\/g, '\\\\')}" ) ) ` ;
2021-03-04 01:32:09 +03:00
await cli . waitFor ( expectedResult2 ) ;
} ) ;
2022-07-05 23:30:46 +03:00
test ( 'should work with --save-har' , async ( { runCLI } , testInfo ) = > {
const harFileName = testInfo . outputPath ( 'har.har' ) ;
const cli = runCLI ( [ '--target=java' , ` --save-har= ${ harFileName } ` ] ) ;
const expectedResult = ` BrowserContext context = browser.newContext(new Browser.NewContextOptions()
. setRecordHarMode ( HarMode . MINIMAL )
. setRecordHarPath ( Paths . get ( $ { JSON . stringify ( harFileName ) } ) )
. setServiceWorkers ( ServiceWorkerPolicy . BLOCK ) ) ; ` ;
await cli . waitFor ( expectedResult ) . catch ( e = > e ) ;
expect ( cli . text ( ) ) . toContain ( expectedResult ) ;
await cli . exited ;
const json = JSON . parse ( fs . readFileSync ( harFileName , 'utf-8' ) ) ;
expect ( json . log . creator . name ) . toBe ( 'Playwright' ) ;
} ) ;