import pytest from sklearn import config_context from sklearn.utils._repr_html.params import ParamsDict, _params_html_repr, _read_params def test_params_dict_content(): """Check the behavior of the ParamsDict class.""" params = ParamsDict({"a": 1, "b": 2}) assert params["a"] == 1 assert params["b"] == 2 assert params.non_default == () params = ParamsDict({"a": 1, "b": 2}, non_default=("a",)) assert params["a"] == 1 assert params["b"] == 2 assert params.non_default == ("a",) def test_params_dict_repr_html_(): params = ParamsDict({"a": 1, "b": 2}, non_default=("a",)) out = params._repr_html_() assert "Parameters" in out with config_context(display="text"): msg = "_repr_html_ is only defined when" with pytest.raises(AttributeError, match=msg): params._repr_html_() def test_params_dict_repr_mimebundle(): params = ParamsDict({"a": 1, "b": 2}, non_default=("a",)) out = params._repr_mimebundle_() assert "text/plain" in out assert "text/html" in out assert "Parameters" in out["text/html"] assert out["text/plain"] == "{'a': 1, 'b': 2}" with config_context(display="text"): out = params._repr_mimebundle_() assert "text/plain" in out assert "text/html" not in out def test_read_params(): """Check the behavior of the `_read_params` function.""" out = _read_params("a", 1, tuple()) assert out["param_type"] == "default" assert out["param_name"] == "a" assert out["param_value"] == "1" # check non-default parameters out = _read_params("a", 1, ("a",)) assert out["param_type"] == "user-set" assert out["param_name"] == "a" assert out["param_value"] == "1" # check that we escape html tags tag_injection = "" out = _read_params("a", tag_injection, tuple()) assert ( out["param_value"] == ""<script>alert('xss')</script>"" ) assert out["param_name"] == "a" assert out["param_type"] == "default" def test_params_html_repr(): """Check returned HTML template""" params = ParamsDict({"a": 1, "b": 2}) assert "parameters-table" in _params_html_repr(params) assert "estimator-table" in _params_html_repr(params)