import numpy as np import pytest from pandas import DataFrame pytest.importorskip("jinja2") from pandas.io.formats.style import Styler @pytest.fixture def df(): return DataFrame( data=[[0, 1, 2], [3, 4, 5], [6, 7, 8]], columns=["A", "B", "C"], index=["x", "y", "z"], ) @pytest.fixture def styler(df): return Styler(df, uuid_len=0) @pytest.mark.parametrize( "ttips", [ DataFrame( # Test basic reindex and ignoring blank data=[["Min", "Max"], [np.nan, ""]], columns=["A", "C"], index=["x", "y"], ), DataFrame( # Test non-referenced columns, reversed col names, short index data=[["Max", "Min", "Bad-Col"]], columns=["C", "A", "D"], index=["x"] ), ], ) def test_tooltip_render(ttips, styler): # GH 21266 result = styler.set_tooltips(ttips).to_html() # test tooltip table level class assert "#T_ .pd-t {\n visibility: hidden;\n" in result # test 'Min' tooltip added assert "#T_ #T__row0_col0:hover .pd-t {\n visibility: visible;\n}" in result assert '#T_ #T__row0_col0 .pd-t::after {\n content: "Min";\n}' in result assert 'class="data row0 col0" >0' in result # test 'Max' tooltip added assert "#T_ #T__row0_col2:hover .pd-t {\n visibility: visible;\n}" in result assert '#T_ #T__row0_col2 .pd-t::after {\n content: "Max";\n}' in result assert 'class="data row0 col2" >2' in result # test Nan, empty string and bad column ignored assert "#T_ #T__row1_col0:hover .pd-t {\n visibility: visible;\n}" not in result assert "#T_ #T__row1_col1:hover .pd-t {\n visibility: visible;\n}" not in result assert "#T_ #T__row0_col1:hover .pd-t {\n visibility: visible;\n}" not in result assert "#T_ #T__row1_col2:hover .pd-t {\n visibility: visible;\n}" not in result assert "Bad-Col" not in result def test_tooltip_ignored(styler): # GH 21266 result = styler.to_html() # no set_tooltips() creates no assert '' in result assert '' not in result def test_tooltip_css_class(styler): # GH 21266 result = styler.set_tooltips( DataFrame([["tooltip"]], index=["x"], columns=["A"]), css_class="other-class", props=[("color", "green")], ).to_html() assert "#T_ .other-class {\n color: green;\n" in result assert '#T_ #T__row0_col0 .other-class::after {\n content: "tooltip";\n' in result # GH 39563 result = styler.set_tooltips( # set_tooltips overwrites previous DataFrame([["tooltip"]], index=["x"], columns=["A"]), css_class="another-class", props="color:green;color:red;", ).to_html() assert "#T_ .another-class {\n color: green;\n color: red;\n}" in result