218 lines
5.7 KiB
Go
218 lines
5.7 KiB
Go
package timex
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestIsAmericaSummerTime(t *testing.T) {
|
|
testCases := []struct {
|
|
Date string
|
|
SummerTime bool
|
|
}{
|
|
{"0001-01-01", false},
|
|
{"2021-11-10", false},
|
|
{"2021-12-10", false},
|
|
{"2021-03-10", false},
|
|
{"2021-03-14", true},
|
|
{"2021-11-01", true},
|
|
{"2021-10-10", true},
|
|
{"2021-10-11", true},
|
|
{"2021-10-12", true},
|
|
{"2021-12-12", false},
|
|
{"2022-03-15", true},
|
|
}
|
|
for _, testCase := range testCases {
|
|
d, _ := time.Parse("2006-01-02", testCase.Date)
|
|
v := IsAmericaSummerTime(d)
|
|
if v != testCase.SummerTime {
|
|
t.Errorf("%s except %v, actual %v", testCase.Date, testCase.SummerTime, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBetween(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
t string
|
|
begin string
|
|
end string
|
|
expected bool
|
|
}{
|
|
{"t1", "2022-01-01", "2022-01-01", "2022-01-01", true},
|
|
{"t2", "2022-01-02", "2022-01-01", "2022-01-01", false},
|
|
{"t3", "2022-01-02", "2022-01-01", "2022-01-02", true},
|
|
}
|
|
layout := "2006-01-02"
|
|
for _, testCase := range testCases {
|
|
tv, _ := time.Parse(layout, testCase.t)
|
|
begin, _ := time.Parse(layout, testCase.begin)
|
|
end, _ := time.Parse(layout, testCase.end)
|
|
v := Between(tv, begin, end)
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestDayStart(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
time string
|
|
layout string
|
|
expected string
|
|
}{
|
|
{"t1", "2022-01-01T12:12:00.924Z", "2006-01-02T15:04:05Z", "2022-01-01 00:00:00"},
|
|
{"t2", "2022-01-01 00:00:00", "2006-01-02 15:04:05", "2022-01-01 00:00:00"},
|
|
}
|
|
|
|
for _, testCase := range testCases {
|
|
tv, err := time.Parse(testCase.layout, testCase.time)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
v := DayStart(tv).Format("2006-01-02 15:04:05")
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestDayEnd(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
time string
|
|
layout string
|
|
expected string
|
|
}{
|
|
{"t1", "2022-01-01 12:12:00", "2006-01-02 15:04:05", "2022-01-01 23:59:59"},
|
|
{"t2", "2022-01-01 00:00:00", "2006-01-02 15:04:05", "2022-01-01 23:59:59"},
|
|
}
|
|
for _, testCase := range testCases {
|
|
tv, _ := time.Parse(testCase.layout, testCase.time)
|
|
v := DayEnd(tv).Format("2006-01-02 15:04:05")
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestMonthStart(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
time string
|
|
layout string
|
|
expected string
|
|
}{
|
|
{"t1", "2022-01-12 12:12:00", "2006-01-02 15:04:05", "2022-01-01 00:00:00"},
|
|
{"t2", "2022-01-21 00:00:00", "2006-01-02 15:04:05", "2022-01-01 00:00:00"},
|
|
}
|
|
for _, testCase := range testCases {
|
|
tv, _ := time.Parse(testCase.layout, testCase.time)
|
|
v := MonthStart(tv).Format("2006-01-02 15:04:05")
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestMonthEnd(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
time string
|
|
layout string
|
|
expected string
|
|
}{
|
|
{"t1", "2022-01-12 12:12:00", "2006-01-02 15:04:05", "2022-01-31 23:59:59"},
|
|
{"t2", "2022-02-21 00:00:00", "2006-01-02 15:04:05", "2022-02-28 23:59:59"},
|
|
}
|
|
for _, testCase := range testCases {
|
|
tv, _ := time.Parse(testCase.layout, testCase.time)
|
|
v := MonthEnd(tv).Format("2006-01-02 15:04:05")
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestWeekStart(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
yearWeek int
|
|
expected string
|
|
}{
|
|
{"t1", 202201, "2022-01-03 00:00:00"},
|
|
{"t2", 202202, "2022-01-10 00:00:00"},
|
|
}
|
|
for _, testCase := range testCases {
|
|
v := WeekStart(testCase.yearWeek).Format("2006-01-02 15:04:05")
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestWeekEnd(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
yearWeek int
|
|
expected string
|
|
}{
|
|
{"t1", 202201, "2022-01-09 23:59:59"},
|
|
{"t2", 202202, "2022-01-16 23:59:59"},
|
|
}
|
|
for _, testCase := range testCases {
|
|
v := WeekEnd(testCase.yearWeek).Format("2006-01-02 15:04:05")
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestYearWeeksByWeek(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
beginYearWeek int
|
|
endYearWeek int
|
|
expected []int
|
|
}{
|
|
{"t1", 202201, 202202, []int{202201, 202202}},
|
|
{"t2", 202201, 202204, []int{202201, 202202, 202203, 202204}},
|
|
}
|
|
for _, testCase := range testCases {
|
|
v := YearWeeksByWeek(testCase.beginYearWeek, testCase.endYearWeek)
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
func TestYearWeeksByTime(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
beginDate string
|
|
endDate string
|
|
expected []int
|
|
}{
|
|
{"t1", "2022-01-01", "2022-01-02", []int{202152}},
|
|
{"t2", "2022-01-01", "2022-02-02", []int{202152, 202201, 202202, 202203, 202204, 202205}},
|
|
}
|
|
for _, testCase := range testCases {
|
|
beginDate, _ := time.Parse("2006-01-02", testCase.beginDate)
|
|
endDate, _ := time.Parse("2006-01-02", testCase.endDate)
|
|
v := YearWeeksByTime(beginDate, endDate)
|
|
assert.Equal(t, testCase.expected, v, testCase.tag)
|
|
}
|
|
}
|
|
|
|
// https://savvytime.com/week-number
|
|
func TestXISOWeek(t *testing.T) {
|
|
testCases := []struct {
|
|
tag string
|
|
date string
|
|
expected string
|
|
}{
|
|
{"t1", "2022-01-01", "202152"},
|
|
{"t2", "2022-01-02", "202201"},
|
|
{"t3", "2022-01-09", "202202"},
|
|
{"t4", "2022-01-10", "202202"},
|
|
{"t5", "2022-01-15", "202202"},
|
|
{"t6", "2022-01-16", "202203"},
|
|
{"t7", "2022-01-17", "202203"},
|
|
{"t8", "2022-01-29", "202204"},
|
|
{"t9", "2022-12-25", "202252"},
|
|
{"t10", "2023-01-01", "202301"},
|
|
}
|
|
for _, testCase := range testCases {
|
|
d, _ := time.Parse("2006-01-02", testCase.date)
|
|
year, week := XISOWeek(d)
|
|
assert.Equal(t, testCase.expected, fmt.Sprintf("%d%02d", year, week), testCase.tag)
|
|
}
|
|
}
|