Refactor `org-time-stamp-custom-formats' and `org-time-stamp-formats'

* lisp/org.el (org-time-stamp-formats):
* lisp/org.el (org-time-stamp-custom-formats): Change the default
values stripping leading "<" and trailing ">".  Update the docstring
explaining the format and that leading and trailing brackets are now
ignored.  Update the :type specification to more precise.
(org-time-stamp-format): Update the argument list and docstring
allowing to use the function more flexibly to find the time stamp
format for both `org-time-stamp-formats' and
`org-time-stamp-custom-formats'.  Rename `long' argument to more
accurate `with-time'.  Ignore brackets in the `org-time-stamp-formats'
and `org-time-stamp-custom-formats'.  Allow `inactive' argument to be
`no-brackets'
(org-format-timestamp):
(org-read-date-display):
(org-insert-time-stamp):
(org-display-custom-time):
(org-timestamp-translate):
* lisp/org-compat.el (org-timestamp-format): Rename
`org-timestamp-format' to `org-format-timestamp'.  The old variant is
too similar with other `org-time-stamp-format' function.  Also, use
`org-time-stamp-format' to determine the timestamp format instead of
using `org-time-stamp-formats' directly.
* lisp/ol.el (org-store-link):
* lisp/org-agenda.el (org-agenda-get-timestamps):
(org-agenda-get-progress):
* lisp/org-archive.el (org-archive-subtree):
(org-archive-to-archive-sibling):
* lisp/org-clock.el (org-clock-special-range):
* lisp/org-colview.el (org-colview-construct-allowed-dates):
* lisp/org-element.el (org-element-timestamp-interpreter):
* lisp/org-macro.el (org-macro--find-date):
* lisp/org-pcomplete.el (pcomplete/org-mode/file-option/date):
* lisp/ox-odt.el (org-odt--format-timestamp):
(org-odt-template):
* lisp/ox.el (org-export-get-date):
* testing/lisp/test-org.el (test-org/timestamp-format): Use
`org-time-stamp-format' instead of directly examining
`org-time-stamp-custom-formats' and `org-time-stamp-formats'.  Use the
new function name `org-format-timestamp'.
* etc/ORG-NEWS (Default values and interpretations of ~org-time-stamp-formats~ and ~org-time-stamp-custom-formats~ are changed):
(~org-timestamp-format~ is renamed to ~org-format-timestamp~):
(Updated argument list in ~org-time-stamp-format~): Document the
user-facing changes.

This commit documents and unifies previously undocumented assumptions
about the values of `org-time-stamp-formats' and
`org-time-stamp-custom-formats'.  Instead of fiddling with
leading/trailing brackets in the values, expedite the time format
calculation to `org-time-stamp-format'.  The undocumented assumption
about brackets in user option `org-time-stamp-custom-formats' is not
relaxed making the docstring correct.

Reported-by: Uwe Brauer <oub@mat.ucm.es>
Link: https://orgmode.org/list/87k04ppp1t.fsf@localhost
This commit is contained in:
Ihor Radchenko 2022-11-07 15:05:37 +08:00
parent 155dc778e8
commit e3a7c01874
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
14 changed files with 118 additions and 66 deletions

View File

@ -460,6 +460,36 @@ exported and an ASCII graph will be inserted below the src block.
The new variable name is =org-plantuml-args=. It now applies to both The new variable name is =org-plantuml-args=. It now applies to both
jar PlantUML file and executable. jar PlantUML file and executable.
*** Default values and interpretations of ~org-time-stamp-formats~ and ~org-time-stamp-custom-formats~ are changed
Leading =<= and trailing =>= in the default values of
~org-time-stamp-formats~ and ~org-time-stamp-custom-formats~ are
stripped.
The Org functions that are using these variables also ignore leading
and trailing brackets (=<...>= and =[...]=, if present).
This change makes the Org code more consistent and also makes the
docstring for ~org-time-stamp-custom-formats~ accurate.
No changes on the user side are needed if
~org-time-stamp-custom-formats~ was customized.
*** ~org-timestamp-format~ is renamed to ~org-format-timestamp~
The old function name is similar to other ~org-time-stamp-format~
function. The new name emphasizes that ~org-format-timestamp~ works
on =timestamp= objects.
*** Updated argument list in ~org-time-stamp-format~
New =custom= argument in ~org-time-stamp-format~ makes the function
use ~org-time-stamp-custom-formats~ instead of
~org-time-stamp-formats~ to determine the format.
Optional argument =long= is renamed to =with-time=, emphasizing that it refers to time stamp format with time specification.
Optional argument =inactive= can now have a value =no-brackets= to
return format string with brackets stripped.
** Miscellaneous ** Miscellaneous
*** SQL Babel ~:dbconnection~ parameter can be mixed with other SQL Babel parameters *** SQL Babel ~:dbconnection~ parameter can be mixed with other SQL Babel parameters

View File

@ -42,7 +42,6 @@
(defvar org-inhibit-startup) (defvar org-inhibit-startup)
(defvar org-outline-regexp-bol) (defvar org-outline-regexp-bol)
(defvar org-src-source-file-name) (defvar org-src-source-file-name)
(defvar org-time-stamp-formats)
(defvar org-ts-regexp) (defvar org-ts-regexp)
(declare-function calendar-cursor-to-date "calendar" (&optional error event)) (declare-function calendar-cursor-to-date "calendar" (&optional error event))
@ -1620,7 +1619,7 @@ non-nil."
(let ((cd (calendar-cursor-to-date))) (let ((cd (calendar-cursor-to-date)))
(setq link (setq link
(format-time-string (format-time-string
(car org-time-stamp-formats) (org-time-stamp-format)
(org-encode-time 0 0 0 (nth 1 cd) (nth 0 cd) (nth 2 cd)))) (org-encode-time 0 0 0 (nth 1 cd) (nth 0 cd) (nth 2 cd))))
(org-link-store-props :type "calendar" :date cd))) (org-link-store-props :type "calendar" :date cd)))

View File

@ -5809,7 +5809,7 @@ displayed in agenda view."
(regexp-quote (regexp-quote
(substring (substring
(format-time-string (format-time-string
(car org-time-stamp-formats) (org-time-stamp-format)
(org-encode-time ; DATE bound by calendar (org-encode-time ; DATE bound by calendar
0 0 0 (nth 1 date) (car date) (nth 2 date))) 0 0 0 (nth 1 date) (car date) (nth 2 date)))
1 11)) 1 11))
@ -6092,7 +6092,7 @@ then those holidays will be skipped."
(regexp-quote (regexp-quote
(substring (substring
(format-time-string (format-time-string
(car org-time-stamp-formats) (org-time-stamp-format)
(org-encode-time ; DATE bound by calendar (org-encode-time ; DATE bound by calendar
0 0 0 (nth 1 date) (car date) (nth 2 date))) 0 0 0 (nth 1 date) (car date) (nth 2 date)))
1 11)))) 1 11))))

View File

@ -239,7 +239,7 @@ direct children of this heading."
(tr-org-odd-levels-only org-odd-levels-only) (tr-org-odd-levels-only org-odd-levels-only)
(this-buffer (current-buffer)) (this-buffer (current-buffer))
(time (format-time-string (time (format-time-string
(substring (cdr org-time-stamp-formats) 1 -1))) (org-time-stamp-format 'with-time 'no-brackets)))
(file (abbreviate-file-name (file (abbreviate-file-name
(or (buffer-file-name (buffer-base-buffer)) (or (buffer-file-name (buffer-base-buffer))
(error "No file associated to buffer")))) (error "No file associated to buffer"))))
@ -490,7 +490,7 @@ Archiving time is retained in the ARCHIVE_TIME node property."
(org-set-property (org-set-property
"ARCHIVE_TIME" "ARCHIVE_TIME"
(format-time-string (format-time-string
(substring (cdr org-time-stamp-formats) 1 -1))) (org-time-stamp-format 'with-time 'no-brackets)))
(outline-up-heading 1 t) (outline-up-heading 1 t)
(org-fold-subtree t) (org-fold-subtree t)
(org-cycle-show-empty-lines 'folded) (org-cycle-show-empty-lines 'folded)

View File

@ -55,7 +55,6 @@
(defvar org-frame-title-format-backup nil) (defvar org-frame-title-format-backup nil)
(defvar org-state) (defvar org-state)
(defvar org-link-bracket-re) (defvar org-link-bracket-re)
(defvar org-time-stamp-formats)
(defgroup org-clock nil (defgroup org-clock nil
"Options concerning clocking working time in Org mode." "Options concerning clocking working time in Org mode."
@ -2388,7 +2387,7 @@ have priority."
(`interactive "(Range interactively set)") (`interactive "(Range interactively set)")
(`untilnow "now")))) (`untilnow "now"))))
(if (not as-strings) (list start end text) (if (not as-strings) (list start end text)
(let ((f (cdr org-time-stamp-formats))) (let ((f (org-time-stamp-format 'with-time)))
(list (and start (format-time-string f start)) (list (and start (format-time-string f start))
(format-time-string f end) (format-time-string f end)
text)))))) text))))))

View File

@ -777,9 +777,8 @@ around it."
(when (and s (string-match (concat "^" org-ts-regexp3 "$") s)) (when (and s (string-match (concat "^" org-ts-regexp3 "$") s))
(let* ((time (org-parse-time-string s 'nodefaults)) (let* ((time (org-parse-time-string s 'nodefaults))
(active (equal (string-to-char s) ?<)) (active (equal (string-to-char s) ?<))
(fmt (funcall (if (nth 1 time) 'cdr 'car) org-time-stamp-formats)) (fmt (org-time-stamp-format (nth 1 time) (not active)))
time-before time-after) time-before time-after)
(unless active (setq fmt (concat "[" (substring fmt 1 -1) "]")))
(setf (car time) (or (car time) 0)) (setf (car time) (or (car time) 0))
(setf (nth 1 time) (or (nth 1 time) 0)) (setf (nth 1 time) (or (nth 1 time) 0))
(setf (nth 2 time) (or (nth 2 time) 0)) (setf (nth 2 time) (or (nth 2 time) 0))

View File

@ -384,6 +384,8 @@ Counting starts at 1."
(define-obsolete-function-alias 'org-string-match-p 'string-match-p "9.0") (define-obsolete-function-alias 'org-string-match-p 'string-match-p "9.0")
;;;; Functions and variables from previous releases now obsolete. ;;;; Functions and variables from previous releases now obsolete.
(define-obsolete-function-alias 'org-timestamp-format
'org-format-timestamp "Org 9.6")
(define-obsolete-variable-alias 'org-export-before-processing-hook (define-obsolete-variable-alias 'org-export-before-processing-hook
'org-export-before-processing-functions "Org 9.6") 'org-export-before-processing-functions "Org 9.6")
(define-obsolete-variable-alias 'org-export-before-parsing-hook (define-obsolete-variable-alias 'org-export-before-parsing-hook

View File

@ -95,7 +95,6 @@
(defvar org-property-re) (defvar org-property-re)
(defvar org-src-preserve-indentation) (defvar org-src-preserve-indentation)
(defvar org-tags-column) (defvar org-tags-column)
(defvar org-time-stamp-formats)
(defvar org-todo-regexp) (defvar org-todo-regexp)
(defvar org-ts-regexp-both) (defvar org-ts-regexp-both)
@ -4033,8 +4032,7 @@ Assume point is at the beginning of the timestamp."
;; the repeater string, if any. ;; the repeater string, if any.
(lambda (time activep &optional with-time-p hour-end minute-end) (lambda (time activep &optional with-time-p hour-end minute-end)
(let ((ts (format-time-string (let ((ts (format-time-string
(funcall (if with-time-p #'cdr #'car) (org-time-stamp-format with-time-p)
org-time-stamp-formats)
time))) time)))
(when (and hour-end minute-end) (when (and hour-end minute-end)
(string-match "[012]?[0-9]:[0-5][0-9]" ts) (string-match "[012]?[0-9]:[0-5][0-9]" ts)

View File

@ -368,7 +368,7 @@ Return value as a string."
(not (cdr date)) (not (cdr date))
(eq 'timestamp (org-element-type (car date)))) (eq 'timestamp (org-element-type (car date))))
(format "(eval (if (org-string-nw-p $1) %s %S))" (format "(eval (if (org-string-nw-p $1) %s %S))"
(format "(org-timestamp-format '%S $1)" (format "(org-format-timestamp '%S $1)"
(org-element-copy (car date))) (org-element-copy (car date)))
value) value)
value))) value)))

View File

@ -70,7 +70,6 @@
(defvar org-property-re) (defvar org-property-re)
(defvar org-startup-options) (defvar org-startup-options)
(defvar org-tag-re) (defvar org-tag-re)
(defvar org-time-stamp-formats)
(defvar org-todo-keywords-1) (defvar org-todo-keywords-1)
(defvar org-todo-line-regexp) (defvar org-todo-line-regexp)
@ -230,7 +229,7 @@ When completing for #+STARTUP, for example, this function returns
(defun pcomplete/org-mode/file-option/date () (defun pcomplete/org-mode/file-option/date ()
"Complete arguments for the #+DATE file option." "Complete arguments for the #+DATE file option."
(pcomplete-here (list (format-time-string (car org-time-stamp-formats))))) (pcomplete-here (list (format-time-string (org-time-stamp-format)))))
(defun pcomplete/org-mode/file-option/email () (defun pcomplete/org-mode/file-option/email ()
"Complete arguments for the #+EMAIL file option." "Complete arguments for the #+EMAIL file option."

View File

@ -468,8 +468,17 @@ The time stamps may be either active or inactive.")
"Regular expression for specifying repeated events. "Regular expression for specifying repeated events.
After a match, group 1 contains the repeat expression.") After a match, group 1 contains the repeat expression.")
(defconst org-time-stamp-formats '("<%Y-%m-%d %a>" . "<%Y-%m-%d %a %H:%M>") (defconst org-time-stamp-formats '("%Y-%m-%d %a" . "%Y-%m-%d %a %H:%M")
"Formats for `format-time-string' which are used for time stamps.") "Formats for `format-time-string' which are used for time stamps.
The value is a cons cell containing two strings. The `car' and `cdr'
of the cons cell are used to format time stamps that do not and do
contain time, respectively.
Leading \"<\"/\"[\" and trailing \">\"/\"]\" pair will be stripped
from the format strings.
Also, see `org-time-stamp-format'.")
;;;; Clock and Planning ;;;; Clock and Planning
@ -2416,22 +2425,48 @@ To turn this on on a per-file basis, insert anywhere in the file:
(make-variable-buffer-local 'org-display-custom-times) (make-variable-buffer-local 'org-display-custom-times)
(defcustom org-time-stamp-custom-formats (defcustom org-time-stamp-custom-formats
'("<%m/%d/%y %a>" . "<%m/%d/%y %a %H:%M>") ; american '("%m/%d/%y %a" . "%m/%d/%y %a %H:%M") ; american
"Custom formats for time stamps. See `format-time-string' for the syntax. "Custom formats for time stamps.
See `format-time-string' for the syntax.
These are overlaid over the default ISO format if the variable These are overlaid over the default ISO format if the variable
`org-display-custom-times' is set. Time like %H:%M should be at the `org-display-custom-times' is set. Time like %H:%M should be at the
end of the second format. The custom formats are also honored by export end of the second format. The custom formats are also honored by export
commands, if custom time display is turned on at the time of export." commands, if custom time display is turned on at the time of export.
:group 'org-time
:type 'sexp)
(defun org-time-stamp-format (&optional long inactive) Leading \"<\" and trailing \">\" pair will be stripped from the format
"Get the right format for a time string." strings."
(let ((f (if long (cdr org-time-stamp-formats) :group 'org-time
(car org-time-stamp-formats)))) :type '(cons string string))
(if inactive
(concat "[" (substring f 1 -1) "]") (defun org-time-stamp-format (&optional with-time inactive custom)
f))) "Get timestamp format for a time string.
The format is based on `org-time-stamp-formats' (if CUSTOM is nil) or or
`org-time-stamp-custom-formats' (if CUSTOM if non-nil).
When optional argument WITH-TIME is non-nil, the timestamp will contain
time.
When optional argument INACTIVE is nil, format active timestamp.
When `no-brackets', strip timestamp brackets.
Otherwise, format inactive timestamp."
(let ((format (funcall
(if with-time #'cdr #'car)
(if custom
org-time-stamp-custom-formats
org-time-stamp-formats))))
;; Strip brackets, if any.
(when (or (and (string-prefix-p "<" format)
(string-suffix-p ">" format))
(and (string-prefix-p "[" format)
(string-suffix-p "]" format)))
(setq format (substring format 1 -1)))
(pcase inactive
(`no-brackets format)
(`nil (concat "<" format ">"))
(_ (concat "[" format "]")))))
(defcustom org-deadline-warning-days 14 (defcustom org-deadline-warning-days 14
"Number of days before expiration during which a deadline becomes active. "Number of days before expiration during which a deadline becomes active.
@ -13733,23 +13768,20 @@ user."
(save-excursion (save-excursion
(end-of-line 1) (end-of-line 1)
(while (not (equal (buffer-substring (while (not (equal (buffer-substring
(max (point-min) (- (point) 4)) (point)) (max (point-min) (- (point) 4)) (point))
" ")) " "))
(insert " "))) (insert " ")))
(let* ((ans (concat (buffer-substring (line-beginning-position) (let* ((ans (concat (buffer-substring (line-beginning-position)
(point-max)) (point-max))
" " (or org-ans1 org-ans2))) " " (or org-ans1 org-ans2)))
(org-end-time-was-given nil) (org-end-time-was-given nil)
(f (org-read-date-analyze ans org-def org-defdecode)) (f (org-read-date-analyze ans org-def org-defdecode))
(fmts (if org-display-custom-times (fmt (org-time-stamp-format
org-time-stamp-custom-formats (or org-with-time
org-time-stamp-formats)) (and (boundp 'org-time-was-given) org-time-was-given))
(fmt (if (or org-with-time org-read-date-inactive
(and (boundp 'org-time-was-given) org-time-was-given)) org-display-custom-times))
(cdr fmts)
(car fmts)))
(txt (format-time-string fmt (org-encode-time f))) (txt (format-time-string fmt (org-encode-time f)))
(txt (if org-read-date-inactive (concat "[" (substring txt 1 -1) "]") txt))
(txt (concat "=> " txt))) (txt (concat "=> " txt)))
(when (and org-end-time-was-given (when (and org-end-time-was-given
(string-match org-plain-time-of-day-regexp txt)) (string-match org-plain-time-of-day-regexp txt))
@ -14078,9 +14110,8 @@ PRE and POST are optional strings to be inserted before and after the
stamp. stamp.
The command returns the inserted time stamp." The command returns the inserted time stamp."
(org-fold-core-ignore-modifications (org-fold-core-ignore-modifications
(let ((fmt (funcall (if with-hm 'cdr 'car) org-time-stamp-formats)) (let ((fmt (org-time-stamp-format with-hm inactive))
stamp) stamp)
(when inactive (setq fmt (concat "[" (substring fmt 1 -1) "]")))
(insert-before-markers-and-inherit (or pre "")) (insert-before-markers-and-inherit (or pre ""))
(when (listp extra) (when (listp extra)
(setq extra (car extra)) (setq extra (car extra))
@ -14125,11 +14156,10 @@ The command returns the inserted time stamp."
(setq off (- (match-end 0) (match-beginning 0))))) (setq off (- (match-end 0) (match-beginning 0)))))
(setq end (- end off)) (setq end (- end off))
(setq with-hm (and (nth 1 t1) (nth 2 t1)) (setq with-hm (and (nth 1 t1) (nth 2 t1))
tf (funcall (if with-hm 'cdr 'car) org-time-stamp-custom-formats) tf (org-time-stamp-format with-hm 'no-brackets 'custom)
time (org-fix-decoded-time t1) time (org-fix-decoded-time t1)
str (org-add-props str (org-add-props
(format-time-string (format-time-string tf (org-encode-time time))
(substring tf 1 -1) (org-encode-time time))
nil 'mouse-face 'highlight)) nil 'mouse-face 'highlight))
(put-text-property beg end 'display str))) (put-text-property beg end 'display str)))
@ -19729,7 +19759,7 @@ Otherwise, use its start."
"Non-nil when TIMESTAMP has a time specified." "Non-nil when TIMESTAMP has a time specified."
(org-element-property :hour-start timestamp)) (org-element-property :hour-start timestamp))
(defun org-timestamp-format (timestamp format &optional end utc) (defun org-format-timestamp (timestamp format &optional end utc)
"Format a TIMESTAMP object into a string. "Format a TIMESTAMP object into a string.
FORMAT is a format specifier to be passed to FORMAT is a format specifier to be passed to
@ -19790,13 +19820,13 @@ it has a `diary' type."
(let ((type (org-element-property :type timestamp))) (let ((type (org-element-property :type timestamp)))
(if (or (not org-display-custom-times) (eq type 'diary)) (if (or (not org-display-custom-times) (eq type 'diary))
(org-element-interpret-data timestamp) (org-element-interpret-data timestamp)
(let ((fmt (funcall (if (org-timestamp-has-time-p timestamp) #'cdr #'car) (let ((fmt (org-time-stamp-format
org-time-stamp-custom-formats))) (org-timestamp-has-time-p timestamp) nil 'custom)))
(if (and (not boundary) (memq type '(active-range inactive-range))) (if (and (not boundary) (memq type '(active-range inactive-range)))
(concat (org-timestamp-format timestamp fmt) (concat (org-format-timestamp timestamp fmt)
"--" "--"
(org-timestamp-format timestamp fmt t)) (org-format-timestamp timestamp fmt t))
(org-timestamp-format timestamp fmt (eq boundary 'end))))))) (org-format-timestamp timestamp fmt (eq boundary 'end)))))))
;;; Other stuff ;;; Other stuff

View File

@ -920,7 +920,7 @@ See `org-odt--build-date-styles' for implementation details."
(let* ((format-timestamp (let* ((format-timestamp
(lambda (timestamp format &optional end utc) (lambda (timestamp format &optional end utc)
(if timestamp (if timestamp
(org-timestamp-format timestamp format end utc) (org-format-timestamp timestamp format end utc)
(format-time-string format nil utc)))) (format-time-string format nil utc))))
(has-time-p (or (not timestamp) (has-time-p (or (not timestamp)
(org-timestamp-has-time-p timestamp))) (org-timestamp-has-time-p timestamp)))
@ -936,14 +936,8 @@ See `org-odt--build-date-styles' for implementation details."
;; don't bother about formatting the date contents to be ;; don't bother about formatting the date contents to be
;; compatible with "OrgDate1" and "OrgDateTime" styles. A ;; compatible with "OrgDate1" and "OrgDateTime" styles. A
;; simple Org-style date should suffice. ;; simple Org-style date should suffice.
(date (let* ((formats (date (let ((format (org-time-stamp-format
(if org-display-custom-times has-time-p 'no-brackets 'custom)))
(cons (substring
(car org-time-stamp-custom-formats) 1 -1)
(substring
(cdr org-time-stamp-custom-formats) 1 -1))
'("%Y-%m-%d %a" . "%Y-%m-%d %a %H:%M")))
(format (if has-time-p (cdr formats) (car formats))))
(funcall format-timestamp timestamp format end))) (funcall format-timestamp timestamp format end)))
(repeater (let ((repeater-type (org-element-property (repeater (let ((repeater-type (org-element-property
:repeater-type timestamp)) :repeater-type timestamp))
@ -1422,8 +1416,10 @@ original parsed data. INFO is a plist holding export options."
;; value before moving on to temp-buffer context down below. ;; value before moving on to temp-buffer context down below.
(custom-time-fmts (custom-time-fmts
(if org-display-custom-times (if org-display-custom-times
(cons (substring (car org-time-stamp-custom-formats) 1 -1) (cons (org-time-stamp-format
(substring (cdr org-time-stamp-custom-formats) 1 -1)) nil 'no-brackets 'custom)
(org-time-stamp-format
'with-time 'no-brackets 'custom))
'("%Y-%M-%d %a" . "%Y-%M-%d %a %H:%M")))) '("%Y-%M-%d %a" . "%Y-%M-%d %a %H:%M"))))
(with-temp-buffer (with-temp-buffer
(insert-file-contents (insert-file-contents

View File

@ -4196,7 +4196,7 @@ meant to be translated with `org-export-data' or alike."
((and fmt ((and fmt
(not (cdr date)) (not (cdr date))
(eq (org-element-type (car date)) 'timestamp)) (eq (org-element-type (car date)) 'timestamp))
(org-timestamp-format (car date) fmt)) (org-format-timestamp (car date) fmt))
(t date)))) (t date))))

View File

@ -8279,19 +8279,19 @@ CLOSED: %s
(should-not (org-get-repeat "<2012-03-29 Thu 16:40>"))) (should-not (org-get-repeat "<2012-03-29 Thu 16:40>")))
(ert-deftest test-org/timestamp-format () (ert-deftest test-org/timestamp-format ()
"Test `org-timestamp-format' specifications." "Test `org-format-timestamp' specifications."
;; Regular test. ;; Regular test.
(should (should
(equal (equal
"2012-03-29 16:40" "2012-03-29 16:40"
(org-test-with-temp-text "<2012-03-29 Thu 16:40>" (org-test-with-temp-text "<2012-03-29 Thu 16:40>"
(org-timestamp-format (org-element-context) "%Y-%m-%d %R")))) (org-format-timestamp (org-element-context) "%Y-%m-%d %R"))))
;; Range end. ;; Range end.
(should (should
(equal (equal
"2012-03-29" "2012-03-29"
(org-test-with-temp-text "[2011-07-14 Thu]--[2012-03-29 Thu]" (org-test-with-temp-text "[2011-07-14 Thu]--[2012-03-29 Thu]"
(org-timestamp-format (org-element-context) "%Y-%m-%d" t))))) (org-format-timestamp (org-element-context) "%Y-%m-%d" t)))))
(ert-deftest test-org/timestamp-split-range () (ert-deftest test-org/timestamp-split-range ()
"Test `org-timestamp-split-range' specifications." "Test `org-timestamp-split-range' specifications."