;;; test-ox-latex.el --- tests for ox-latex.el -*- lexical-binding: t; -*- ;; Copyright (C) 2023 Ihor Radchenko ;; Author: Ihor Radchenko ;; 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 . ;;; Commentary: ;; Tests checking validity of Org ASCII export output. ;;; Code: (require 'ox-ascii nil t) (unless (featurep 'ox-ascii) (signal 'missing-test-dependency "org-export-ascii")) (defun test-ox-ascii--restore-syntax () (org-link-make-regexps) (when (featurep 'org-element) (org-element-update-syntax))) (defun test-ox-ascii--link-export-inline (path desc backend info) (and (org-export-derived-backend-p backend 'ascii) (let ((description (and (org-string-nw-p desc) (org-trim desc))) (target (format "(|tststr:%s|)" path))) (if description (format "[|%s|] %s" description target) target)))) (ert-deftest test-ox-ascii/link-custom-protocol-fallback () "Test link custom protocol fallback." (unwind-protect (let ((org-link-parameters)) (org-link-set-parameters "tstdflt") ;; As notes. (let ((org-ascii-links-to-notes t)) (should ; With description. (string-equal (org-export-string-as "Link [[tstdflt:path-descr][with description]] as note." 'ascii t) "Link [with description] as note. \n [with description] \n")) (should ; No description. (string-equal (org-export-string-as "Link [[tstdflt:path-no-descr]] without description (note)." 'ascii t) "Link without description (note).\n"))) ;; Inline. (let ((org-ascii-links-to-notes nil)) (should ; With description. (string-equal (org-export-string-as "Inline link [[tstdflt:path-descr][with description]]." 'ascii t) "Inline link [with description] ().\n")) (should ; No description. (string-equal (org-export-string-as "Inline link [[tstdflt:path-no-descr]] without description." 'ascii t) "Inline link without description.\n")))) (test-ox-ascii--restore-syntax))) (ert-deftest test-ox-ascii/link-custom-protocol-string () "Test link custom protocol forced inline (string return value)." (unwind-protect (let ((org-link-parameters)) (org-link-set-parameters "tststr" :export #'test-ox-ascii--link-export-inline) ;; Inline despite as notes is requested. (let ((org-ascii-links-to-notes t)) (should ; With description. (string-equal (org-export-string-as "Link [[tststr:path-descr][with description]] as string (opt note)." 'ascii t) "Link [|with description|] (|tststr:path-descr|) as string (opt note).\n")) (should ; No description. (string-equal (org-export-string-as "Link [[tststr:path-no-descr]] without description as string (opt note)." 'ascii t) "Link (|tststr:path-no-descr|) without description as string (opt note).\n"))) ;; Inline. (let ((org-ascii-links-to-notes nil)) (should ; With description. (string-equal (org-export-string-as "Link [[tststr:path-descr][with description]] as string (opt inline)." 'ascii t) "Link [|with description|] (|tststr:path-descr|) as string (opt inline).\n")) (should ; No description. (string-equal (org-export-string-as "Link without description as string (opt inline)." 'ascii t) "Link (|tststr:path-no-descr|) without description as string (opt inline).\n")))) (test-ox-ascii--restore-syntax))) (ert-deftest test-ox-ascii/link-custom-protocol-cons () "Test link custom protocol optional note (cons return value)." (unwind-protect (let ((org-link-parameters)) (org-link-set-parameters "tstcons" :export (lambda (path descr _backend _info) (cons (concat "excons-" path) descr))) ;; As notes. (let ((org-ascii-links-to-notes t)) (should ; With description. (string-equal (org-export-string-as "Link [[tstcons:path-descr][with descr[iption]\u200b]] as note." 'ascii t) "Link [with descr[iption]\u200b] as note. \n [with descr[iption]\u200b] excons-path-descr\n")) (should ; No description. (string-equal (org-export-string-as "Link without description (note)." 'ascii t) "Link excons-path-no-descr without description (note).\n"))) ;; Inline. (let ((org-ascii-links-to-notes nil)) (should ; With description. (string-equal (org-export-string-as "Inline link [[tstcons:path-descr][with description]]." 'ascii t) "Inline link with description (excons-path-descr).\n")) (should ; No description. (string-equal (org-export-string-as "Inline link [[tstcons:path-no-descr]] without description." 'ascii t) "Inline link excons-path-no-descr without description.\n"))) ;; Force parenthesis. (let ((org-link-parameters)) (org-link-set-parameters "brcons" :export (lambda (path descr _backend _info) (cons (format "(exbr-%s)" path) (and descr (format "[%s]" descr))))) (let ((org-ascii-links-to-notes t)) (should (string-equal (org-export-string-as "Link [[brcons:path-descr][with brackets]] as note." 'ascii t) "Link [with brackets] as note. \n [with brackets] (exbr-path-descr)\n"))) ;; Inline. (let ((org-ascii-links-to-notes nil)) (should (string-equal (org-export-string-as "Link [[brcons:path-descr][with brackets]] inline." 'ascii t) "Link [with brackets] (exbr-path-descr) inline.\n")))) ;; Error. (org-link-set-parameters "tsterr" :export (lambda (path descr _backend _info) (list (concat "ex-error! " path) descr "extra arg"))) (let* ((err (should-error (org-export-string-as "Signals [[tsterr:invalid :export][aaa]] error." 'ascii t) :type 'error)) (err-text (cadr err))) (should-not (unless (and (stringp err-text) (string-match-p "\\`Link :export returned not.*" err-text)) err)))) (test-ox-ascii--restore-syntax))) (ert-deftest test-ox-ascii/list () "Test lists." ;; Number counter. (org-test-with-exported-text 'ascii "1. [@3] foo" (goto-char (point-min)) (should (search-forward "3. foo"))) ;; Number counter. Start from 1. (org-test-with-exported-text 'ascii "3. foo" (goto-char (point-min)) (should (search-forward "1. foo"))) ;; Alphanumeric counter. (let ((org-list-allow-alphabetical t)) (org-test-with-exported-text 'ascii "m. [@k] baz" (goto-char (point-min)) (should (search-forward "11. baz")))) ;; Start from 1. (let ((org-list-allow-alphabetical t)) (org-test-with-exported-text 'ascii "m. bar" (goto-char (point-min)) (should (search-forward "1. bar"))))) (provide 'test-ox-ascii) ;;; test-ox-ascii.el ends here