branch: externals/org-real commit 8ab345997a6f7d56405557678470982ee5bf690b Author: Tyler Grinn <tylergr...@gmail.com> Commit: Tyler Grinn <tylergr...@gmail.com>
Added test framework --- .gitlab-ci.yml | 10 +- Eldev | 68 ++++++++- tests.org => demo/example.org | 0 garage.org => demo/garage.org | 0 prepositions.org => demo/prepositions.org | 0 projects.org => demo/projects.org | 0 examples | 68 --------- org-real.el | 7 +- tests/edge-cases.org | 226 ++++++++++++++++++++++++++++++ 9 files changed, 302 insertions(+), 77 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 95db3a4..ea1c6fb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,11 +7,13 @@ package: image: silex/emacs:27 before_script: - curl -fsSL https://raw.github.com/doublep/eldev/master/webinstall/eldev | sh + - export PATH=$PATH:/root/.eldev/bin script: - - /root/.eldev/bin/eldev -dtT lint - - /root/.eldev/bin/eldev -dtT compile -W - - /root/.eldev/bin/eldev -dtT package - - /root/.eldev/bin/eldev -dtT md5 + - eldev lint + - eldev compile -W + - eldev test + - eldev package + - eldev md5 artifacts: paths: - dist/ diff --git a/Eldev b/Eldev index 84e9700..7469bfd 100644 --- a/Eldev +++ b/Eldev @@ -1,8 +1,8 @@ ; -*- mode: emacs-lisp; lexical-binding: t -*- (eldev-defcommand - org_real-md5 (&rest parameters) - "Create md5 checksum of tar files in dist folder" + org_real-md5 (&rest _) + "Create md5 checksum of .tar and .el files in dist folder." (mapc (lambda (file) (write-region @@ -12,3 +12,67 @@ (append (directory-files eldev-dist-dir t "\\.tar\\'") (directory-files eldev-dist-dir t "\\.el\\'")))) + +(eldev-defcommand + org_real-test (&rest _) + "Runs tests against all org files in tests folder." + :override t + (require 'cl-lib) + (require 'org-element) + (load-file "org-real.el") + (let ((failures 0)) + (cl-flet ((get-expected () + (save-excursion + (re-search-forward "#\\+begin_example") + (org-element-property :value (org-element-at-point)))) + (get-actual () + (with-current-buffer (get-buffer "Org Real") + (buffer-string))) + (print-result (title result) + (message " %s : %s" + (if result + "\033[0;32mPASS\033[0m" + "\033[0;31mFAIL\033[0m") + title)) + (set-result (result) + (if (not result) (cl-incf failures)) + (let ((inhibit-message t)) + (org-todo (if result "PASS" "FAIL"))))) + (mapc + (lambda (test) + (with-temp-file test + (message "%s:" (file-name-base test)) + (insert-file-contents test) + (org-mode) + + (message " Opening links:") + (org-element-map (org-element-parse-buffer) 'link + (lambda (link) + (goto-char (org-element-property :begin link)) + (let ((title (and (org-in-regexp org-link-bracket-re) + (match-string 2))) + (result (catch 'result + (save-window-excursion + (condition-case nil + (org-open-at-point) + (error (throw 'result nil))) + (string= (get-expected) (get-actual)))))) + (print-result title result) + (set-result result)))) + + (message " Merging links:") + (org-babel-map-src-blocks nil + (goto-char beg-block) + (let ((title (org-entry-get nil "ITEM")) + (result (catch 'result + (save-window-excursion + (condition-case nil + (progn + (org-edit-special) + (org-real-world)) + (error (throw 'result nil)))) + (string= (get-expected) (get-actual))))) + (print-result title result) + (set-result result))))) + (directory-files "tests" t "\\.org\\'")) + (and (> failures 0) (error "Test run had failures"))))) diff --git a/tests.org b/demo/example.org similarity index 100% rename from tests.org rename to demo/example.org diff --git a/garage.org b/demo/garage.org similarity index 100% rename from garage.org rename to demo/garage.org diff --git a/prepositions.org b/demo/prepositions.org similarity index 100% rename from prepositions.org rename to demo/prepositions.org diff --git a/projects.org b/demo/projects.org similarity index 100% rename from projects.org rename to demo/projects.org diff --git a/examples b/examples deleted file mode 100644 index a6efbf4..0000000 --- a/examples +++ /dev/null @@ -1,68 +0,0 @@ - - The toothbrush is in the bathroom cabinet on the third shelf - to the left of the razors. - - ┌────────────────────────────────────────┐ - │ - │ bathroom cabinet │ - │ │ - │ ┌──────────────────────────────────┐ │ - │ │ │ │ - │ │ third shelf │ │ - │ │ │ │ - │ │ ┌──────────────┐ ┌──────────┐ │ │ - │ │ │ │ │ │ │ │ - │ │ │ toothbrush │ │ razors │ │ │ - │ │ │ │ │ │ │ │ - │ │ └──────────────┘ └──────────┘ │ │ - │ │ │ │ - │ └──────────────────────────────────┘ │ - │ │ - └────────────────────────────────────────┘ - - The bike is behind the shed. - - ┌──────────────┐ - │ │ - │ shed │ - │ │ - │ ┌╌╌╌╌╌╌╌╌┐ │ - │ ╎ ╎ │ - │ ╎ bike ╎ │ - │ ╎ ╎ │ - │ └╌╌╌╌╌╌╌╌┘ │ - │ │ - └──────────────┘ - - The mosquito spray is in front of the sunscreen in the closet - - ┌──────────────────────────────┐ - │ │ - │ closet │ - │ │ - │ ┌────────────────────────┐ │ - │ │ │ │ - │ │ sunscreen │ │ - │ │ │ │ - │ │ ┌──────────────────┐ │ │ - │ │ │ │ │ │ - │ │ │ mosquito spray │ │ │ - │ │ │ │ │ │ - │ └──┴──────────────────┴──┘ │ - │ │ - └──────────────────────────────┘ - -The spare key is above the door frame - - ┌─────────────┐ - │ │ - │ spare key │ - │ │ - └─────────────┘ - ┌──────────────┐ - │ │ - │ door frame │ - │ │ - └──────────────┘ - - diff --git a/org-real.el b/org-real.el index 58315e2..82ddb85 100644 --- a/org-real.el +++ b/org-real.el @@ -270,7 +270,8 @@ The following commands are available: \\{org-real-mode-map}" :group 'org-mode - (toggle-truncate-lines t)) + (let ((inhibit-message t)) + (toggle-truncate-lines t))) (mapc (lambda (key) (define-key org-real-mode-map (kbd (car key)) (cdr key))) @@ -631,7 +632,7 @@ ORIG is `org-insert-link', ARGS are the arguments passed to it." (cl-defmethod org-real--make-instance ((_ (subclass org-real-box)) containers &optional skip-primary) - "Create an instance of `org-real-box' from CONTAINERS. + "Create an instance of an org real box from CONTAINERS. CONTAINERS is a list of plists containing at least a :name property and optionally a :rel property. If SKIP-PRIMARY is @@ -1550,7 +1551,7 @@ set to the :loc slot of each box." (defun org-real--parse-headlines () - "Create an org-real-box from the current buffer's headlines." + "Create an org real box from the current buffer's headlines." (let ((headlines (cddr (org-element-parse-buffer 'headline))) (world (org-real-box :level 1))) (mapc diff --git a/tests/edge-cases.org b/tests/edge-cases.org new file mode 100644 index 0000000..6b657d1 --- /dev/null +++ b/tests/edge-cases.org @@ -0,0 +1,226 @@ +#+TODO: FAIL | PASS + +* Opening links + +** FAIL [[real://1-2/1-1?rel=on top of/1-0?rel=above][Is above an on top]] + #+begin_example + + The 1-0 is above the 1-1 on top of the 1-2. + + ┌───────┐ + │ │ + │ 1-0 │ + │ │ + └───────┘ + + ┌───────┐ + │ │ + │ 1-1 │ + │ │ + ┌──┴───────┴──┐ + │ │ + │ 1-2 │ + │ │ + └─────────────┘ + + + + + #+end_example + +** FAIL [[real://6-4/6-3?rel=on top of/6-2?rel=on top of/6-1?rel=above][Is above an on top of an on top]] + #+begin_example + + The 6-1 is above the 6-2 on top of the 6-3 on top of the 6-4. + + ┌───────┐ + │ │ + │ 6-1 │ + │ │ + └───────┘ + + ┌───────┐ + │ │ + │ 6-2 │ + │ │ + ┌──┴───────┴──┐ + │ │ + │ 6-3 │ + │ │ + ┌──┴─────────────┴──┐ + │ │ + │ 6-4 │ + │ │ + └───────────────────┘ + + + + + + #+end_example + +** PASS [[real://7-3/7-2?rel=on top of/7-1?rel=below][Is below an on top]] + #+begin_example + + The 7-1 is below the 7-2 on top of the 7-3. + + ┌───────┐ + │ │ + │ 7-2 │ + │ │ + ┌──┴───────┴──┐ + │ │ + │ 7-3 │ + │ │ + │ ┌───────┐ │ + │ │ │ │ + │ │ 7-1 │ │ + │ │ │ │ + │ └───────┘ │ + └─────────────┘ + + + + + #+end_example + +** FAIL [[real://2-4/2-3?rel=on top of/2-2?rel=on top of/2-1?rel=below][Is below an on top of an on top]] + #+begin_example + Not created yet + #+end_example + +** PASS [[real://3-3?rel=in/3-2?rel=in front of/3-1?rel=above][Is above an in front]] + #+begin_example + + The 3-1 is above the 3-2 in front of the 3-3. + + ┌─────────────┐ + │ │ + │ 3-3 │ + │ │ + │ ┌───────┐ │ + │ │ │ │ + │ │ 3-1 │ │ + │ │ │ │ + │ └───────┘ │ + │ │ + │ ┌───────┐ │ + │ │ │ │ + │ │ 3-2 │ │ + │ │ │ │ + └──┴───────┴──┘ + + + + + #+end_example + +** PASS [[real://5-4/5-3?rel=in front of/5-2?rel=in front of/5-1?rel=above][Is above an in front of an in front]] + #+begin_example + + The 5-1 is above the 5-2 in front of the 5-3 in front of the 5-4. + + ┌───────────────────┐ + │ │ + │ 5-4 │ + │ │ + │ ┌─────────────┐ │ + │ │ │ │ + │ │ 5-3 │ │ + │ │ │ │ + │ │ ┌───────┐ │ │ + │ │ │ │ │ │ + │ │ │ 5-1 │ │ │ + │ │ │ │ │ │ + │ │ └───────┘ │ │ + │ │ │ │ + │ │ ┌───────┐ │ │ + │ │ │ │ │ │ + │ │ │ 5-2 │ │ │ + │ │ │ │ │ │ + └──┴──┴───────┴──┴──┘ + + + + + #+end_example + +** FAIL [[real://4-3/4-2?rel=in front of/4-1?rel=below][Is below an in front]] + #+begin_example + + The 4-1 is below the 4-2 in front of the 4-3. + + ┌─────────────┐ + │ │ + │ 4-3 │ + │ │ + │ ┌───────┐ │ + │ │ │ │ + │ │ 4-2 │ │ + │ │ │ │ + └──┴───────┴──┘ + + ┌───────┐ + │ │ + │ 4-1 │ + │ │ + └───────┘ + + + + + #+end_example + +** FAIL [[real://8-4/8-3?rel=in front of/8-2?rel=in front of/8-1?rel=below][Is below an in front of an in front]] + #+begin_example + + The 8-1 is below the 8-2 in front of the 8-3 in front of the 8-4. + + ┌───────────────────┐ + │ │ + │ 8-4 │ + │ │ + │ ┌─────────────┐ │ + │ │ │ │ + │ │ 8-3 │ │ + │ │ │ │ + │ │ ┌───────┐ │ │ + │ │ │ │ │ │ + │ │ │ 8-2 │ │ │ + │ │ │ │ │ │ + └──┴──┴───────┴──┴──┘ + + ┌───────┐ + │ │ + │ 8-1 │ + │ │ + └───────┘ + + + + + + #+end_example +* Merging links + +** PASS Merges two boxes + #+begin_src org + - [[real://thing3/thing2?rel=on top of/thing1?rel=to the right of]] + - [[real://thing3/thing2?rel=on top of]] + #+end_src + #+begin_example + + ┌──────────┐ ┌──────────┐ + │ │ │ │ + │ thing2 │ │ thing1 │ + │ │ │ │ + ┌──┴──────────┴──┴──────────┴──┐ + │ │ + │ thing3 │ + │ │ + └──────────────────────────────┘ + + + + + #+end_example