aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2016-06-20 17:11:59 -0400
committerJunio C Hamano <gitster@pobox.com>2016-06-20 15:08:07 -0700
commit36d6792157cc064607147b942c80bc3716dd339b (patch)
tree9a9489b45088bb2f6abd7e4a0278347ef7657483
parentfdba2cdec47b1760422107c671feef1d2a57b8af (diff)
downloadgit-36d6792157cc064607147b942c80bc3716dd339b.tar.gz
git-36d6792157cc064607147b942c80bc3716dd339b.tar.xz
t0006: test various date formats
We ended up testing some of these date formats throughout the rest of the suite (e.g., via for-each-ref's "$(authordate:...)" format), but we never did so systematically. t0006 is the right place for unit-testing of our date-handling code. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xt/t0006-date.sh21
-rw-r--r--test-date.c26
2 files changed, 47 insertions, 0 deletions
diff --git a/t/t0006-date.sh b/t/t0006-date.sh
index fa05269e5..57033ddcd 100755
--- a/t/t0006-date.sh
+++ b/t/t0006-date.sh
@@ -27,6 +27,27 @@ check_relative 630000000 '20 years ago'
check_relative 31449600 '12 months ago'
check_relative 62985600 '2 years ago'
+check_show () {
+ format=$1
+ time=$2
+ expect=$3
+ test_expect_${4:-success} "show date ($format:$time)" '
+ echo "$time -> $expect" >expect &&
+ test-date show:$format "$time" >actual &&
+ test_cmp expect actual
+ '
+}
+
+# arbitrary but sensible time for examples
+TIME='1466000000 +0200'
+check_show iso8601 "$TIME" '2016-06-15 16:13:20 +0200'
+check_show iso8601-strict "$TIME" '2016-06-15T16:13:20+02:00'
+check_show rfc2822 "$TIME" 'Wed, 15 Jun 2016 16:13:20 +0200'
+check_show short "$TIME" '2016-06-15'
+check_show default "$TIME" 'Wed Jun 15 16:13:20 2016 +0200'
+check_show raw "$TIME" '1466000000 +0200'
+check_show iso-local "$TIME" '2016-06-15 14:13:20 +0000'
+
check_parse() {
echo "$1 -> $2" >expect
test_expect_${4:-success} "parse date ($1${3:+ TZ=$3})" "
diff --git a/test-date.c b/test-date.c
index 8ebcdedbf..d9ab36090 100644
--- a/test-date.c
+++ b/test-date.c
@@ -2,6 +2,7 @@
static const char *usage_msg = "\n"
" test-date relative [time_t]...\n"
+" test-date show:<format> [time_t]...\n"
" test-date parse [date]...\n"
" test-date approxidate [date]...\n";
@@ -17,6 +18,29 @@ static void show_relative_dates(char **argv, struct timeval *now)
strbuf_release(&buf);
}
+static void show_dates(char **argv, const char *format)
+{
+ struct date_mode mode;
+
+ parse_date_format(format, &mode);
+ for (; *argv; argv++) {
+ char *arg = *argv;
+ time_t t;
+ int tz;
+
+ /*
+ * Do not use our normal timestamp parsing here, as the point
+ * is to test the formatting code in isolation.
+ */
+ t = strtol(arg, &arg, 10);
+ while (*arg == ' ')
+ arg++;
+ tz = atoi(arg);
+
+ printf("%s -> %s\n", *argv, show_date(t, tz, &mode));
+ }
+}
+
static void parse_dates(char **argv, struct timeval *now)
{
struct strbuf result = STRBUF_INIT;
@@ -63,6 +87,8 @@ int main(int argc, char **argv)
usage(usage_msg);
if (!strcmp(*argv, "relative"))
show_relative_dates(argv+1, &now);
+ else if (skip_prefix(*argv, "show:", &x))
+ show_dates(argv+1, x);
else if (!strcmp(*argv, "parse"))
parse_dates(argv+1, &now);
else if (!strcmp(*argv, "approxidate"))