porting all github actions from bluesky-social/indigo to tangled CI
at ci 3.4 kB view raw
1package syntax 2 3import ( 4 "bufio" 5 "fmt" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11) 12 13func TestInteropTIDsValid(t *testing.T) { 14 assert := assert.New(t) 15 file, err := os.Open("testdata/tid_syntax_valid.txt") 16 assert.NoError(err) 17 defer file.Close() 18 scanner := bufio.NewScanner(file) 19 for scanner.Scan() { 20 line := scanner.Text() 21 if len(line) == 0 || line[0] == '#' { 22 continue 23 } 24 _, err := ParseTID(line) 25 if err != nil { 26 fmt.Println("GOOD: " + line) 27 } 28 assert.NoError(err) 29 } 30 assert.NoError(scanner.Err()) 31} 32 33func TestInteropTIDsInvalid(t *testing.T) { 34 assert := assert.New(t) 35 file, err := os.Open("testdata/tid_syntax_invalid.txt") 36 assert.NoError(err) 37 defer file.Close() 38 scanner := bufio.NewScanner(file) 39 for scanner.Scan() { 40 line := scanner.Text() 41 if len(line) == 0 || line[0] == '#' { 42 continue 43 } 44 _, err := ParseTID(line) 45 if err == nil { 46 fmt.Println("BAD: " + line) 47 } 48 assert.Error(err) 49 } 50 assert.NoError(scanner.Err()) 51} 52 53func TestTIDParts(t *testing.T) { 54 assert := assert.New(t) 55 56 raw := "3kao2cl6lyj2p" 57 tid, err := ParseTID(raw) 58 assert.NoError(err) 59 // TODO: assert.Equal(uint64(0x181a8044491f3bec), tid.Integer()) 60 // TODO: assert.Equal(uint(1004), tid.ClockID()) 61 assert.Equal(2023, tid.Time().Year()) 62 63 out := NewTID(tid.Time().UnixMicro(), tid.ClockID()) 64 assert.Equal(raw, out.String()) 65 assert.Equal(tid.ClockID(), out.ClockID()) 66 assert.Equal(tid.Time(), out.Time()) 67 assert.Equal(tid.Integer(), out.Integer()) 68 69 out2 := NewTIDFromInteger(tid.Integer()) 70 assert.Equal(tid.Integer(), out2.Integer()) 71} 72 73func TestTIDExamples(t *testing.T) { 74 assert := assert.New(t) 75 // TODO: seems like TS code might be wrong? "242k52k4kg3s2" 76 assert.Equal("242k52k4kg3sc", NewTIDFromInteger(0x0102030405060708).String()) 77 assert.Equal(uint64(0x0102030405060708), TID("242k52k4kg3sc").Integer()) 78 //assert.Equal("2222222222222", NewTIDFromInteger(0x0000000000000000).String()) 79 //assert.Equal(uint64(), TID("242k52k4kg3s2").Integer()) 80 assert.Equal("2222222222223", NewTIDFromInteger(0x0000000000000001).String()) 81 assert.Equal(uint64(0x0000000000000001), TID("2222222222223").Integer()) 82 83 assert.Equal("6222222222222", NewTIDFromInteger(0x4000000000000000).String()) 84 assert.Equal(uint64(0x4000000000000000), TID("6222222222222").Integer()) 85 86 // ignoring type byte 87 assert.Equal("2222222222222", NewTIDFromInteger(0x8000000000000000).String()) 88} 89 90func TestTIDNoPanic(t *testing.T) { 91 for _, s := range []string{"", "3jzfcijpj2z2aa", "3jzfcijpj2z2", ".."} { 92 bad := TID(s) 93 _ = bad.ClockID() 94 _ = bad.Integer() 95 _ = bad.Time() 96 _ = bad.String() 97 } 98} 99 100func TestTIDConstruction(t *testing.T) { 101 assert := assert.New(t) 102 103 zero := NewTID(0, 0) 104 assert.Equal("2222222222222", zero.String()) 105 assert.Equal(uint64(0), zero.Integer()) 106 assert.Equal(uint(0), zero.ClockID()) 107 assert.Equal(time.UnixMicro(0).UTC(), zero.Time()) 108 109 now := NewTIDNow(1011) 110 assert.Equal(uint(1011), now.ClockID()) 111 assert.True(time.Since(now.Time()) < time.Minute) 112 113 over := NewTIDNow(4096) 114 assert.Equal(uint(0), over.ClockID()) 115 116 next := NewTIDFromTime(time.Now(), 123) 117 assert.Equal(uint(123), next.ClockID()) 118 assert.True(time.Since(next.Time()) < time.Minute) 119} 120 121func TestTIDClock(t *testing.T) { 122 assert := assert.New(t) 123 124 clk := NewTIDClock(0) 125 last := NewTID(0, 0) 126 for i := 0; i < 100; i++ { 127 next := clk.Next() 128 assert.Greater(next, last) 129 last = next 130 } 131}