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  }