qalmsw / tests /test_figures.py
pebaryan
arXiv Code of Conduct checkers: artifacts, figures, references
63f36cc
Raw
History Blame Contribute Delete
3.07 kB
"""Tests for the Figure/Table Completeness Checker."""
from pathlib import Path
from qalmsw.checkers import FigureTableChecker, Severity
from qalmsw.document import Document
def _doc(source: str) -> Document:
return Document(path=Path("paper.tex"), source=source, paragraphs=[])
def test_well_formed_figure_passes():
source = r"""\begin{document}
Content before.
\begin{figure}
\centering
\includegraphics{results.png}
\caption{Performance comparison across benchmarks.}
\label{fig:results}
\end{figure}
As shown in Figure~\ref{fig:results}.
\end{document}"""
findings = FigureTableChecker().check(_doc(source))
assert findings == []
def test_well_formed_table_passes():
source = r"""\begin{document}
\begin{table}
\caption{Experimental parameters.}
\label{tab:params}
\begin{tabular}{ll}
alpha & 0.1 \\
beta & 0.2
\end{tabular}
\end{table}
Table~\ref{tab:params} lists the settings.
\end{document}"""
findings = FigureTableChecker().check(_doc(source))
assert findings == []
def test_missing_caption_is_error():
source = r"""\begin{document}
\begin{figure}
\includegraphics{plot.png}
\label{fig:plot}
\end{figure}
See Figure~\ref{fig:plot}.
\end{document}"""
findings = FigureTableChecker().check(_doc(source))
# Should flag missing \caption{}, but NOT orphaned label (it IS in \ref{})
missing = [f for f in findings if "missing" in f.message.lower()]
assert len(missing) == 1
assert missing[0].severity == Severity.error
def test_placeholder_caption_detected():
source = r"""\begin{document}
\begin{figure}
\caption{Insert caption here}
\label{fig:placeholder}
\end{figure}
See Figure~\ref{fig:placeholder}.
\end{document}"""
findings = FigureTableChecker().check(_doc(source))
placeholder = [f for f in findings if "placeholder" in f.message]
assert len(placeholder) >= 1
assert placeholder[0].severity == Severity.error
def test_orphaned_label_warning():
source = r"""\begin{document}
\begin{figure}
\caption{Our proposed architecture.}
\label{fig:arch}
\end{figure}
(No reference to this figure in the body.)
\end{document}"""
findings = FigureTableChecker().check(_doc(source))
orphaned = [f for f in findings if "not referenced" in f.message]
assert len(orphaned) >= 1
assert orphaned[0].severity == Severity.warning
def test_no_floats_yields_no_findings():
source = r"""\begin{document}
Just prose with no figures or tables.
\end{document}"""
findings = FigureTableChecker().check(_doc(source))
assert findings == []
def test_empty_float_warning():
source = r"""\begin{document}
\begin{figure}
\caption{A figure with no real content.}
\label{fig:empty}
\end{figure}
See Figure~\ref{fig:empty}.
\end{document}"""
findings = FigureTableChecker().check(_doc(source))
empty = [f for f in findings if "Near-empty" in f.message or "Near-empty" in f.message]
# The float has no graphics, no tabular — just \caption and \label
# This should be flagged
assert len(empty) >= 1
assert empty[0].severity == Severity.warning