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
2021-04-06 01:51:45 +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 ) = > {
return channel ? ` .setHeadless(false) \ n .setChannel(" ${ channel } ") ` : '.setHeadless(false)' ;
} ;
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 . * ;
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()
2021-03-06 01:05:48 +03:00
. setStorageStatePath ( Paths . get ( "${loadFileName}" ) ) ) ; ` ;
2021-03-04 01:32:09 +03:00
await cli . waitFor ( expectedResult1 ) ;
const expectedResult2 = `
2021-03-06 01:05:48 +03:00
context . storageState ( new BrowserContext . StorageStateOptions ( ) . setPath ( "${saveFileName}" ) ) ` ;
2021-03-04 01:32:09 +03:00
await cli . waitFor ( expectedResult2 ) ;
} ) ;