| package timezone |
|
|
| import ( |
| "testing" |
| "time" |
| ) |
|
|
| func TestInit(t *testing.T) { |
| |
| err := Init("Asia/Shanghai") |
| if err != nil { |
| t.Fatalf("Init failed with valid timezone: %v", err) |
| } |
|
|
| |
| if time.Local.String() != "Asia/Shanghai" { |
| t.Errorf("time.Local not set correctly, got %s", time.Local.String()) |
| } |
|
|
| |
| if Location().String() != "Asia/Shanghai" { |
| t.Errorf("Location() not set correctly, got %s", Location().String()) |
| } |
|
|
| |
| if Name() != "Asia/Shanghai" { |
| t.Errorf("Name() not set correctly, got %s", Name()) |
| } |
| } |
|
|
| func TestInitInvalidTimezone(t *testing.T) { |
| err := Init("Invalid/Timezone") |
| if err == nil { |
| t.Error("Init should fail with invalid timezone") |
| } |
| } |
|
|
| func TestTimeNowAffected(t *testing.T) { |
| |
| if err := Init("UTC"); err != nil { |
| t.Fatalf("Init failed with UTC: %v", err) |
| } |
| utcNow := time.Now() |
|
|
| |
| if err := Init("Asia/Shanghai"); err != nil { |
| t.Fatalf("Init failed with Asia/Shanghai: %v", err) |
| } |
| shanghaiNow := time.Now() |
|
|
| |
| |
| _, utcOffset := utcNow.Zone() |
| _, shanghaiOffset := shanghaiNow.Zone() |
|
|
| expectedDiff := 8 * 3600 |
| actualDiff := shanghaiOffset - utcOffset |
|
|
| if actualDiff != expectedDiff { |
| t.Errorf("Timezone offset difference incorrect: expected %d, got %d", expectedDiff, actualDiff) |
| } |
| } |
|
|
| func TestToday(t *testing.T) { |
| if err := Init("Asia/Shanghai"); err != nil { |
| t.Fatalf("Init failed with Asia/Shanghai: %v", err) |
| } |
|
|
| today := Today() |
| now := Now() |
|
|
| |
| if today.Hour() != 0 || today.Minute() != 0 || today.Second() != 0 { |
| t.Errorf("Today() not at start of day: %v", today) |
| } |
|
|
| |
| if today.Year() != now.Year() || today.Month() != now.Month() || today.Day() != now.Day() { |
| t.Errorf("Today() date mismatch: today=%v, now=%v", today, now) |
| } |
| } |
|
|
| func TestStartOfDay(t *testing.T) { |
| if err := Init("Asia/Shanghai"); err != nil { |
| t.Fatalf("Init failed with Asia/Shanghai: %v", err) |
| } |
|
|
| |
| testTime := time.Date(2024, 6, 15, 15, 30, 45, 123456789, Location()) |
| startOfDay := StartOfDay(testTime) |
|
|
| expected := time.Date(2024, 6, 15, 0, 0, 0, 0, Location()) |
| if !startOfDay.Equal(expected) { |
| t.Errorf("StartOfDay incorrect: expected %v, got %v", expected, startOfDay) |
| } |
| } |
|
|
| func TestTruncateVsStartOfDay(t *testing.T) { |
| |
| |
|
|
| if err := Init("Asia/Shanghai"); err != nil { |
| t.Fatalf("Init failed with Asia/Shanghai: %v", err) |
| } |
|
|
| now := Now() |
|
|
| |
| truncated := now.Truncate(24 * time.Hour) |
|
|
| |
| startOfDay := StartOfDay(now) |
|
|
| |
| t.Logf("Now: %v", now) |
| t.Logf("Truncate(24h): %v", truncated) |
| t.Logf("StartOfDay: %v", startOfDay) |
|
|
| |
| |
| if startOfDay.Hour() != 0 { |
| t.Errorf("StartOfDay should be at hour 0, got %d", startOfDay.Hour()) |
| } |
| } |
|
|
| func TestDSTAwareness(t *testing.T) { |
| |
| err := Init("America/New_York") |
| if err != nil { |
| t.Skipf("America/New_York timezone not available: %v", err) |
| } |
|
|
| |
| _ = Today() |
| _ = Now() |
| _ = StartOfDay(Now()) |
| } |
|
|