Coverage for nilearn/_utils/tests/test_html_document.py: 0%
64 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-20 10:58 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-20 10:58 +0200
1import time
2import webbrowser
3from unittest.mock import Mock
5import pytest
6import requests
7from numpy.testing import assert_no_warnings
9from nilearn._utils import html_document
11# Note: html output by nilearn view_* functions
12# should validate as html5 using https://validator.w3.org/nu/ with no
13# warnings
16class Get:
17 """Dummy class to implement GET requests."""
19 def __init__(self, delay=0.0):
20 self.delay = delay
22 def __call__(self, url):
23 """Get implementation."""
24 time.sleep(self.delay)
25 self.url = url
26 requests.get(url.replace("index.html", "favicon.ico"))
27 self.content = requests.get(url).content
30# disable request mocking for this test -- note we are accessing localhost only
31@pytest.mark.parametrize("request_mocker", [None])
32def test_open_in_browser(monkeypatch):
33 opener = Get()
34 monkeypatch.setattr(webbrowser, "open", opener)
35 doc = html_document.HTMLDocument("hello")
36 doc.open_in_browser()
37 assert opener.content == b"hello"
40def test_open_in_browser_timeout(monkeypatch):
41 opener = Get(delay=1.0)
42 monkeypatch.setattr(webbrowser, "open", opener)
43 monkeypatch.setattr(html_document, "BROWSER_TIMEOUT_SECONDS", 0.01)
44 doc = html_document.HTMLDocument("hello")
45 with pytest.raises(RuntimeError, match="Failed to open"):
46 doc.open_in_browser()
49@pytest.mark.parametrize("request_mocker", [None])
50def test_open_in_browser_deprecation_warning(monkeypatch):
51 monkeypatch.setattr(webbrowser, "open", Get())
52 doc = html_document.HTMLDocument("hello")
53 with pytest.deprecated_call(match="temp_file_lifetime"):
54 doc.open_in_browser(temp_file_lifetime=30.0)
57def test_open_in_browser_file(tmp_path, monkeypatch):
58 opener = Mock()
59 monkeypatch.setattr(webbrowser, "open", opener)
60 file_path = tmp_path / "doc.html"
61 doc = html_document.HTMLDocument("hello")
62 doc.open_in_browser(file_name=str(file_path))
63 assert file_path.read_text("utf-8") == "hello"
64 opener.assert_called_once_with(f"file://{file_path}")
67def _open_views():
68 return [html_document.HTMLDocument("") for _ in range(12)]
71def _open_one_view():
72 for _ in range(12):
73 v = html_document.HTMLDocument("")
74 return v
77def test_open_view_warning():
78 # opening many views (without deleting the SurfaceView objects)
79 # should raise a warning about memory usage
80 pytest.warns(UserWarning, _open_views)
81 assert_no_warnings(_open_one_view)
82 html_document.set_max_img_views_before_warning(15)
83 assert_no_warnings(_open_views)
84 html_document.set_max_img_views_before_warning(-1)
85 assert_no_warnings(_open_views)
86 html_document.set_max_img_views_before_warning(None)
87 assert_no_warnings(_open_views)
88 html_document.set_max_img_views_before_warning(6)
89 pytest.warns(UserWarning, _open_views)
92def test_repr():
93 doc = html_document.HTMLDocument("hello")
94 assert "hello" in doc._repr_html_()
95 assert "hello" in doc._repr_mimebundle_()["text/html"]