Skip to content

Commit b26b1f5

Browse files
authored
test: port test_launcher to sync test-suite (microsoft#2392)
1 parent d796ac7 commit b26b1f5

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

tests/sync/test_launcher.py

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Copyright (c) Microsoft Corporation.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import os
16+
from pathlib import Path
17+
from typing import Dict, Optional
18+
19+
import pytest
20+
21+
from playwright.sync_api import BrowserType, Error
22+
23+
24+
@pytest.mark.skip_browser("firefox")
25+
def test_browser_type_launch_should_throw_if_page_argument_is_passed(
26+
browser_type: BrowserType, launch_arguments: Dict
27+
) -> None:
28+
with pytest.raises(Error) as exc:
29+
browser_type.launch(**launch_arguments, args=["http://example.com"])
30+
assert "can not specify page" in exc.value.message
31+
32+
33+
def test_browser_type_launch_should_reject_if_launched_browser_fails_immediately(
34+
browser_type: BrowserType, launch_arguments: Dict, assetdir: Path
35+
) -> None:
36+
with pytest.raises(Error):
37+
browser_type.launch(
38+
**launch_arguments,
39+
executable_path=assetdir / "dummy_bad_browser_executable.js",
40+
)
41+
42+
43+
def test_browser_type_launch_should_reject_if_executable_path_is_invalid(
44+
browser_type: BrowserType, launch_arguments: Dict
45+
) -> None:
46+
with pytest.raises(Error) as exc:
47+
browser_type.launch(**launch_arguments, executable_path="random-invalid-path")
48+
assert "executable doesn't exist" in exc.value.message
49+
50+
51+
def test_browser_type_executable_path_should_work(
52+
browser_type: BrowserType, browser_channel: str
53+
) -> None:
54+
if browser_channel:
55+
return
56+
executable_path = browser_type.executable_path
57+
assert os.path.exists(executable_path)
58+
assert os.path.realpath(executable_path) == os.path.realpath(executable_path)
59+
60+
61+
def test_browser_type_name_should_work(
62+
browser_type: BrowserType, is_webkit: bool, is_firefox: bool, is_chromium: bool
63+
) -> None:
64+
if is_webkit:
65+
assert browser_type.name == "webkit"
66+
elif is_firefox:
67+
assert browser_type.name == "firefox"
68+
elif is_chromium:
69+
assert browser_type.name == "chromium"
70+
else:
71+
raise ValueError("Unknown browser")
72+
73+
74+
def test_browser_close_should_fire_close_event_for_all_contexts(
75+
browser_type: BrowserType, launch_arguments: Dict
76+
) -> None:
77+
browser = browser_type.launch(**launch_arguments)
78+
context = browser.new_context()
79+
closed = []
80+
context.on("close", lambda _: closed.append(True))
81+
browser.close()
82+
assert closed == [True]
83+
84+
85+
def test_browser_close_should_be_callable_twice(
86+
browser_type: BrowserType, launch_arguments: Dict
87+
) -> None:
88+
browser = browser_type.launch(**launch_arguments)
89+
browser.close()
90+
browser.close()
91+
92+
93+
@pytest.mark.only_browser("chromium")
94+
def test_browser_launch_should_return_background_pages(
95+
browser_type: BrowserType,
96+
tmpdir: Path,
97+
browser_channel: Optional[str],
98+
assetdir: Path,
99+
launch_arguments: Dict,
100+
) -> None:
101+
if browser_channel:
102+
pytest.skip()
103+
104+
extension_path = str(assetdir / "simple-extension")
105+
context = browser_type.launch_persistent_context(
106+
str(tmpdir),
107+
**{
108+
**launch_arguments,
109+
"headless": False,
110+
"args": [
111+
f"--disable-extensions-except={extension_path}",
112+
f"--load-extension={extension_path}",
113+
],
114+
},
115+
)
116+
background_page = None
117+
if len(context.background_pages):
118+
background_page = context.background_pages[0]
119+
else:
120+
background_page = context.wait_for_event("backgroundpage")
121+
assert background_page
122+
assert background_page in context.background_pages
123+
assert background_page not in context.pages
124+
context.close()
125+
assert len(context.background_pages) == 0
126+
assert len(context.pages) == 0

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy