pyecharts/test/test_tab.py
2024-06-07 18:22:28 +08:00

99 lines
3.2 KiB
Python

import unittest
from typing import Iterable
from unittest.mock import patch
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Tab
from pyecharts.commons.utils import OrderedSet
from pyecharts.components import Table
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
def _create_bar() -> Bar:
return (
Bar(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
.add_xaxis(Faker.week)
.add_yaxis("商家A", [1, 2, 3, 4, 5, 6, 7])
)
def _create_line() -> Line:
return Line().add_xaxis(Faker.week).add_yaxis("商家A", [7, 6, 5, 4, 3, 2, 1])
def _create_table() -> Table:
table = Table()
headers = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
["Brisbane", 5905, 1857594, 1146.4],
["Adelaide", 1295, 1158259, 600.5],
["Darwin", 112, 120900, 1714.7],
]
table.add(headers, rows)
return table
class TestTabComponent(unittest.TestCase):
@patch("pyecharts.render.engine.write_utf8_html_file")
def test_tab_base(self, fake_writer):
bar = _create_bar()
line = _create_line()
tab = Tab().add(bar, "bar-example").add(line, "line-example")
tab.render()
_, content = fake_writer.call_args[0]
self.assertIn("bar-example", content)
self.assertIn("line-example", content)
def test_tab_render_embed(self):
bar = _create_bar()
line = _create_line()
content = Tab().add(bar, "bar").add(line, "line").render_embed()
self.assertTrue(len(content) > 8000)
def test_tab_render_notebook(self):
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK
tab = Tab()
tab.add(_create_line(), "line-example")
tab.add(_create_bar(), "bar-example")
tab.add(_create_table(), "table-example")
html = tab.render_notebook().__html__()
self.assertIn("City name", html)
def test_page_jshost_default(self):
bar = _create_bar()
tab = Tab().add(bar, "bar")
self.assertEqual(tab.js_host, "https://assets.pyecharts.org/assets/v5/")
def test_tab_jshost_custom(self):
from pyecharts.globals import CurrentConfig
default_host = CurrentConfig.ONLINE_HOST
custom_host = "http://localhost:8888/assets/"
CurrentConfig.ONLINE_HOST = custom_host
bar = _create_bar()
line = _create_line()
tab = Tab().add(bar, "bar").add(line, "line")
self.assertEqual(tab.js_host, custom_host)
CurrentConfig.ONLINE_HOST = default_host
def test_tab_iterable(self):
tab = Tab()
self.assertTrue(isinstance(tab, Iterable))
def test_tab_attr(self):
tab = Tab()
self.assertTrue(isinstance(tab.js_functions, OrderedSet))
self.assertTrue(isinstance(tab._charts, list))
def test_tab_with_chart_container(self):
tab = Tab(
tab_css_opts=opts.TabChartGlobalOpts(
is_enable=False, tab_base_css={"overflow": "hidden"}
)
)
self.assertTrue(isinstance(tab._charts, list))