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

1import time 

2import webbrowser 

3from unittest.mock import Mock 

4 

5import pytest 

6import requests 

7from numpy.testing import assert_no_warnings 

8 

9from nilearn._utils import html_document 

10 

11# Note: html output by nilearn view_* functions 

12# should validate as html5 using https://validator.w3.org/nu/ with no 

13# warnings 

14 

15 

16class Get: 

17 """Dummy class to implement GET requests.""" 

18 

19 def __init__(self, delay=0.0): 

20 self.delay = delay 

21 

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 

28 

29 

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" 

38 

39 

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() 

47 

48 

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) 

55 

56 

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}") 

65 

66 

67def _open_views(): 

68 return [html_document.HTMLDocument("") for _ in range(12)] 

69 

70 

71def _open_one_view(): 

72 for _ in range(12): 

73 v = html_document.HTMLDocument("") 

74 return v 

75 

76 

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) 

90 

91 

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"]