8000 test: add HTML formatter tests for shared styles functionality · kosiew/datafusion-python@0f1b1e4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0f1b1e4

Browse files
committed
test: add HTML formatter tests for shared styles functionality
1 parent 1eb28a2 commit 0f1b1e4

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

python/tests/test_dataframe.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,3 +1566,99 @@ def test_dataframe_repr_html_values(df):
15661566
print(f"HTML output snippet: {html[:500]}...")
15671567

15681568
assert len(matches) > 0, "Expected pattern of values not found in HTML output"
1569+
1570+
1571+
def test_html_formatter_shared_styles(df, clean_formatter_state):
1572+
"""Test that shared styles work correctly across multiple tables."""
1573+
from datafusion.html_formatter import (
1574+
get_formatter,
1575+
configure_formatter,
1576+
reset_styles_loaded_state,
1577+
)
1578+
1579+
# First, ensure we're using shared styles
1580+
configure_formatter(use_shared_styles=True)
1581+
formatter = get_formatter()
1582+
1583+
# Get HTML output for first table - should include styles
1584+
html_first = df._repr_html_()
1585+
1586+
# Verify styles are included in first render
1587+
assert "<style>" in html_first
1588+
assert ".expandable-container" in html_first
1589+
1590+
# Get HTML output for second table - should NOT include styles
1591+
html_second = df._repr_html_()
1592+
1593+
# Verify styles are NOT included in second render
1594+
assert "<style>" not in html_second
1595+
assert ".expandable-container" not in html_second
1596+
1597+
# Reset the styles loaded state and verify styles are included again
1598+
reset_styles_loaded_state()
1599+
html_after_reset = df._repr_html_()
1600+
1601+
# Verify styles are included after reset
1602+
assert "<style>" in html_after_reset
1603+
assert ".expandable-container" in html_after_reset
1604+
1605+
1606+
def test_html_formatter_no_shared_styles(df, clean_formatter_state):
1607+
"""Test that styles are always included when shared styles are disabled."""
1608+
from datafusion.html_formatter import configure_formatter
1609+
1610+
# Configure formatter to NOT use shared styles
1611+
configure_formatter(use_shared_styles=False)
1612+
1613+
# Generate HTML multiple times
1614+
html_first = df._repr_html_()
1615+
html_second = df._repr_html_()
1616+
1617+
# Verify styles are included in both renders
1618+
assert "<style>" in html_first
1619+
assert "<style>" in html_second
1620+
assert ".expandable-container" in html_first
1621+
assert ".expandable-container" in html_second
1622+
1623+
1624+
def test_html_formatter_manual_format_html(clean_formatter_state):
1625+
"""Test direct usage of format_html method with shared styles."""
1626+
from datafusion.html_formatter import (
1627+
get_formatter,
1628+
DataFrameHtmlFormatter,
1629+
reset_styles_loaded_state,
1630+
)
1631+
import pyarrow as pa
1632+
1633+
# Create sample data
1634+
batch = pa.RecordBatch.from_arrays(
1635+
[pa.array([1, 2, 3]), pa.array([4, 5, 6])],
1636+
names=["a", "b"],
1637+
)
1638+
1639+
formatter = get_formatter()
1640+
1641+
# First call should include styles
1642+
html_first = formatter.format_html([batch], batch.schema)
1643+
assert "<style>" in html_first
1644+
1645+
# Second call should not include styles (using shared styles by default)
1646+
html_second = formatter.format_html([batch], batch.schema)
1647+
assert "<style>" not in html_second
1648+
1649+
# Reset loaded state
1650+
reset_styles_loaded_state()
1651+
1652+
# After reset, styles should be included again
1653+
html_reset = formatter.format_html([batch], batch.schema)
1654+
assert "<style>" in html_reset
1655+
1656+
# Create a new formatter with shared_styles=False
1657+
local_formatter = DataFrameHtmlFormatter(use_shared_styles=False)
1658+
1659+
# Both calls should include styles
1660+
local_html_1 = local_formatter.format_html([batch], batch.schema)
1661+
local_html_2 = local_formatter.format_html([batch], batch.schema)
1662+
1663+
assert "<style>" in local_html_1
1664+
assert "<style>" in local_html_2

0 commit comments

Comments
 (0)
0