v8.run/go/exp@v0.0.26-0.20230226010534-afcdbd3f782d/time2/timeparse/8601_test.go (about)

     1  package timeparse
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  )
     7  
     8  func TestParse8601(t *testing.T) {
     9  	tests := []struct {
    10  		name       string
    11  		data       string
    12  		wantUnix   int64
    13  		wantNano   int64
    14  		wantOffset int64
    15  	}{
    16  		{
    17  			name:       "epoch",
    18  			data:       "1970-01-01T00:00:00Z",
    19  			wantUnix:   0,
    20  			wantNano:   0,
    21  			wantOffset: 0,
    22  		},
    23  		{
    24  			name:       "epoch+1",
    25  			data:       "1970-01-01T00:00:01Z",
    26  			wantUnix:   1,
    27  			wantNano:   0,
    28  			wantOffset: 0,
    29  		},
    30  		{
    31  			name:       "0000-01-01",
    32  			data:       "0000-01-01T00:00:00Z",
    33  			wantUnix:   -62167219200,
    34  			wantNano:   0,
    35  			wantOffset: 0,
    36  		},
    37  		{
    38  			name:       "2006-01-02T15:04:05-07:00",
    39  			data:       "2006-01-02T15:04:05-07:00",
    40  			wantUnix:   1136239445,
    41  			wantNano:   0,
    42  			wantOffset: -3600 * 7,
    43  		},
    44  		{
    45  			name:       "2006-01-03T07:04:05.123456+09:00",
    46  			data:       "2006-01-03T07:04:05.123456+09:00",
    47  			wantUnix:   1136239445,
    48  			wantNano:   123456000,
    49  			wantOffset: 3600 * 9,
    50  		},
    51  		{
    52  			name:       "2022-10-08T01:31:29+00:00",
    53  			data:       "2022-10-08T01:31:29+00:00",
    54  			wantUnix:   1665192689,
    55  			wantNano:   0,
    56  			wantOffset: 0,
    57  		},
    58  	}
    59  	for _, tt := range tests {
    60  		t.Run(tt.name, func(t *testing.T) {
    61  			gotUnix, gotNano, gotOffset := Parse8601(tt.data)
    62  			if gotUnix != tt.wantUnix {
    63  				t.Errorf("Parse8601() gotUnix = %v, want %v", gotUnix, tt.wantUnix)
    64  			}
    65  			if gotNano != tt.wantNano {
    66  				t.Errorf("Parse8601() gotNano = %v, want %v", gotNano, tt.wantNano)
    67  			}
    68  			if gotOffset != tt.wantOffset {
    69  				t.Errorf("Parse8601() gotOffset = %v, want %v", gotOffset, tt.wantOffset)
    70  			}
    71  		})
    72  	}
    73  }
    74  
    75  func FuzzParse8601(f *testing.F) {
    76  	f.Add(time.Layout)
    77  	f.Add(time.ANSIC)
    78  	f.Add(time.UnixDate)
    79  	f.Add(time.RubyDate)
    80  	f.Add(time.RFC822)
    81  	f.Add(time.RFC822Z)
    82  	f.Add(time.RFC850)
    83  	f.Add(time.RFC1123)
    84  	f.Add(time.RFC1123Z)
    85  	f.Add(time.RFC3339)
    86  	f.Add(time.RFC3339Nano)
    87  	f.Add(time.Kitchen)
    88  	f.Add(time.Stamp)
    89  	f.Add(time.StampMilli)
    90  	f.Add(time.StampMicro)
    91  	f.Add(time.StampNano)
    92  
    93  	f.Add(":")
    94  	f.Add("::")
    95  	f.Add("/")
    96  	f.Add(",")
    97  	f.Add(" ")
    98  	f.Add("T")
    99  	f.Add("+")
   100  	f.Add("-")
   101  	f.Add("Z")
   102  	f.Add("0000")
   103  	f.Add("1970")
   104  	f.Add("00")
   105  	f.Add("0")
   106  	f.Add("1")
   107  	f.Add("2")
   108  	f.Add("3")
   109  	f.Add("4")
   110  	f.Add("5")
   111  	f.Add("6")
   112  	f.Add("7")
   113  	f.Add("8")
   114  	f.Add("9")
   115  	f.Add("10")
   116  
   117  	f.Fuzz(func(t *testing.T, data string) {
   118  		_ = t
   119  		Parse8601(data)
   120  	})
   121  }