Files
owenrees a58a6504b4 V0.0.1 (#4)
* update documentation link

* remove superfluous tests

* add game example with subtitle custom header

* remove commented out code

* fix subtitle by making it a new line of smaller text within the title

* update changelog with v0.0.1
2026-06-29 21:18:10 +02:00

183 lines
6.1 KiB
OCaml

open OUnit2
open Pgn_logic
open Ast
open Helpers
let ae expected actual = assert_equal ~printer:(fun x -> x) expected actual
let test_number_to_latex_direct _ctxt =
let item = Number "1." in
let expected = "\\textbf{1.}" in
let actual = Latex.item_to_tex true 0 item in
ae expected actual
let test_move_to_latex_direct _ctxt =
let item = Move "e4" in
let expected = "\\textbf{e4}" in
let actual = Latex.item_to_tex true 0 item in
ae expected actual
let test_comment_to_latex_direct _ctxt =
let comment = "some comment here" in
let item = Comment comment in
let expected = "\\newline " ^ comment ^ "\\par" in
let actual = Latex.item_to_tex true 0 item in
ae expected actual
let test_basic_pgn _ctxt =
let pgn = "1. e4 e5" in
let parsed_game = Parsing.parse_pgn pgn in
match parsed_game.content with
| items ->
let expected = "\\textbf{1.} \\textbf{e4} \\textbf{e5}" in
let actual = Latex.render_game true items in
ae expected actual
let test_basic_longer_pgn _ctxt =
let pgn = "1. e4 e5 2. Nf3 Nf6 3. Bb5" in
let parsed_game = Parsing.parse_pgn pgn in
match parsed_game.content with
| items ->
let expected =
"\\textbf{1.} \\textbf{e4} \\textbf{e5} \\textbf{2.} \\textbf{Nf3} \
\\textbf{Nf6} \\textbf{3.} \\textbf{Bb5}"
in
let actual = Latex.render_game true items in
ae expected actual
let test_variation_pgn _ctxt =
let pgn = "1. e4 (1. d4 d5) 1... e5" in
let parsed_game = Parsing.parse_pgn pgn in
let expected =
"\\textbf{1.} \\textbf{e4} ( 1. d4 d5 ) \\textbf{1...} \\textbf{e5}"
in
let actual = Latex.render_game true parsed_game.content in
ae expected actual
let test_black_move_after_comment _ctxt =
let pgn = "1. e4 {some comment} e5" in
let parsed_game = Parsing.parse_pgn pgn in
let expected =
"\\textbf{1.} \\textbf{e4} \\newline some comment\\par \
\\textbf{\\ldots{}e5}"
in
let actual = Latex.render_game true parsed_game.content in
ae expected actual
let test_diagram_placement _ctxt =
let pgn = "1.e4 e5 2.Nf3 Nc6 3.Bb5 a3" in
let parsed_game = Parsing.parse_pgn pgn in
let rendered_game =
Latex.render_game true ~diagram_data:Helpers.Latex_helper.diagram_data
parsed_game.content
in
let expected =
{|\textbf{1.} \textbf{e4} \textbf{e5} \textbf{2.} \textbf{Nf3} \textbf{Nc6} \textbf{3.} \textbf{Bb5}
\par\nobreak\medskip\chessboard[setfen=rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 3, vmargin=false]\par\medskip
\textbf{\ldots{}}\textbf{a3}
\par\nobreak\medskip\chessboard[setfen=rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 3, vmargin=false]\par\medskip|}
in
ae expected rendered_game
let test_player_elo =
[
( "White ELO" >:: fun _ ->
ae "(1432)" (Latex_helpers.build_elo_string "1432") );
( "Black ELO" >:: fun _ ->
ae "(1233)" (Latex_helpers.build_elo_string "1233") );
("Empty ELO" >:: fun _ -> ae "" (Latex_helpers.build_elo_string ""));
]
let test_date_site =
[
( "Date and Site" >:: fun _ ->
ae "\\date{1991.01.01, Kherson}"
(Latex_helpers.build_date_site_string "1991.01.01" "Kherson") );
( "Date and no site" >:: fun _ ->
ae "\\date{1991.01.01}"
(Latex_helpers.build_date_site_string "1991.01.01" "") );
( "No date but site" >:: fun _ ->
ae "\\date{Kherson}" (Latex_helpers.build_date_site_string "" "Kherson")
);
( "No date and no site" >:: fun _ ->
ae "\\date{}" (Latex_helpers.build_date_site_string "" "") );
]
let test_title =
[
( "Event only" >:: fun _ ->
ae "\\title{some event}"
(Latex_helpers.build_title_string "some event" "" "") );
( "Title and subtitle" >:: fun _ ->
ae "\\title{Some title\\\\[2ex]\\large{Some subtitle}}"
(Latex_helpers.build_title_string "irrelevant" "Some title"
"Some subtitle") );
]
let test_author =
[
( "Author only" >:: fun _ ->
ae "\\author{Some author}"
(Latex_helpers.build_author_string "Some author" "" "" "" "") );
( "Nothing" >:: fun _ ->
ae "\\author{}" (Latex_helpers.build_author_string "" "" "" "" "") );
]
let test_diagram _ctxt =
match Latex_helpers.get_diagram 5 Helpers.Latex_helper.diagram_data with
| Some actual ->
let expected =
"\n\\par\\nobreak\\medskip\\chessboard[setfen="
^ "rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 3"
^ ", vmargin=false]\\par\\medskip\n"
in
ae expected actual
| None -> assert_failure "Diagram for ply 5 was not found"
let test_diagram_clock _ctxt =
match
Latex_helpers.get_diagram 5 Helpers.Latex_helper.diagram_data ~clock:true
~white_time:"1:00" ~black_time:"0:21"
with
| Some actual ->
let expected =
{|\par\medskip\noindent\begin{minipage}{\linewidth}0:21\par\nopagebreak\smallskip
\chessboard[setfen=rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 3, vmargin=false]\par\nopagebreak\vspace{1em}
1:00\end{minipage}\par\medskip|}
in
ae expected actual
| None -> assert_failure "Diagram for ply 5 was not found"
let test_no_diagram _ctxt =
let result = Latex_helpers.get_diagram 99 Helpers.Latex_helper.diagram_data in
match result with
| None -> ()
| Some actual ->
assert_failure
("Expected None for ply 99, but got a diagram string instead: " ^ actual)
let suite =
"latex tests"
>::: [
"number_to_latex_direct" >:: test_number_to_latex_direct;
"move_to_latex_direct" >:: test_move_to_latex_direct;
"comment_to_latex_direct" >:: test_comment_to_latex_direct;
"basic_pgn" >:: test_basic_pgn;
"basic_longer_pgn" >:: test_basic_longer_pgn;
"variation_pgn" >:: test_variation_pgn;
"black_move_after_comment" >:: test_black_move_after_comment;
"diagram_placement" >:: test_diagram_placement;
"elo tests" >::: test_player_elo;
"date & site tests" >::: test_date_site;
"title tests" >::: test_title;
"author tests" >::: test_author;
"diagram_test" >:: test_diagram;
"diagram_clock" >:: test_diagram_clock;
"no_diagram" >:: test_no_diagram;
]
let () = run_test_tt_main suite