@@ -2,6 +2,7 @@ package sql3util_test
22
33import (
44 "testing"
5+ "time"
56
67 "github.com/ncruces/go-sqlite3/util/sql3util"
78)
@@ -53,3 +54,43 @@ func TestParseBool(t *testing.T) {
5354 })
5455 }
5556}
57+
58+ func TestParseTimeShift (t * testing.T ) {
59+ epoch := time .Unix (0 , 0 )
60+ tests := []struct {
61+ str string
62+ val time.Time
63+ ok bool
64+ }{
65+ {"" , epoch , false },
66+ {"0001-12-30" , epoch , false },
67+ {"+_001-12-30" , epoch , false },
68+ {"+0001-_2-30" , epoch .AddDate (1 , 0 , 0 ), false },
69+ {"+0001-12-_0" , epoch .AddDate (1 , 12 , 0 ), false },
70+ {"+0001-12-30" , epoch .AddDate (1 , 12 , 30 ), true },
71+ {"-0001-12-30" , epoch .AddDate (- 1 , - 12 , - 30 ), true },
72+ {"+0001-12-30T" , epoch .AddDate (1 , 12 , 30 ), false },
73+ {"+0001-12-30 12" , epoch .AddDate (1 , 12 , 30 ), false },
74+ {"+0001-12-30 _2:30" , epoch .AddDate (1 , 12 , 30 ), false },
75+ {"+0001-12-30 12:_0" , epoch .AddDate (1 , 12 , 30 ), false },
76+ {"+0001-12-30 12:30" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 30 * time .Minute ), true },
77+ {"+0001-12-30 12:30:" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 30 * time .Minute ), false },
78+ {"+0001-12-30 12:30:_0" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 30 * time .Minute ), false },
79+ {"+0001-12-30 12:30:60" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 31 * time .Minute ), true },
80+ {"+0001-12-30 12:30:60." , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 31 * time .Minute ), false },
81+ {"+0001-12-30 12:30:60._" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 31 * time .Minute ), false },
82+ {"+0001-12-30 12:30:60.1" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 31 * time .Minute + 100 * time .Millisecond ), true },
83+ {"+0001-12-30 12:30:60.123456789_" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 31 * time .Minute + 123456789 ), false },
84+ {"+0001-12-30 12:30:60.1234567890" , epoch .AddDate (1 , 12 , 30 ).Add (12 * time .Hour + 31 * time .Minute + 123456789 ), true },
85+ {"-12:30:60.1234567890" , epoch .Add (- 12 * time .Hour - 31 * time .Minute - 123456789 ), true },
86+ }
87+ for _ , tt := range tests {
88+ t .Run (tt .str , func (t * testing.T ) {
89+ years , months , days , duration , gotOK := sql3util .ParseTimeShift (tt .str )
90+ gotVal := epoch .AddDate (years , months , days ).Add (duration )
91+ if ! gotVal .Equal (tt .val ) || gotOK != tt .ok {
92+ t .Errorf ("ParseTimeShift(%q) = (%v, %v) want (%v, %v)" , tt .str , gotVal , gotOK , tt .val , tt .ok )
93+ }
94+ })
95+ }
96+ }
0 commit comments