-
Notifications
You must be signed in to change notification settings - Fork 23
/
ident_test.go
88 lines (75 loc) · 1.82 KB
/
ident_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Copyright 2021 The Cockroach Authors.
//
// Use of this software is governed by the Business Source License
// included in the file licenses/BSL.txt.
//
// As of the Change Date specified in that file, in accordance with
// the Business Source License, use of this software will be governed
// by the Apache License, Version 2.0, included in the file
// licenses/APL.txt.
package ident
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestIdent(t *testing.T) {
a := assert.New(t)
a.True(New("").Empty())
id := New("table")
a.Equal("table", id.Raw())
a.Equal(`"table"`, id.String())
a.False(id.Empty())
a.Equal(id, New("table"))
a.Equal(`"foo!bar"`, New("foo!bar").String())
}
func TestQualified(t *testing.T) {
a := assert.New(t)
id := NewTable(New("database"), New("schema"), New("table"))
a.Equal(`"database"."schema"."table"`, id.String())
}
func TestRelative(t *testing.T) {
foo := New("foo")
tcs := []struct {
table string
expected Table
expectError bool
qual Qualification
}{
{
table: "",
expectError: true,
},
{
table: "foo",
expected: NewTable(StagingDB, Public, foo),
qual: TableOnly,
},
{
table: "other.foo",
expected: NewTable(StagingDB, Public, foo),
qual: TableAndDatabase,
},
{
table: "other.schema.foo",
expected: NewTable(StagingDB, New("schema"), foo),
qual: FullyQualified,
},
{
table: "other.wat.schema.foo",
expectError: true,
},
}
for _, tc := range tcs {
t.Run(tc.table, func(t *testing.T) {
a := assert.New(t)
parsed, qual, err := Relative(tc.expected.Database(), tc.expected.Schema(), tc.table)
if tc.expectError {
a.Error(err)
return
}
a.NoError(err)
a.Equal(tc.expected, parsed)
a.Equalf(tc.qual, qual, "%s vs %s", tc.qual, qual)
})
}
}