>From d8525132d3f90623a6e8c732bd2a580ba23a2156 Mon Sep 17 00:00:00 2001 From: Ruijie Yu Date: Sat, 22 Apr 2023 20:36:18 +0800 Subject: [PATCH] [DRAFT] Fix dependence on locale in org testing facilities * testing/org-test.el org-test-day-of-weeks-seconds: add values of seconds that yield different days of week (by trial-and-error). org-test-day-of-weeks-abbrev: add a vector of abbreviated DoW names for testing. org-test-day-of-weeks-full: add a vector of full DoW names for testing. * testing/lisp/test-org-clock.el (test-org-clok/org-clock-timestamps-change): (test-org-clock/clock-drawer-dwim): make use of the pre-generated DoW names in the testing to remove assumptions on LANG=C. * testing/lisp/test-org.el org-test-timestamp-regexp: make a comprehensive timestamp regexp for testing. (test-org/clone-with-time-shift): (test-org/add-planning-info): (test-org/deadline): (test-org/schedule): replace the regexps which try to match the DoW string in a timestamp into using `org-test-timestamp-regexp'. --- testing/lisp/test-org-clock.el | 62 +++++---- testing/lisp/test-org.el | 231 +++++++++++++++++---------------- testing/org-test.el | 25 ++++ 3 files changed, 177 insertions(+), 141 deletions(-) diff --git a/testing/lisp/test-org-clock.el b/testing/lisp/test-org-clock.el index 7d8123e1f..4d9306619 100644 --- a/testing/lisp/test-org-clock.el +++ b/testing/lisp/test-org-clock.el @@ -91,27 +91,32 @@ the buffer." (ert-deftest test-org-clok/org-clock-timestamps-change () "Test `org-clock-timestamps-change' specifications." - (should - (equal - "CLOCK: [2023-02-19 Sun 21:30]--[2023-02-19 Sun 23:35] => 2:05" - (org-test-with-temp-text - "CLOCK: [2023-02-19 Sun 22:30]--[2023-02-20 Mon 00:35] => 2:05" - (org-clock-timestamps-change 'down 1) - (buffer-string)))) - (should - (equal - "CLOCK: [2023-02-20 Mon 00:00]--[2023-02-20 Mon 00:40] => 0:40" - (org-test-with-temp-text - "CLOCK: [2023-02-19 Sun 23:55]--[2023-02-20 Mon 00:35] => 0:40" - (org-clock-timestamps-change 'up 1) - (buffer-string)))) - (should - (equal - "CLOCK: [2023-02-20 Mon 00:30]--[2023-02-20 Mon 01:35] => 1:05" - (org-test-with-temp-text - "CLOCK: [2023-02-19 Sun 23:30]--[2023-02-20 Mon 00:35] => 1:05" - (org-clock-timestamps-change 'up 1) - (buffer-string))))) + (let ((sun (aref org-test-day-of-weeks-abbrev 0)) + (mon (aref org-test-day-of-weeks-abbrev 1))) + (should + (equal + (format "CLOCK: [2023-02-19 %s 21:30]--[2023-02-19 %s 23:35] => 2:05" + sun sun) + (org-test-with-temp-text + "CLOCK: [2023-02-19 Sun 22:30]--[2023-02-20 Mon 00:35] => 2:05" + (org-clock-timestamps-change 'down 1) + (buffer-string)))) + (should + (equal + (format "CLOCK: [2023-02-20 %s 00:00]--[2023-02-20 %s 00:40] => 0:40" + mon mon) + (org-test-with-temp-text + "CLOCK: [2023-02-19 Sun 23:55]--[2023-02-20 Mon 00:35] => 0:40" + (org-clock-timestamps-change 'up 1) + (buffer-string)))) + (should + (equal + (format "CLOCK: [2023-02-20 %s 00:30]--[2023-02-20 %s 01:35] => 1:05" + mon mon) + (org-test-with-temp-text + "CLOCK: [2023-02-19 Sun 23:30]--[2023-02-20 Mon 00:35] => 1:05" + (org-clock-timestamps-change 'up 1) + (buffer-string)))))) ;;; Clock drawer @@ -299,19 +304,20 @@ the buffer." (ert-deftest test-org-clock/clock-drawer-dwim () "Test DWIM update of days for clocks in logbook drawers." - (should (equal "* Foo + (let ((thu (aref org-test-day-of-weeks-abbrev 4))) + (should (equal (format "* Foo :LOGBOOK: -CLOCK: [2022-11-03 Thu 06:00]--[2022-11-03 Thu 06:01] => 0:01 +CLOCK: [2022-11-03 %s 06:00]--[2022-11-03 %s 06:01] => 0:01 :END: -" - (org-test-with-temp-text - "* Foo +" thu thu) + (org-test-with-temp-text + "* Foo :LOGBOOK: CLOCK: [2022-11-03 ??? 06:00]--[2022-11-03 ??? 06:01] => 0:01 :END: " - (org-ctrl-c-ctrl-c) - (buffer-string))))) + (org-ctrl-c-ctrl-c) + (buffer-string)))))) ;;; Clocktable diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index d7c801fe5..cc06322f3 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -29,6 +29,65 @@ (require 'org-refile) (require 'org-agenda) + +;;; Regexps + +(defconst org-test-timestamp-regexp + (rx (any ?\< ?\[) ; < or [ + (group-n 200 ; YEAR-MONTH-DATE + (group-n 100 (= 4 digit)) ?- + (group-n 101 (= 2 digit)) ?- + (group-n 102 (= 2 digit))) + (group-n 210 ; SPC DOW + " " (group-n 110 bow (+ letter) eow)) + (opt ; SPC HOUR:MINUTE + (group-n 221 + " " + (group-n 220 + (group-n 120 (= 2 digit)) ?: + (group-n 121 (= 2 digit))))) + (opt ; repeater: +{1,2}AMOUNTunit + (group-n 232 + " " + (group-n 231 + (group-n 132 (** 1 2 ?+)) + (group-n 230 + (group-n 130 (+ digit)) + (group-n 131 (any "hdmwy")))))) + (opt ; warning period: -AMOUNTunit + (group-n 242 + " " + (group-n 241 + ?- + (group-n 240 + (group-n 140 (+ digit)) + (group-n 141 (any "hdmwy")))))) + (any ?\> ?\])) + "A (hopefully) comprehensive timestamp regexp. +Each individual component is contained in a group, described below. + +- 100: year +- 101: month +- 102: day-of-month +- 110: day-of-week +- 120: hour (if available) +- 121: minute (if available) +- 130: the repeater amount (if available) +- 131: the repeater unit (if available) +- 132: the repeater \"+\" or \"++\" (if available) +- 140: the warning period amount (if available) +- 141: the warning period unit (if available) +- 200: full year-month-date portion +- 210: day-of-week including preceding space +- 220: full time (hour:minute) portion +- 221: full time portion including preceding space +- 230: repeater amount + unit +- 231: repeater, with preceding \"+\" or \"++\" +- 232: repeater, with preceding \" +\" or \" ++\" +- 240: warning period amount + unit +- 241: warning period with \"-\" +- 242: warning period with \" -\"") + ;;; Helpers @@ -43,6 +102,13 @@ ,@body) (setenv "TZ" ,tz-saved))))) +(defun org-test-drop-dow-from-timestamp () + "Drop dow from timestamps for testing within a buffer. +Return the buffer string." + (replace-regexp-in-string + org-test-timestamp-regexp "" + (buffer-string) nil nil 210)) + ;;; Comments @@ -2015,9 +2081,7 @@ CLOCK: [2022-09-17 sam. 11:00]--[2022-09-17 sam. 11:46] => 0:46" " (org-test-with-temp-text "* H1\n<2015-06-21 Sun>" (org-clone-subtree-with-time-shift 1 "+2d") - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)\\( \\+[0-9][hdmwy]\\)?>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Clone repeating once. (should (equal "\ @@ -2027,9 +2091,7 @@ CLOCK: [2022-09-17 sam. 11:00]--[2022-09-17 sam. 11:46] => 0:46" " (org-test-with-temp-text "* H1\n<2015-06-21 Sun +1w>" (org-clone-subtree-with-time-shift 1 "+2d") - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)\\( \\+[0-9][hdmwy]\\)?>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Clone repeating once in backward. (should (equal "\ @@ -2039,9 +2101,7 @@ CLOCK: [2022-09-17 sam. 11:00]--[2022-09-17 sam. 11:46] => 0:46" " (org-test-with-temp-text "* H1\n<2015-06-21 Sun +1w>" (org-clone-subtree-with-time-shift 1 "-2d") - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)\\( \\+[0-9][hdmwy]\\)?>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Clone non-repeating zero times. (should (equal "\ @@ -2049,9 +2109,7 @@ CLOCK: [2022-09-17 sam. 11:00]--[2022-09-17 sam. 11:46] => 0:46" " (org-test-with-temp-text "* H1\n<2015-06-21 Sun>" (org-clone-subtree-with-time-shift 0 "+2d") - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)\\( \\+[0-9][hdmwy]\\)?>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Clone repeating "zero" times. (should (equal "\ @@ -2060,9 +2118,7 @@ CLOCK: [2022-09-17 sam. 11:00]--[2022-09-17 sam. 11:46] => 0:46" " (org-test-with-temp-text "* H1\n<2015-06-21 Sun +1w>" (org-clone-subtree-with-time-shift 0 "+2d") - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)\\( \\+[0-9][hdmwy]\\)?>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Clone with blank SHIFT argument. (should (string-prefix-p @@ -2098,10 +2154,7 @@ CLOCK: [2022-09-17 sam. 11:00]--[2022-09-17 sam. 11:46] => 0:46" " (org-test-with-temp-text "* H1\n<2015-06-21 Sun 20:00>" (org-clone-subtree-with-time-shift 2 "+3h") - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)\\( [0-9][0-9]:[0-9][0-9]\\)?>" "" - (buffer-substring-no-properties (point-min) (point-max)) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should (equal "\ * H1\n<2015-06-21 20:00> @@ -2109,10 +2162,7 @@ CLOCK: [2022-09-17 sam. 11:00]--[2022-09-17 sam. 11:46] => 0:46" " (org-test-with-temp-text "* H1\n<2015-06-21 Sun 20:00>" (org-clone-subtree-with-time-shift 1 "-2h") - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)\\( [0-9][0-9]:[0-9][0-9]\\)?>" "" - (buffer-substring-no-properties (point-min) (point-max)) - nil nil 1))))) + (org-test-drop-dow-from-timestamp))))) ;;; Fixed-Width Areas @@ -5629,18 +5679,14 @@ Text. (org-test-with-temp-text "* H\nParagraph" (let ((org-adapt-indentation t)) (org-add-planning-info 'deadline "<2015-06-25 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Create deadline when `org-adapt-indentation' is nil. (should (equal "* H\nDEADLINE: <2015-06-25>\nParagraph" (org-test-with-temp-text "* H\nParagraph" (let ((org-adapt-indentation nil)) (org-add-planning-info 'deadline "<2015-06-25 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Update deadline when `org-adapt-indentation' is non-nil. (should (equal "* H\n DEADLINE: <2015-06-25>\nParagraph" @@ -5650,9 +5696,7 @@ Text. Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info 'deadline "<2015-06-25 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Update deadline when `org-adapt-indentation' is nil. (should (equal "* H\nDEADLINE: <2015-06-25>\nParagraph" @@ -5662,27 +5706,21 @@ DEADLINE: <2015-06-24 Wed> Paragraph" (let ((org-adapt-indentation nil)) (org-add-planning-info 'deadline "<2015-06-25 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Schedule when `org-adapt-indentation' is non-nil. (should (equal "* H\n SCHEDULED: <2015-06-25>\nParagraph" (org-test-with-temp-text "* H\nParagraph" (let ((org-adapt-indentation t)) (org-add-planning-info 'scheduled "<2015-06-25 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Schedule when `org-adapt-indentation' is nil. (should (equal "* H\nSCHEDULED: <2015-06-25>\nParagraph" (org-test-with-temp-text "* H\nParagraph" (let ((org-adapt-indentation nil)) (org-add-planning-info 'scheduled "<2015-06-25 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Add deadline when scheduled. (should (equal "\ @@ -5695,9 +5733,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info 'deadline "<2015-06-25 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove middle entry. (should (equal "\ @@ -5710,9 +5746,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info nil nil 'deadline)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)[]>]" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove last entry and then middle entry (order should not ;; matter). (should @@ -5726,9 +5760,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info nil nil 'scheduled 'deadline)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)[]>]" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove closed when `org-adapt-indentation' is non-nil. (should (equal "* H\n DEADLINE: <2015-06-25>\nParagraph" @@ -5738,9 +5770,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info nil nil 'closed)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should (equal "* H\n Paragraph" (org-test-with-temp-text "\ @@ -5749,9 +5779,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info nil nil 'closed)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove closed when `org-adapt-indentation' is nil. (should (equal "* H\nDEADLINE: <2015-06-25>\nParagraph" @@ -5761,9 +5789,7 @@ CLOSED: [2015-06-25 Thu] DEADLINE: <2015-06-25 Thu> Paragraph" (let ((org-adapt-indentation nil)) (org-add-planning-info nil nil 'closed)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should (equal "* H\nParagraph" (org-test-with-temp-text "\ @@ -5772,9 +5798,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation nil)) (org-add-planning-info nil nil 'closed)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove closed entry and delete empty line. (should (equal "\ @@ -5786,9 +5810,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info nil nil 'closed)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove one entry and update another. (should (equal "* H\n DEADLINE: <2015-06-25>\nParagraph" @@ -5798,9 +5820,7 @@ Paragraph" Paragraph" (let ((org-adapt-indentation t)) (org-add-planning-info 'deadline "<2015-06-25 Thu>" 'scheduled)) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1))))) + (org-test-drop-dow-from-timestamp))))) (ert-deftest test-org/deadline () "Test `org-deadline' specifications." @@ -5811,18 +5831,14 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-deadline nil "<2012-03-29 Tue>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should (equal "* H\nDEADLINE: <2014-03-04>" (org-test-with-temp-text "* H\nDEADLINE: <2012-03-29>" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-deadline nil "<2014-03-04 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Accept delta time, e.g., "+2d". (should (equal "* H\nDEADLINE: <2015-03-04>" @@ -5831,8 +5847,7 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-deadline nil "+1y")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1))))) + (org-test-drop-dow-from-timestamp))))) ;; Preserve repeater. (should (equal "* H\nDEADLINE: <2012-03-29 +2y>" @@ -5840,8 +5855,7 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-deadline nil "<2012-03-29 Tue +2y>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\) " "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Preserve warning period. (should (equal "* H\nDEADLINE: <2021-07-20 -1d>" @@ -5849,16 +5863,14 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-deadline nil "<2021-07-20 Tue -1d>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\) " "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should (equal "* H\nDEADLINE: <2021-07-20 +1m -3d>" (org-test-with-temp-text "* H" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-deadline nil "<2021-07-20 Tue +1m -3d>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\) " "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove CLOSED keyword, if any. (should (equal "* H\nDEADLINE: <2012-03-29>" @@ -5866,8 +5878,7 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-deadline nil "<2012-03-29 Tue>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; With C-u argument, remove DEADLINE keyword. (should (equal "* H\n" @@ -5916,8 +5927,7 @@ Paragraph" (push-mark (point) t t) (goto-char (point-max)) (org-deadline nil "2012-03-29")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should-not (equal "* H1\nDEADLINE: <2012-03-29>\n* H2\nDEADLINE: <2012-03-29>" (org-test-with-temp-text "* H1\n* H2" @@ -5928,8 +5938,7 @@ Paragraph" (push-mark (point) t t) (goto-char (point-max)) (org-deadline nil "2012-03-29")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1))))) + (org-test-drop-dow-from-timestamp))))) (ert-deftest test-org/schedule () "Test `org-schedule' specifications." @@ -5940,18 +5949,14 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-schedule nil "<2012-03-29 Tue>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should (equal "* H\nSCHEDULED: <2014-03-04>" (org-test-with-temp-text "* H\nSCHEDULED: <2012-03-29>" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-schedule nil "<2014-03-04 Thu>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) - nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Accept delta time, e.g., "+2d". (should (equal "* H\nSCHEDULED: <2015-03-04>" @@ -5960,8 +5965,7 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-schedule nil "+1y")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1))))) + (org-test-drop-dow-from-timestamp))))) ;; Preserve repeater. (should (equal "* H\nSCHEDULED: <2012-03-29 +2y>" @@ -5969,8 +5973,7 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-schedule nil "<2012-03-29 Tue +2y>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\) " "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; Remove CLOSED keyword, if any. (should (equal "* H\nSCHEDULED: <2012-03-29>" @@ -5978,8 +5981,7 @@ Paragraph" (let ((org-adapt-indentation nil) (org-last-inserted-timestamp nil)) (org-schedule nil "<2012-03-29 Tue>")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) ;; With C-u argument, remove SCHEDULED keyword. (should (equal "* H\n" @@ -6028,8 +6030,7 @@ Paragraph" (push-mark (point) t t) (goto-char (point-max)) (org-schedule nil "2012-03-29")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1)))) + (org-test-drop-dow-from-timestamp)))) (should-not (equal "* H1\nSCHEDULED: <2012-03-29>\n* H2\nSCHEDULED: <2012-03-29>" (org-test-with-temp-text "* H1\n* H2" @@ -6040,17 +6041,21 @@ Paragraph" (push-mark (point) t t) (goto-char (point-max)) (org-schedule nil "2012-03-29")) - (replace-regexp-in-string - "\\( [.A-Za-z]+\\)>" "" (buffer-string) nil nil 1)))) - (should - ;; check if a repeater survives re-scheduling. - (string-match-p - "\\* H\nSCHEDULED: <2017-02-01 [.A-Za-z]* \\+\\+7d>\n" - (org-test-with-temp-text "* H\nSCHEDULED: <2017-01-19 ++7d>\n" - (let ((org-adapt-indentation nil) - (org-last-inserted-timestamp nil)) - (org-schedule nil "2017-02-01")) - (buffer-string))))) + (org-test-drop-dow-from-timestamp)))) + ;; check if a repeater survives re-scheduling. + (save-match-data + (let* ((org-adapt-indentation nil) + (org-last-inserted-timestamp nil) + (s (org-test-with-temp-text + "* H\nSCHEDULED: <2017-01-19 ++7d>\n" + (org-schedule nil "2017-02-01") + (buffer-string)))) + (should + (string-match + (rx "* H\nSCHEDULED: " (regexp org-test-timestamp-regexp) ?\n) + s)) + (should (equal "2017-02-01" (match-string 200 s))) + (should (equal "++7d" (match-string 231 s)))))) ;;; Property API diff --git a/testing/org-test.el b/testing/org-test.el index 22ac60670..ced281e23 100644 --- a/testing/org-test.el +++ b/testing/org-test.el @@ -547,6 +547,31 @@ TIME can be a non-nil Lisp time value, or a string specifying a date and time." ,@body) (nreverse messages))) +(defconst org-test-day-of-weeks-seconds + [121223891 ; Sun + 30000000 ; Mon + 2222222 ; Tue + 500000 ; Wed + 1000 ; Thu + 89173 ; Fri + 666666666] ; Sat + "Epoch seconds for generating days of week strings. +Starts at Sunday, ends at Saturday.") + +(defconst org-test-day-of-weeks-abbrev + (apply #'vector + (seq-map (apply-partially #'format-time-string "%a") + org-test-day-of-weeks-seconds)) + "Vector of abbreviated names of days of week. +See `org-test-day-of-weeks-seconds'.") + +(defconst org-test-day-of-weeks-full + (apply #'vector + (seq-map (apply-partially #'format-time-string "%A") + org-test-day-of-weeks-seconds)) + "Vector of full names for days of week. +See `org-test-day-of-weeks-seconds'.") + (provide 'org-test) ;;; org-test.el ends here -- 2.40.0