;;; test-ox-html.el --- Tests for ox-html.el ;; Copyright (C) 2022 Rudolf Adamkovič ;; Author: Rudolf Adamkovič ;; This file is part of GNU Emacs. ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Code: (require 'ox-html) ;;; Loading MathJax (ert-deftest ox-html/mathjax-path-none () "Test that MathJax does not load when not needed." (should-not (org-test-with-temp-text "No LaTeX here." (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (let ((case-fold-search t)) (search-forward "MathJax" nil t))))))) (ert-deftest ox-html/mathjax-path-default () "Test the default path from which MathJax loads." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx "")))))))) (ert-deftest ox-html/mathjax-path-custom () "Test a customized path from which MathJax loads." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options '((path "./mathjax/es5/tex-mml-chtml.js")))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx "")))))))) (ert-deftest ox-html/mathjax-path-in-buffer () "Test a in-buffer customized path from which MathJax loads." (should (= 1 (org-test-with-temp-text " #+HTML_MATHJAX: path: ./mathjax/es5/tex-mml-chtml.js $x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx "")))))))) ;;; Configuring MathJax with options (ert-deftest ox-html/mathjax-options-default () "Test the default MathJax options." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx "")))))))) (ert-deftest ox-html/mathjax-options-custom () "Test customized MathJax options." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options '((path "") ; tested elsewhere (scale 0.5) (align "right") (font "mathjax-euler") (overflow "scale") (tags "all") (indent "1em") (multlinewidth "100%") (tagindent "2em") (tagside "left")))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx "")))))))) (ert-deftest ox-html/mathjax-options-in-buffer () "Test in-buffer customized MathJax options." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: scale: 0.5 #+HTML_MATHJAX: align: right #+HTML_MATHJAX: font: mathjax-euler #+HTML_MATHJAX: overflow: scale #+HTML_MATHJAX: tags: all #+HTML_MATHJAX: indent: 1em #+HTML_MATHJAX: multlinewidth: 100% #+HTML_MATHJAX: tagindent: 2em #+HTML_MATHJAX: tagside: left" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx "")))))))) ;;; Converting legacy MathJax scales ;; Define a legacy scale as any scale given as a percentage string, ;; such as "150", instead of a unit-interval float, such as 1.5. (ert-deftest ox-html/mathjax-legacy-scale-default () "Test the legacy scale conversion with the old default value." (should (= 2 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(scale "100") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "scale: 1.0" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-scale-custom () "Test the legacy scale conversion with a non-default value." (should (= 2 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(scale "10") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "scale: 0.1" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-scale-in-buffer () "Test the legacy scale conversion with an in-buffer value." (should (= 2 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: scale: 10" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "scale: 0.1" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-scale-message () "Test the legacy scale conversion message." (should (= 1 (seq-count (lambda (message) (string= "Converting legacy MathJax scale: 20 to 0.2" message)) (org-test-capture-messages (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(scale "20") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode)))))))) (ert-deftest ox-html/mathjax-legacy-scale-message-in-buffer () "Test the legacy scale conversion message for an in-buffer value." (should (seq-count (lambda (message) (string= "Converting legacy MathJax scale: 20 to 0.2" message)) (org-test-capture-messages (org-test-with-temp-text "$x$ #+HTML_MATHJAX: scale: 20" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode))))))) (ert-deftest ox-html/mathjax-legacy-scale-ignore () "Test the legacy scale conversion ignores small values." (should (= 2 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options '((scale "9")))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "scale: 9" (or "," "\n")))))))))) ;;; Converting legacy MathJax auto-numbering ;; NOTE: AMS stands for American Mathematical Society. (ert-deftest ox-html/mathjax-legacy-autonumber-ams () "Test legacy auto-numbering, when AMS." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(autonumber "AMS") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "tags: 'ams'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-autonumber-ams-in-buffer () "Test legacy auto-numbering, when AMS in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: autonumber: AMS" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "tags: 'ams'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-autonumber-none () "Test legacy auto-numbering, when disabled." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(autonumber "None") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "tags: 'none'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-autonumber-none-in-buffer () "Test legacy auto-numbering, when disabled in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: autonumber: None" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "tags: 'none'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-autonumber-all () "Test legacy auto-numbering, when enabled." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(autonumber "All") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "tags: 'all'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-autonumber-all-in-buffer () "Test legacy auto-numbering, when enabled in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: autonumber: All" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "tags: 'all'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-autonumber-message () "Test legacy auto-numbering conversion message." (should (= 1 (seq-count (lambda (message) (string= "Converting legacy MathJax option: autonumber" message)) (org-test-capture-messages (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(autonumber "AMS") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode)))))))) (ert-deftest ox-html/mathjax-legacy-autonumber-message-in-buffer () "Test legacy auto-numbering conversion message." (should (= 1 (seq-count (lambda (message) (string= "Converting legacy MathJax option: autonumber" message)) (org-test-capture-messages (org-test-with-temp-text "$x$ #+HTML_MATHJAX: autonumber: AMS" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode)))))))) ;;; Converting legacy MathJax fonts (ert-deftest ox-html/mathjax-legacy-font-tex () "Test legacy font, when TeX." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(font "TeX") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-tex'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-tex-in-buffer () "Test legacy font, when TeX in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: font: TeX" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-tex'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-stix-web () "Test legacy font, when STIX-Web." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(font "STIX-Web") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-stix2'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-stix-web-in-buffer () "Test legacy font, when STIX-Web in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: font: STIX-Web" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-stix2'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-asana-math () "Test legacy font, when Asana-Math." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(font "Asana-Math") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-asana'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-asana-math-in-buffer () "Test legacy font, when Asana-Math in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: font: Asana-Math" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-asana'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-neo-euler () "Test legacy font, when Neo-Euler." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(font "Neo-Euler") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-euler'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-neo-euler-in-buffer () "Test legacy font, when Neo-Euler in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: font: Neo-Euler" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-euler'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-gyre-pagella () "Test legacy font, when Gyre-Pagella." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(font "Gyre-Pagella") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-pagella'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-gyre-pagella-in-buffer () "Test legacy font, when Gyre-Pagella in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: font: Gyre-Pagella" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-pagella'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-gyre-termes () "Test legacy font, when Gyre-Termes." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(font "Gyre-Termes") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-termes'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-gyre-termes-in-buffer () "Test legacy font, when Gyre-Termes in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: font: Gyre-Termes" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-termes'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-latin-modern () "Test legacy font, when Latin-Modern." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(font "Latin-Modern") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-modern'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-font-latin-modern-in-buffer () "Test legacy font, when Latin-Modern in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: font: Latin-Modern" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "font: 'mathjax-modern'" (or "," "\n")))))))))) ;;; Converting legacy MathJax line breaks (ert-deftest ox-html/mathjax-legacy-line-breaks-true () "Test legacy line breaks, when true." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (append '((linebreaks "true") (overflow "overflow")) org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "displayOverflow: 'linebreak'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-line-breaks-true-in-buffer () "Test legacy line breaks, when true in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: linebreaks: true" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(overflow "overflow") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "displayOverflow: 'linebreak'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-line-breaks-false () "Test legacy line breaks, when false." (should (= 1 (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (append '((linebreaks "false") (overflow "linebreak")) org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "displayOverflow: 'overflow'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-line-breaks-false-in-buffer () "Test legacy line breaks, when true in-buffer." (should (= 1 (org-test-with-temp-text "$x$ #+HTML_MATHJAX: linebreaks: false" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(overflow "linebreak") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode) (with-current-buffer export-buffer (how-many (rx (seq "displayOverflow: 'overflow'" (or "," "\n")))))))))) (ert-deftest ox-html/mathjax-legacy-line-breaks-message () "Test the legacy line breaks conversion message." (should (= 1 (seq-count (lambda (message) (string= "Converting legacy MathJax option: linebreaks" message)) (org-test-capture-messages (org-test-with-temp-text "$x$" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil) (org-html-mathjax-options (cons '(linebreaks "true") org-html-mathjax-options))) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode)))))))) (ert-deftest ox-html/mathjax-legacy-line-breaks-message-in-buffer () "Test the legacy scale conversion message for an in-buffer value." (should (= 1 (seq-count (lambda (message) (string= "Converting legacy MathJax option: linebreaks" message)) (org-test-capture-messages (org-test-with-temp-text "$x$ #+HTML_MATHJAX: linebreaks: true" (let ((export-buffer "*Test HTML Export*") (org-export-show-temporary-export-buffer nil)) (org-export-to-buffer 'html export-buffer nil nil nil nil nil #'html-mode)))))))) (provide 'test-ox-html) ;;; test-ox-html.el ends here