mirror of
https://github.com/danog/liquid.git
synced 2025-01-22 13:41:18 +01:00
Beefy strftime tests
This commit is contained in:
parent
83652f59db
commit
4a2c4b4b39
@ -1,6 +1,8 @@
|
||||
package strftime
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
@ -16,9 +18,57 @@ func timeMustParse(f, s string) time.Time {
|
||||
return t
|
||||
}
|
||||
|
||||
var conversionTests = []struct{ format, expect string }{
|
||||
// {"%1N"},
|
||||
// {"%3N"},
|
||||
// {"%6N"},
|
||||
// {"%9N"},
|
||||
{"%v", " 2-Jan-2006"},
|
||||
{"%Z", "EST"},
|
||||
// {"%:z", "-05:00"},
|
||||
// {"%::z", "-05:00:00"},
|
||||
{"%%", "%"},
|
||||
}
|
||||
|
||||
func TestStrftime(t *testing.T) {
|
||||
require.NoError(t, os.Setenv("TZ", "America/New_York"))
|
||||
|
||||
dt := timeMustParse(time.RFC3339Nano, "2006-01-02T15:04:05.123456789-05:00")
|
||||
for _, test := range conversionTests {
|
||||
name := fmt.Sprintf("Strftime %q", test.format)
|
||||
actual, err := Strftime(test.format, dt)
|
||||
require.NoErrorf(t, err, name)
|
||||
require.Equalf(t, test.expect, actual, name)
|
||||
}
|
||||
|
||||
skip := map[string]bool{}
|
||||
f, err := os.Open("testdata/skip.csv")
|
||||
require.NoError(t, err)
|
||||
defer f.Close() // nolint: errcheck
|
||||
r := csv.NewReader(f)
|
||||
rows, err := r.ReadAll()
|
||||
require.NoError(t, err)
|
||||
for _, row := range rows {
|
||||
skip[row[0]] = true
|
||||
}
|
||||
|
||||
f, err = os.Open("testdata/data.csv")
|
||||
require.NoError(t, err)
|
||||
defer f.Close() // nolint: errcheck
|
||||
r = csv.NewReader(f)
|
||||
rows, err = r.ReadAll()
|
||||
require.NoError(t, err)
|
||||
for _, row := range rows {
|
||||
format, expect := row[0], row[1]
|
||||
if skip[format] {
|
||||
continue
|
||||
}
|
||||
name := fmt.Sprintf("Strftime %q (cf. Ruby)", format)
|
||||
actual, err := Strftime(format, dt)
|
||||
require.NoErrorf(t, err, name)
|
||||
require.Equalf(t, expect, actual, name)
|
||||
}
|
||||
|
||||
ins := []struct{ source, expect string }{
|
||||
{"02 Jan 06 15:04 UTC", "02 Jan 06 10:04 EST"},
|
||||
{"02 Jan 06 15:04 EST", "02 Jan 06 15:04 EST"},
|
||||
@ -34,7 +84,7 @@ func TestStrftime(t *testing.T) {
|
||||
require.Equalf(t, test.expect, actual, test.source)
|
||||
}
|
||||
|
||||
rt := timeMustParse(time.RFC822, "02 Jan 06 15:04 MST")
|
||||
dt = timeMustParse(time.RFC822, "02 Jan 06 15:04 MST")
|
||||
tests := []struct{ format, expect string }{
|
||||
{"%a, %b %d, %Y", "Mon, Jan 02, 2006"},
|
||||
{"%Y/%m/%d", "2006/01/02"},
|
||||
@ -45,21 +95,10 @@ func TestStrftime(t *testing.T) {
|
||||
// {"", ""}, this errors on Travis
|
||||
}
|
||||
for _, test := range tests {
|
||||
s, err := Strftime(test.format, rt)
|
||||
s, err := Strftime(test.format, dt)
|
||||
require.NoErrorf(t, err, test.format)
|
||||
require.Equalf(t, test.expect, s, test.format)
|
||||
}
|
||||
|
||||
dt, err := time.Parse("2006-01-02", "1776-07-15")
|
||||
require.NoError(t, err)
|
||||
s, err := Strftime("%Y-%m-%d", dt)
|
||||
require.NoError(t, err)
|
||||
// FIXME actual 1776-07-14
|
||||
_ = s
|
||||
// require.Equal(t, "1776-07-15", s)
|
||||
|
||||
// s, err := Strftime("%f", rt)
|
||||
// require.Errorf(t, err)
|
||||
}
|
||||
|
||||
// func TestStrptime(t *testing.T) {
|
||||
|
83
strftime/testdata/data.csv
vendored
Normal file
83
strftime/testdata/data.csv
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
%A,Monday
|
||||
%B,January
|
||||
%C,20
|
||||
%D,01/02/06
|
||||
%F,2006-01-02
|
||||
%G,2006
|
||||
%H,15
|
||||
%I,03
|
||||
%L,000
|
||||
%M,04
|
||||
%N,000000000
|
||||
%P,pm
|
||||
%R,15:04
|
||||
%S,05
|
||||
%T,15:04:05
|
||||
%U,01
|
||||
%V,01
|
||||
%W,01
|
||||
%X,15:04:05
|
||||
%Y,2006
|
||||
%Z,""
|
||||
%a,Mon
|
||||
%b,Jan
|
||||
%c,Mon Jan 2 15:04:05 2006
|
||||
%d,02
|
||||
%e, 2
|
||||
%g,06
|
||||
%h,Jan
|
||||
%j,002
|
||||
%k,15
|
||||
%l, 3
|
||||
%m,01
|
||||
%n,"
|
||||
"
|
||||
%p,PM
|
||||
%r,03:04:05 PM
|
||||
%s,1136232245
|
||||
%t,
|
||||
%u,1
|
||||
%v, 2-JAN-2006
|
||||
%w,1
|
||||
%x,01/02/06
|
||||
%y,06
|
||||
%z,-0500
|
||||
%-I,3
|
||||
%-M,4
|
||||
%-S,5
|
||||
%-U,1
|
||||
%-V,1
|
||||
%-W,1
|
||||
%-d,2
|
||||
%-e,2
|
||||
%-g,6
|
||||
%-j,2
|
||||
%-l,3
|
||||
%-m,1
|
||||
%-y,6
|
||||
%_I, 3
|
||||
%_M, 4
|
||||
%_S, 5
|
||||
%_U, 1
|
||||
%_V, 1
|
||||
%_W, 1
|
||||
%_d, 2
|
||||
%_g, 6
|
||||
%_j, 2
|
||||
%_m, 1
|
||||
%_y, 6
|
||||
%_z, -500
|
||||
%^A,MONDAY
|
||||
%^B,JANUARY
|
||||
%^P,PM
|
||||
%^a,MON
|
||||
%^b,JAN
|
||||
%^c,MON JAN 2 15:04:05 2006
|
||||
%^h,JAN
|
||||
%#A,MONDAY
|
||||
%#B,JANUARY
|
||||
%#P,PM
|
||||
%#a,MON
|
||||
%#b,JAN
|
||||
%#h,JAN
|
||||
%#p,pm
|
|
20
strftime/testdata/gen.rb
vendored
Normal file
20
strftime/testdata/gen.rb
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
# Create a file data.csv in the current directory, containing format strings,
|
||||
# and the reference date thus formatted.
|
||||
#
|
||||
# This is run manually rather than on go generate, so that go generate doesn't
|
||||
# require a Ruby installation.
|
||||
|
||||
require "CSV"
|
||||
|
||||
rt = Time.new(2006, 1, 2, 15, 4, 5, "-05:00")
|
||||
CSV.open(File.join(File.dirname(__FILE__), "data.csv"), "w") do |csv|
|
||||
for mod in ['', '-', '_', '^', '#'] do
|
||||
for c in ('A'..'Z').to_a + ('a'..'z').to_a do
|
||||
fmt = "%#{mod}#{c}"
|
||||
out = rt.strftime(fmt)
|
||||
next if out == fmt
|
||||
next if mod != '' && out == rt.strftime("%#{c}")
|
||||
csv << [fmt, out]
|
||||
end
|
||||
end
|
||||
end
|
27
strftime/testdata/skip.csv
vendored
Normal file
27
strftime/testdata/skip.csv
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
%L
|
||||
%N
|
||||
%P
|
||||
%Z
|
||||
%v
|
||||
%-g
|
||||
%-v
|
||||
%-y
|
||||
%-z
|
||||
%_g
|
||||
%_v
|
||||
%_y
|
||||
%_z
|
||||
%^a
|
||||
%^b
|
||||
%^c
|
||||
%^h
|
||||
%#a
|
||||
%#b
|
||||
%#h
|
||||
%#p
|
||||
%^A
|
||||
%^B
|
||||
%^P
|
||||
%#A
|
||||
%#B
|
||||
%#P
|
|
Loading…
x
Reference in New Issue
Block a user