[🤖] Add Unit-Tests
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m34s

This commit is contained in:
2026-04-27 10:46:08 +02:00
parent dad0e3240d
commit 02d6894ec6
116 changed files with 18795 additions and 1 deletions
+100
View File
@@ -0,0 +1,100 @@
package rfctime
import (
"testing"
"time"
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
)
func TestTimeNew(t *testing.T) {
v := NewTime(14, 30, 45, 123)
tst.AssertEqual(t, v.Hour, 14)
tst.AssertEqual(t, v.Minute, 30)
tst.AssertEqual(t, v.Second, 45)
tst.AssertEqual(t, v.NanoSecond, 123)
}
func TestTimeFromTS(t *testing.T) {
tm := time.Date(2023, 5, 17, 14, 30, 45, 123456789, time.UTC)
v := NewTimeFromTS(tm)
tst.AssertEqual(t, v.Hour, 14)
tst.AssertEqual(t, v.Minute, 30)
tst.AssertEqual(t, v.Second, 45)
tst.AssertEqual(t, v.NanoSecond, 123456789)
}
func TestTimeSerialize(t *testing.T) {
v := NewTime(14, 30, 45, 123456789)
tst.AssertEqual(t, v.Serialize(), "0014:30:45.123456789")
tst.AssertEqual(t, v.String(), "0014:30:45.123456789")
tst.AssertEqual(t, v.GoString(), "rfctime.NewTime(14, 30, 45, 123456789)")
tst.AssertEqual(t, v.FormatStr(), "15:04:05.999999999")
}
func TestTimeSerializeShort(t *testing.T) {
tst.AssertEqual(t, NewTime(14, 30, 0, 0).SerializeShort(), "14:30")
tst.AssertEqual(t, NewTime(14, 30, 45, 0).SerializeShort(), "14:30:45")
tst.AssertEqual(t, NewTime(14, 30, 45, 123).SerializeShort(), "14:30:45.000000123")
tst.AssertEqual(t, NewTime(0, 0, 0, 0).SerializeShort(), "00:00")
}
func TestTimeDeserialize(t *testing.T) {
tests := []struct {
input string
ok bool
expected Time
}{
{"14:30", true, Time{Hour: 14, Minute: 30, Second: 0, NanoSecond: 0}},
{"14:30:45", true, Time{Hour: 14, Minute: 30, Second: 45, NanoSecond: 0}},
{"14:30:45.123", true, Time{Hour: 14, Minute: 30, Second: 45, NanoSecond: 123000000}},
{"14:30:45.123456789", true, Time{Hour: 14, Minute: 30, Second: 45, NanoSecond: 123456789}},
{"00:00:00.000000000", true, Time{Hour: 0, Minute: 0, Second: 0, NanoSecond: 0}},
{"14", false, Time{}},
{"14:30:45.123:extra", false, Time{}},
{"ab:cd", false, Time{}},
{"14:bb", false, Time{}},
{"14:30:cc", false, Time{}},
{"14:30:45.zz", false, Time{}},
}
for _, tc := range tests {
var v Time
err := v.Deserialize(tc.input)
if tc.ok {
if err != nil {
t.Errorf("Deserialize(%q) failed: %v", tc.input, err)
continue
}
tst.AssertEqual(t, v, tc.expected)
} else if err == nil {
t.Errorf("Deserialize(%q) should have failed", tc.input)
}
}
}
func TestNowTime(t *testing.T) {
now := time.Now().UTC()
v := NowTime(time.UTC)
// Within a couple of seconds
if abs(v.Hour-now.Hour()) > 1 && !(now.Hour() == 23 && v.Hour == 0) {
t.Errorf("NowTime hour mismatch: %d vs %d", v.Hour, now.Hour())
}
vl := NowTimeLoc()
if vl.Hour < 0 || vl.Hour > 23 {
t.Errorf("NowTimeLoc invalid hour: %d", vl.Hour)
}
vu := NowTimeUTC()
if vu.Hour < 0 || vu.Hour > 23 {
t.Errorf("NowTimeUTC invalid hour: %d", vu.Hour)
}
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}