done
This commit is contained in:
@ -0,0 +1,3 @@
|
||||
import matplotlib
|
||||
|
||||
matplotlib.use("Agg")
|
@ -0,0 +1,257 @@
|
||||
import matplotlib
|
||||
import numpy as np
|
||||
import pytest
|
||||
from packaging.version import Version
|
||||
|
||||
from ..exporter import Exporter
|
||||
from ..renderers import FakeRenderer, FullFakeRenderer
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def fake_renderer_output(fig, Renderer):
|
||||
renderer = Renderer()
|
||||
exporter = Exporter(renderer)
|
||||
exporter.run(fig)
|
||||
return renderer.output
|
||||
|
||||
|
||||
def _assert_output_equal(text1, text2):
|
||||
for line1, line2 in zip(text1.strip().split(), text2.strip().split()):
|
||||
assert line1 == line2
|
||||
|
||||
|
||||
def test_lines():
|
||||
fig, ax = plt.subplots()
|
||||
ax.plot(range(20), "-k")
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path with 20 vertices
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FullFakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw line with 20 points
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_markers():
|
||||
fig, ax = plt.subplots()
|
||||
ax.plot(range(2), "ok")
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path with 25 vertices
|
||||
draw path with 25 vertices
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FullFakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw 2 markers
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_path_collection():
|
||||
fig, ax = plt.subplots()
|
||||
ax.scatter(range(3), range(3))
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path with 25 vertices
|
||||
draw path with 25 vertices
|
||||
draw path with 25 vertices
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FullFakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path collection with 3 offsets
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_text():
|
||||
fig, ax = plt.subplots()
|
||||
ax.set_xlabel("my x label")
|
||||
ax.set_ylabel("my y label")
|
||||
ax.set_title("my title")
|
||||
ax.text(0.5, 0.5, "my text")
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw text 'my text' None
|
||||
draw text 'my x label' xlabel
|
||||
draw text 'my y label' ylabel
|
||||
draw text 'my title' title
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_path():
|
||||
fig, ax = plt.subplots()
|
||||
ax.add_patch(plt.Circle((0, 0), 1))
|
||||
ax.add_patch(plt.Rectangle((0, 0), 1, 2))
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path with 25 vertices
|
||||
draw path with 4 vertices
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_Figure():
|
||||
"""if the fig is not associated with a canvas, FakeRenderer shall
|
||||
not fail."""
|
||||
fig = plt.Figure()
|
||||
ax = fig.add_subplot(111)
|
||||
ax.add_patch(plt.Circle((0, 0), 1))
|
||||
ax.add_patch(plt.Rectangle((0, 0), 1, 2))
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path with 25 vertices
|
||||
draw path with 4 vertices
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_multiaxes():
|
||||
fig, ax = plt.subplots(2)
|
||||
ax[0].plot(range(4))
|
||||
ax[1].plot(range(10))
|
||||
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path with 4 vertices
|
||||
closing axes
|
||||
opening axes
|
||||
draw path with 10 vertices
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_image():
|
||||
# Test fails for matplotlib 1.5+ because the size of the image
|
||||
# generated by matplotlib has changed.
|
||||
if Version(matplotlib.__version__) == Version("3.4.1"):
|
||||
image_size = 432
|
||||
else:
|
||||
pytest.skip("Test fails for older matplotlib")
|
||||
np.random.seed(0) # image size depends on the seed
|
||||
fig, ax = plt.subplots(figsize=(2, 2))
|
||||
ax.imshow(np.random.random((10, 10)), cmap=plt.cm.jet, interpolation="nearest")
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
f"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw image of size {image_size}
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_legend():
|
||||
fig, ax = plt.subplots()
|
||||
ax.plot([1, 2, 3], label="label")
|
||||
ax.legend().set_visible(False)
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw path with 3 vertices
|
||||
opening legend
|
||||
closing legend
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_legend_dots():
|
||||
fig, ax = plt.subplots()
|
||||
ax.plot([1, 2, 3], label="label")
|
||||
ax.plot([2, 2, 2], "o", label="dots")
|
||||
ax.legend().set_visible(True)
|
||||
# legend draws 1 line and 1 marker
|
||||
# path around legend now has 13 vertices??
|
||||
_assert_output_equal(
|
||||
fake_renderer_output(fig, FullFakeRenderer),
|
||||
"""
|
||||
opening figure
|
||||
opening axes
|
||||
draw line with 3 points
|
||||
draw 3 markers
|
||||
opening legend
|
||||
draw line with 2 points
|
||||
draw text 'label' None
|
||||
draw 1 markers
|
||||
draw text 'dots' None
|
||||
draw path with 13 vertices
|
||||
closing legend
|
||||
closing axes
|
||||
closing figure
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
def test_blended():
|
||||
fig, ax = plt.subplots()
|
||||
ax.axvline(0)
|
@ -0,0 +1,40 @@
|
||||
from numpy.testing import assert_allclose, assert_equal
|
||||
from . import plt
|
||||
from .. import utils
|
||||
|
||||
|
||||
def test_path_data():
|
||||
circle = plt.Circle((0, 0), 1)
|
||||
vertices, codes = utils.SVG_path(circle.get_path())
|
||||
|
||||
assert_allclose(vertices.shape, (25, 2))
|
||||
assert_equal(codes, ["M", "C", "C", "C", "C", "C", "C", "C", "C", "Z"])
|
||||
|
||||
|
||||
def test_linestyle():
|
||||
linestyles = {
|
||||
"solid": "none",
|
||||
"-": "none",
|
||||
"dashed": "5.550000000000001,2.4000000000000004",
|
||||
"--": "5.550000000000001,2.4000000000000004",
|
||||
"dotted": "1.5,2.4749999999999996",
|
||||
":": "1.5,2.4749999999999996",
|
||||
"dashdot": "9.600000000000001,2.4000000000000004,1.5,2.4000000000000004",
|
||||
"-.": "9.600000000000001,2.4000000000000004,1.5,2.4000000000000004",
|
||||
"": None,
|
||||
"None": None,
|
||||
}
|
||||
|
||||
for ls, result in linestyles.items():
|
||||
(line,) = plt.plot([1, 2, 3], linestyle=ls)
|
||||
assert_equal(utils.get_dasharray(line), result)
|
||||
|
||||
|
||||
def test_axis_w_fixed_formatter():
|
||||
positions, labels = [0, 1, 10], ["A", "B", "C"]
|
||||
|
||||
plt.xticks(positions, labels)
|
||||
props = utils.get_axis_properties(plt.gca().xaxis)
|
||||
|
||||
assert_equal(props["tickvalues"], positions)
|
||||
assert_equal(props["tickformat"], labels)
|
Reference in New Issue
Block a user