mirror of
https://github.com/MontFerret/ferret.git
synced 2024-12-14 11:23:02 +02:00
295 lines
6.7 KiB
Go
295 lines
6.7 KiB
Go
package datetime_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/MontFerret/ferret/pkg/runtime/core"
|
|
"github.com/MontFerret/ferret/pkg/runtime/values"
|
|
|
|
"github.com/MontFerret/ferret/pkg/stdlib/datetime"
|
|
)
|
|
|
|
var (
|
|
utcLoc, _ = time.LoadLocation("UTC")
|
|
)
|
|
|
|
func TestDateAdd(t *testing.T) {
|
|
tcs := []*testCase{
|
|
&testCase{
|
|
Name: "When more than 3 arguments",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
values.NewInt(0),
|
|
values.NewInt(0),
|
|
values.NewInt(0),
|
|
values.NewInt(0),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When less than 3 arguments",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
values.NewInt(0),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When incorrect arguments",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
values.NewString("bla-bla"),
|
|
values.NewInt(0),
|
|
values.NewString("be-be"),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When wrong unit given",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
mustLayoutDt("2006-01-02", "1999-02-07"),
|
|
values.NewInt(5),
|
|
values.NewString("not_exist"),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When argument have correct types",
|
|
Expected: func() core.Value {
|
|
expected, _ := datetime.DateAdd(
|
|
context.Background(),
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(1),
|
|
values.NewString("day"),
|
|
)
|
|
return expected
|
|
}(),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(1),
|
|
values.NewString("day"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "-1 day",
|
|
Expected: mustDefaultLayoutDt("1999-02-06T15:04:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(-1),
|
|
values.NewString("day"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+3 months",
|
|
Expected: mustDefaultLayoutDt("1999-05-07T15:04:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(3),
|
|
values.NewString("months"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+5 years",
|
|
Expected: mustLayoutDt("2006-01-02", "2004-02-07"),
|
|
Args: []core.Value{
|
|
mustLayoutDt("2006-01-02", "1999-02-07"),
|
|
values.NewInt(5),
|
|
values.NewString("y"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "1999 minus 2000 years",
|
|
Expected: values.NewDateTime(
|
|
time.Date(-1, 2, 7, 0, 0, 0, 0, utcLoc),
|
|
),
|
|
Args: []core.Value{
|
|
mustLayoutDt("2006-01-02", "1999-02-07"),
|
|
values.NewInt(-2000),
|
|
values.NewString("year"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+2 hours",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T17:04:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(2),
|
|
values.NewString("h"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+20 minutes",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T15:24:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(20),
|
|
values.NewString("i"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+30 seconds",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T15:04:35Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(30),
|
|
values.NewString("s"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+1000 milliseconds",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T15:04:06Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(1000),
|
|
values.NewString("f"),
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tcs {
|
|
tc.Do(t, datetime.DateAdd)
|
|
}
|
|
}
|
|
|
|
func TestDateSubtract(t *testing.T) {
|
|
tcs := []*testCase{
|
|
&testCase{
|
|
Name: "When more than 3 arguments",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
values.NewInt(0),
|
|
values.NewInt(0),
|
|
values.NewInt(0),
|
|
values.NewInt(0),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When less than 3 arguments",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
values.NewInt(0),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When incorrect arguments",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
values.NewString("bla-bla"),
|
|
values.NewInt(0),
|
|
values.NewString("be-be"),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When wrong unit given",
|
|
Expected: values.None,
|
|
Args: []core.Value{
|
|
mustLayoutDt("2006-01-02", "1999-02-07"),
|
|
values.NewInt(5),
|
|
values.NewString("not_exist"),
|
|
},
|
|
ShouldErr: true,
|
|
},
|
|
&testCase{
|
|
Name: "When argument have correct types",
|
|
Expected: func() core.Value {
|
|
expected, _ := datetime.DateSubtract(
|
|
context.Background(),
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(1),
|
|
values.NewString("day"),
|
|
)
|
|
return expected
|
|
}(),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(1),
|
|
values.NewString("day"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "-1 day",
|
|
Expected: mustDefaultLayoutDt("1999-02-08T15:04:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(-1),
|
|
values.NewString("day"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+3 months",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-05-07T15:04:05Z"),
|
|
values.NewInt(3),
|
|
values.NewString("months"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "+5 years",
|
|
Expected: mustLayoutDt("2006-01-02", "1994-02-07"),
|
|
Args: []core.Value{
|
|
mustLayoutDt("2006-01-02", "1999-02-07"),
|
|
values.NewInt(5),
|
|
values.NewString("y"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "1999 minus 2000 years",
|
|
Expected: values.NewDateTime(
|
|
time.Date(-1, 2, 7, 0, 0, 0, 0, utcLoc),
|
|
),
|
|
Args: []core.Value{
|
|
mustLayoutDt("2006-01-02", "1999-02-07"),
|
|
values.NewInt(2000),
|
|
values.NewString("year"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "-2 hours",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T13:04:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(2),
|
|
values.NewString("h"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "-20 minutes",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T14:44:05Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(20),
|
|
values.NewString("i"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "-30 seconds",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T15:03:35Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(30),
|
|
values.NewString("s"),
|
|
},
|
|
},
|
|
&testCase{
|
|
Name: "-1000 milliseconds",
|
|
Expected: mustDefaultLayoutDt("1999-02-07T15:04:04Z"),
|
|
Args: []core.Value{
|
|
mustDefaultLayoutDt("1999-02-07T15:04:05Z"),
|
|
values.NewInt(1000),
|
|
values.NewString("f"),
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tcs {
|
|
tc.Do(t, datetime.DateSubtract)
|
|
}
|
|
}
|