test_tooltip.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import numpy as np
  2. import pytest
  3. from pandas import DataFrame
  4. pytest.importorskip("jinja2")
  5. from pandas.io.formats.style import Styler
  6. @pytest.fixture
  7. def df():
  8. return DataFrame(
  9. data=[[0, 1, 2], [3, 4, 5], [6, 7, 8]],
  10. columns=["A", "B", "C"],
  11. index=["x", "y", "z"],
  12. )
  13. @pytest.fixture
  14. def styler(df):
  15. return Styler(df, uuid_len=0)
  16. @pytest.mark.parametrize(
  17. "ttips",
  18. [
  19. DataFrame( # Test basic reindex and ignoring blank
  20. data=[["Min", "Max"], [np.nan, ""]],
  21. columns=["A", "C"],
  22. index=["x", "y"],
  23. ),
  24. DataFrame( # Test non-referenced columns, reversed col names, short index
  25. data=[["Max", "Min", "Bad-Col"]], columns=["C", "A", "D"], index=["x"]
  26. ),
  27. ],
  28. )
  29. def test_tooltip_render(ttips, styler):
  30. # GH 21266
  31. result = styler.set_tooltips(ttips).to_html()
  32. # test tooltip table level class
  33. assert "#T_ .pd-t {\n visibility: hidden;\n" in result
  34. # test 'Min' tooltip added
  35. assert "#T_ #T__row0_col0:hover .pd-t {\n visibility: visible;\n}" in result
  36. assert '#T_ #T__row0_col0 .pd-t::after {\n content: "Min";\n}' in result
  37. assert 'class="data row0 col0" >0<span class="pd-t"></span></td>' in result
  38. # test 'Max' tooltip added
  39. assert "#T_ #T__row0_col2:hover .pd-t {\n visibility: visible;\n}" in result
  40. assert '#T_ #T__row0_col2 .pd-t::after {\n content: "Max";\n}' in result
  41. assert 'class="data row0 col2" >2<span class="pd-t"></span></td>' in result
  42. # test Nan, empty string and bad column ignored
  43. assert "#T_ #T__row1_col0:hover .pd-t {\n visibility: visible;\n}" not in result
  44. assert "#T_ #T__row1_col1:hover .pd-t {\n visibility: visible;\n}" not in result
  45. assert "#T_ #T__row0_col1:hover .pd-t {\n visibility: visible;\n}" not in result
  46. assert "#T_ #T__row1_col2:hover .pd-t {\n visibility: visible;\n}" not in result
  47. assert "Bad-Col" not in result
  48. def test_tooltip_ignored(styler):
  49. # GH 21266
  50. result = styler.to_html() # no set_tooltips() creates no <span>
  51. assert '<style type="text/css">\n</style>' in result
  52. assert '<span class="pd-t"></span>' not in result
  53. def test_tooltip_css_class(styler):
  54. # GH 21266
  55. result = styler.set_tooltips(
  56. DataFrame([["tooltip"]], index=["x"], columns=["A"]),
  57. css_class="other-class",
  58. props=[("color", "green")],
  59. ).to_html()
  60. assert "#T_ .other-class {\n color: green;\n" in result
  61. assert '#T_ #T__row0_col0 .other-class::after {\n content: "tooltip";\n' in result
  62. # GH 39563
  63. result = styler.set_tooltips( # set_tooltips overwrites previous
  64. DataFrame([["tooltip"]], index=["x"], columns=["A"]),
  65. css_class="another-class",
  66. props="color:green;color:red;",
  67. ).to_html()
  68. assert "#T_ .another-class {\n color: green;\n color: red;\n}" in result