1package syntax
2
3import (
4 "bufio"
5 "fmt"
6 "os"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10)
11
12func TestInteropDatetimeValid(t *testing.T) {
13 assert := assert.New(t)
14 file, err := os.Open("testdata/datetime_syntax_valid.txt")
15 assert.NoError(err)
16 defer file.Close()
17 scanner := bufio.NewScanner(file)
18 for scanner.Scan() {
19 line := scanner.Text()
20 if len(line) == 0 || line[0] == '#' {
21 continue
22 }
23 _, err := ParseDatetimeTime(line)
24 if err != nil {
25 fmt.Println("GOOD: " + line)
26 }
27 assert.NoError(err)
28 }
29 assert.NoError(scanner.Err())
30}
31
32func TestInteropDatetimeInvalid(t *testing.T) {
33 assert := assert.New(t)
34 file, err := os.Open("testdata/datetime_syntax_invalid.txt")
35 assert.NoError(err)
36 defer file.Close()
37 scanner := bufio.NewScanner(file)
38 for scanner.Scan() {
39 line := scanner.Text()
40 if len(line) == 0 || line[0] == '#' {
41 continue
42 }
43 _, err := ParseDatetime(line)
44 if err == nil {
45 fmt.Println("BAD: " + line)
46 }
47 assert.Error(err)
48 }
49 assert.NoError(scanner.Err())
50}
51
52func TestInteropDatetimeTimeInvalid(t *testing.T) {
53 assert := assert.New(t)
54 file, err := os.Open("testdata/datetime_parse_invalid.txt")
55 assert.NoError(err)
56 defer file.Close()
57 scanner := bufio.NewScanner(file)
58 for scanner.Scan() {
59 line := scanner.Text()
60 if len(line) == 0 || line[0] == '#' {
61 continue
62 }
63 _, err := ParseDatetime(line)
64 if err == nil {
65 fmt.Println("BAD: " + line)
66 }
67 assert.Error(err)
68 _, err = ParseDatetimeTime(line)
69 if err == nil {
70 fmt.Println("BAD: " + line)
71 }
72 assert.Error(err)
73 }
74 assert.NoError(scanner.Err())
75}
76
77func TestParseDatetimeLenient(t *testing.T) {
78 assert := assert.New(t)
79
80 valid := []string{
81 "1985-04-12T23:20:50.123Z",
82 "1985-04-12T23:20:50.123",
83 "2023-08-27T19:07:00.186173",
84 "1985-04-12T23:20:50.123-00:00",
85 "1985-04-12T23:20:50.123+00:00",
86 "1985-04-12T23:20:50.123+0000",
87 "1985-04-12T23:20:50.123-0000",
88 "2023-11-12T11:20:01+0000",
89 }
90 for _, s := range valid {
91 _, err := ParseDatetimeLenient(s)
92 assert.NoError(err)
93 if err != nil {
94 fmt.Println(s)
95 }
96 }
97
98 invalid := []string{
99 "1985-04-",
100 "",
101 "blah",
102 }
103 for _, s := range invalid {
104 _, err := ParseDatetimeLenient(s)
105 assert.Error(err)
106 }
107}
108
109func TestDatetimeNow(t *testing.T) {
110 assert := assert.New(t)
111
112 dt := DatetimeNow()
113 _, err := ParseDatetimeTime(dt.String())
114 assert.NoError(err)
115}