33from tempfile import TemporaryDirectory
44
55import pytest
6- from pytest_pyodide import run_in_pyodide , spawn_web_server
7-
8- from conftest import package_is_built
6+ from pytest_pyodide import run_in_pyodide
97
108cpver = f"cp{ sys .version_info .major } { sys .version_info .minor } "
119
1210
1311WHEEL_BASE = None
12+ SNOWBALL_WHEEL = (
13+ Path (__file__ ).parent / "test" / "snowballstemmer-2.0.0-py2.py3-none-any.whl"
14+ )
1415
1516
1617@pytest .fixture
@@ -43,9 +44,6 @@ def selenium_standalone_micropip(selenium_standalone):
4344 yield selenium_standalone
4445
4546
46- SNOWBALL_WHEEL = "snowballstemmer-2.0.0-py2.py3-none-any.whl"
47-
48-
4947def test_install_simple (selenium_standalone_micropip ):
5048 selenium = selenium_standalone_micropip
5149 assert selenium .run_js (
@@ -65,38 +63,38 @@ def test_install_simple(selenium_standalone_micropip):
6563 ) == ["go" , "go" , "goe" , "gone" ]
6664
6765
68- @pytest .mark .parametrize ("base_url" , ["'{base_url}'" , "'.'" ])
69- def test_install_custom_url (selenium_standalone_micropip , base_url ):
66+ def test_install_custom_url (selenium_standalone_micropip , httpserver ):
7067 selenium = selenium_standalone_micropip
7168
72- with spawn_web_server (Path (__file__ ).parent / "test" ) as server :
73- server_hostname , server_port , _ = server
74- base_url = f"http://{ server_hostname } :{ server_port } /"
75- url = base_url + SNOWBALL_WHEEL
69+ httpserver .expect_oneshot_request (f"/{ SNOWBALL_WHEEL .name } " ).respond_with_data (
70+ SNOWBALL_WHEEL .read_bytes (),
71+ content_type = "application/zip" ,
72+ headers = {"Access-Control-Allow-Origin" : "*" },
73+ status = 200 ,
74+ )
75+ url = httpserver .url_for (SNOWBALL_WHEEL .name )
7676
77- selenium .run_js (
78- f"""
79- await pyodide.runPythonAsync(`
80- import micropip
81- await micropip.install('{ url } ')
82- import snowballstemmer
83- `);
84- """
85- )
77+ selenium .run_js (
78+ f"""
79+ await pyodide.runPythonAsync(`
80+ import micropip
81+ await micropip.install('{ url } ')
82+ import snowballstemmer
83+ `);
84+ """
85+ )
8686
8787
8888@pytest .mark .xfail_browsers (chrome = "node only" , firefox = "node only" )
8989def test_install_file_protocol_node (selenium_standalone_micropip ):
9090 selenium = selenium_standalone_micropip
91- from conftest import DIST_PATH
9291
93- pyparsing_wheel_name = list (DIST_PATH .glob ("pyparsing*.whl" ))[0 ].name
9492 selenium .run_js (
9593 f"""
9694 await pyodide.runPythonAsync(`
9795 import micropip
98- await micropip.install('file:{ pyparsing_wheel_name } ')
99- import pyparsing
96+ await micropip.install('file:{ SNOWBALL_WHEEL . as_posix () } ')
97+ import snowballstemmer
10098 `);
10199 """
102100 )
@@ -146,114 +144,52 @@ def test_install_different_version2(selenium_standalone_micropip):
146144 )
147145
148146
149- @pytest .mark .parametrize ("jinja2" , ["jinja2" , "Jinja2" ])
150- def test_install_mixed_case2 (selenium_standalone_micropip , jinja2 ):
151- selenium = selenium_standalone_micropip
152- selenium .run_js (
153- f"""
154- await pyodide.loadPackage("micropip");
155- await pyodide.runPythonAsync(`
156- import micropip
157- await micropip.install("{ jinja2 } ")
158- import jinja2
159- `);
160- """
147+ def test_list_load_package_from_url (selenium_standalone_micropip , httpserver ):
148+ httpserver .expect_oneshot_request (f"/{ SNOWBALL_WHEEL .name } " ).respond_with_data (
149+ SNOWBALL_WHEEL .read_bytes (),
150+ content_type = "application/zip" ,
151+ headers = {"Access-Control-Allow-Origin" : "*" },
152+ status = 200 ,
161153 )
154+ url = httpserver .url_for (SNOWBALL_WHEEL .name )
162155
163-
164- def test_list_load_package_from_url (selenium_standalone_micropip ):
165- with spawn_web_server (Path (__file__ ).parent / "test" ) as server :
166- server_hostname , server_port , _ = server
167- base_url = f"http://{ server_hostname } :{ server_port } /"
168- url = base_url + SNOWBALL_WHEEL
169-
170- selenium = selenium_standalone_micropip
171- selenium .run_js (
172- f"""
173- await pyodide.loadPackage({ url !r} );
174- await pyodide.runPythonAsync(`
175- import micropip
176- assert "snowballstemmer" in micropip.list()
177- `);
178- """
179- )
180-
181-
182- def test_list_pyodide_package (selenium_standalone_micropip ):
183156 selenium = selenium_standalone_micropip
184157 selenium .run_js (
185- """
186- await pyodide.runPythonAsync(`
187- import micropip
188- await micropip.install(
189- "regex"
190- );
191- `);
192- """
193- )
194- selenium .run_js (
195- """
158+ f"""
159+ await pyodide.loadPackage({ url !r} );
196160 await pyodide.runPythonAsync(`
197161 import micropip
198- pkgs = micropip.list()
199- assert "regex" in pkgs
200- assert pkgs["regex"].source.lower() == "pyodide"
162+ assert "snowballstemmer" in micropip.list()
201163 `);
202164 """
203165 )
204166
205167
206- def test_list_loaded_from_js (selenium_standalone_micropip ):
207- selenium = selenium_standalone_micropip
208- selenium .run_js (
209- """
210- await pyodide.loadPackage("regex");
211- await pyodide.runPythonAsync(`
212- import micropip
213- pkgs = micropip.list()
214- assert "regex" in pkgs
215- assert pkgs["regex"].source.lower() == "pyodide"
216- `);
217- """
168+ def test_emfs (selenium_standalone_micropip , httpserver ):
169+ httpserver .expect_oneshot_request (f"/{ SNOWBALL_WHEEL .name } " ).respond_with_data (
170+ SNOWBALL_WHEEL .read_bytes (),
171+ content_type = "application/zip" ,
172+ headers = {"Access-Control-Allow-Origin" : "*" },
173+ status = 200 ,
218174 )
175+ url = httpserver .url_for (f"/{ SNOWBALL_WHEEL .name } " )
219176
220-
221- def test_emfs (selenium_standalone_micropip ):
222- with spawn_web_server (Path (__file__ ).parent / "test" ) as server :
223- server_hostname , server_port , _ = server
224- url = f"http://{ server_hostname } :{ server_port } /"
225-
226- @run_in_pyodide (packages = ["micropip" ])
227- async def run_test (selenium , url , wheel_name ):
228- import micropip
229- from pyodide .http import pyfetch
230-
231- resp = await pyfetch (url + wheel_name )
232- await resp ._into_file (open (wheel_name , "wb" ))
233- await micropip .install ("emfs:" + wheel_name )
234- import snowballstemmer
235-
236- stemmer = snowballstemmer .stemmer ("english" )
237- assert stemmer .stemWords ("go going goes gone" .split ()) == [
238- "go" ,
239- "go" ,
240- "goe" ,
241- "gone" ,
242- ]
243-
244- run_test (selenium_standalone_micropip , url , SNOWBALL_WHEEL )
245-
246-
247- def test_install_non_normalized_package (selenium_standalone_micropip ):
248- if not package_is_built ("ruamel-yaml" ):
249- pytest .skip ("ruamel.yaml not built" )
250-
251- selenium = selenium_standalone_micropip
252-
253- selenium .run_async (
254- """
177+ @run_in_pyodide (packages = ["micropip" ])
178+ async def run_test (selenium , url , wheel_name ):
255179 import micropip
256- await micropip.install("ruamel.yaml")
257- import ruamel.yaml
258- """
259- )
180+ from pyodide .http import pyfetch
181+
182+ resp = await pyfetch (url )
183+ await resp ._into_file (open (wheel_name , "wb" ))
184+ await micropip .install ("emfs:" + wheel_name )
185+ import snowballstemmer
186+
187+ stemmer = snowballstemmer .stemmer ("english" )
188+ assert stemmer .stemWords ("go going goes gone" .split ()) == [
189+ "go" ,
190+ "go" ,
191+ "goe" ,
192+ "gone" ,
193+ ]
194+
195+ run_test (selenium_standalone_micropip , url , SNOWBALL_WHEEL .name )
0 commit comments