package datetime_test import ( "testing" "time" "github.com/MontFerret/ferret/pkg/runtime/core" "github.com/MontFerret/ferret/pkg/runtime/values" "github.com/MontFerret/ferret/pkg/stdlib/datetime" ) func TestDateFormat(t *testing.T) { tcs := []*testCase{ &testCase{ Name: "When more than 2 arguments", Expected: values.None, Args: []core.Value{ values.NewString("string"), values.NewInt(0), values.NewArray(0), }, ShouldErr: true, }, &testCase{ Name: "When less than 2 arguments", Expected: values.None, Args: []core.Value{ values.NewInt(0), }, ShouldErr: true, }, &testCase{ Name: "When first argument is wrong", Expected: values.None, Args: []core.Value{ values.NewInt(0), values.NewString(time.RFC822), }, ShouldErr: true, }, &testCase{ Name: "When second argument is wrong", Expected: values.None, Args: []core.Value{ values.NewCurrentDateTime(), values.NewInt(0), }, ShouldErr: true, }, &testCase{ Name: "When DefaultTimeLayout", Expected: values.NewString("1999-02-07T15:04:05Z"), Args: []core.Value{ mustDefaultLayoutDt("1999-02-07T15:04:05Z"), values.NewString(values.DefaultTimeLayout), }, }, &testCase{ Name: "When RFC3339Nano", Expected: values.NewString( time.Date(2018, time.November, 5, 0, 54, 15, 5125, time.Local). Format(time.RFC3339Nano), ), Args: []core.Value{ values.NewDateTime( time.Date(2018, time.November, 5, 0, 54, 15, 5125, time.Local), ), values.NewString(time.RFC3339Nano), }, }, &testCase{ Name: "When custom format", Expected: values.NewString( time.Date(2018, time.November, 5, 0, 54, 15, 5125, time.Local). Format("2006-01-02"), ), Args: []core.Value{ values.NewDateTime( time.Date(2018, time.November, 5, 0, 54, 15, 5125, time.Local), ), values.NewString("2006-01-02"), }, }, &testCase{ Name: "When empty string", Expected: values.NewString(""), Args: []core.Value{ values.NewCurrentDateTime(), values.NewString(""), }, }, &testCase{ Name: "When random string without numbers", Expected: values.NewString("qwerty"), Args: []core.Value{ values.NewCurrentDateTime(), values.NewString("qwerty"), }, }, &testCase{ Name: "When random string with numbers", Expected: values.NewString("qwerty2018uio"), Args: []core.Value{ values.NewDateTime( time.Date(2018, time.November, 5, 0, 54, 15, 5125, time.Local), ), values.NewString("qwerty2006uio"), }, }, } for _, tc := range tcs { tc.Do(t, datetime.DateFormat) } }