github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/amino/time2_test.go (about) 1 package amino 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 var cdc = NewCodec() 11 12 func init() { 13 cdc.Seal() 14 } 15 16 type testTime struct { 17 Time time.Time 18 } 19 20 func TestDecodeSkippedFieldsInTime(t *testing.T) { 21 t.Parallel() 22 23 tm, err := time.Parse("2006-01-02 15:04:05 +0000 UTC", "1970-01-01 00:00:00 +0000 UTC") 24 assert.NoError(t, err) 25 26 b, err := cdc.MarshalSized(testTime{Time: tm}) 27 assert.NoError(t, err) 28 var ti testTime 29 err = cdc.UnmarshalSized(b, &ti) 30 assert.NoError(t, err) 31 assert.Equal(t, testTime{Time: tm}, ti) 32 33 tm2, err := time.Parse("2006-01-02 15:04:05 +0000 UTC", "1970-01-01 00:00:01.978131102 +0000 UTC") 34 assert.NoError(t, err) 35 36 b, err = cdc.MarshalSized(testTime{Time: tm2}) 37 assert.NoError(t, err) 38 err = cdc.UnmarshalSized(b, &ti) 39 assert.NoError(t, err) 40 assert.Equal(t, testTime{Time: tm2}, ti) 41 42 t1, err := time.Parse("2006-01-02 15:04:05 +0000 UTC", "1970-01-01 00:00:11.577968799 +0000 UTC") 43 assert.NoError(t, err) 44 t2, err := time.Parse("2006-01-02 15:04:05 +0000 UTC", "2078-07-10 15:44:58.406865636 +0000 UTC") 45 assert.NoError(t, err) 46 t3, err := time.Parse("2006-01-02 15:04:05 +0000 UTC", "1970-01-01 00:00:00 +0000 UTC") 47 assert.NoError(t, err) 48 t4, err := time.Parse("2006-01-02 15:04:05 +0000 UTC", "1970-01-01 00:00:14.48251984 +0000 UTC") 49 assert.NoError(t, err) 50 51 type tArr struct { 52 TimeAr [4]time.Time 53 } 54 st := tArr{ 55 TimeAr: [4]time.Time{t1, t2, t3, t4}, 56 } 57 b, err = cdc.MarshalSized(st) 58 assert.NoError(t, err) 59 60 var tStruct tArr 61 err = cdc.UnmarshalSized(b, &tStruct) 62 assert.NoError(t, err) 63 assert.Equal(t, st, tStruct) 64 } 65 66 func TestMinMaxTimeEncode(t *testing.T) { 67 t.Parallel() 68 69 tMin, err := time.Parse("2006-01-02 15:04:05 +0000 UTC", "0001-01-01 00:00:00 +0000 UTC") 70 assert.NoError(t, err) 71 tm := testTime{tMin} 72 _, err = cdc.Marshal(tm) 73 assert.NoError(t, err) 74 75 tErr := time.Unix(minTimeSeconds-1, 0) 76 _, err = cdc.Marshal(tErr) 77 assert.Error(t, err) 78 assert.IsType(t, InvalidTimeError(""), err) 79 t.Log(err) 80 81 tErrMaxSec := time.Unix(maxTimeSeconds, 0) 82 _, err = cdc.Marshal(tErrMaxSec) 83 assert.Error(t, err) 84 assert.IsType(t, InvalidTimeError(""), err) 85 t.Log(err) 86 87 tMaxNs := time.Unix(0, maxTimeNanos) 88 _, err = cdc.Marshal(tMaxNs) 89 assert.NoError(t, err) 90 91 // we can't construct a time.Time with nanos > maxTimeNanos 92 // underlying seconds will be incremented -> still expect an error: 93 tErr2 := time.Unix(maxTimeSeconds, maxTimeNanos+1) 94 _, err = cdc.Marshal(tErr2) 95 assert.Error(t, err) 96 }