Relative time, fixes.

This commit is contained in:
Nuno Cruces
2025-12-04 15:27:16 +00:00
parent 15e9087fa8
commit ca93c498e7
4 changed files with 191 additions and 16 deletions

View File

@@ -2,6 +2,7 @@ package sql3util_test
import (
"testing"
"time"
"github.com/ncruces/go-sqlite3/util/sql3util"
)
@@ -53,3 +54,43 @@ func TestParseBool(t *testing.T) {
})
}
}
func TestParseTimeShift(t *testing.T) {
epoch := time.Unix(0, 0)
tests := []struct {
str string
val time.Time
ok bool
}{
{"", epoch, false},
{"0001-12-30", epoch, false},
{"+_001-12-30", epoch, false},
{"+0001-_2-30", epoch.AddDate(1, 0, 0), false},
{"+0001-12-_0", epoch.AddDate(1, 12, 0), false},
{"+0001-12-30", epoch.AddDate(1, 12, 30), true},
{"-0001-12-30", epoch.AddDate(-1, -12, -30), true},
{"+0001-12-30T", epoch.AddDate(1, 12, 30), false},
{"+0001-12-30 12", epoch.AddDate(1, 12, 30), false},
{"+0001-12-30 _2:30", epoch.AddDate(1, 12, 30), false},
{"+0001-12-30 12:_0", epoch.AddDate(1, 12, 30), false},
{"+0001-12-30 12:30", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 30*time.Minute), true},
{"+0001-12-30 12:30:", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 30*time.Minute), false},
{"+0001-12-30 12:30:_0", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 30*time.Minute), false},
{"+0001-12-30 12:30:60", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 31*time.Minute), true},
{"+0001-12-30 12:30:60.", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 31*time.Minute), false},
{"+0001-12-30 12:30:60._", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 31*time.Minute), false},
{"+0001-12-30 12:30:60.1", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 31*time.Minute + 100*time.Millisecond), true},
{"+0001-12-30 12:30:60.123456789_", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 31*time.Minute + 123456789), false},
{"+0001-12-30 12:30:60.1234567890", epoch.AddDate(1, 12, 30).Add(12*time.Hour + 31*time.Minute + 123456789), true},
{"-12:30:60.1234567890", epoch.Add(-12*time.Hour - 31*time.Minute - 123456789), true},
}
for _, tt := range tests {
t.Run(tt.str, func(t *testing.T) {
years, months, days, duration, gotOK := sql3util.ParseTimeShift(tt.str)
gotVal := epoch.AddDate(years, months, days).Add(duration)
if !gotVal.Equal(tt.val) || gotOK != tt.ok {
t.Errorf("ParseTimeShift(%q) = (%v, %v) want (%v, %v)", tt.str, gotVal, gotOK, tt.val, tt.ok)
}
})
}
}