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 package generator
33
34 import (
35 "testing"
36
37 "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
38 )
39
40 func TestCamelCase(t *testing.T) {
41 tests := []struct {
42 in, want string
43 }{
44 {"one", "One"},
45 {"one_two", "OneTwo"},
46 {"_my_field_name_2", "XMyFieldName_2"},
47 {"Something_Capped", "Something_Capped"},
48 {"my_Name", "My_Name"},
49 {"OneTwo", "OneTwo"},
50 {"_", "X"},
51 {"_a_", "XA_"},
52 }
53 for _, tc := range tests {
54 if got := CamelCase(tc.in); got != tc.want {
55 t.Errorf("CamelCase(%q) = %q, want %q", tc.in, got, tc.want)
56 }
57 }
58 }
59
60 func TestGoPackageOption(t *testing.T) {
61 tests := []struct {
62 in string
63 impPath GoImportPath
64 pkg GoPackageName
65 ok bool
66 }{
67 {"", "", "", false},
68 {"foo", "", "foo", true},
69 {"github.com/golang/bar", "github.com/golang/bar", "bar", true},
70 {"github.com/golang/bar;baz", "github.com/golang/bar", "baz", true},
71 {"github.com/golang/string", "github.com/golang/string", "string", true},
72 }
73 for _, tc := range tests {
74 d := &FileDescriptor{
75 FileDescriptorProto: &descriptor.FileDescriptorProto{
76 Options: &descriptor.FileOptions{
77 GoPackage: &tc.in,
78 },
79 },
80 }
81 impPath, pkg, ok := d.goPackageOption()
82 if impPath != tc.impPath || pkg != tc.pkg || ok != tc.ok {
83 t.Errorf("go_package = %q => (%q, %q, %t), want (%q, %q, %t)", tc.in,
84 impPath, pkg, ok, tc.impPath, tc.pkg, tc.ok)
85 }
86 }
87 }
88
89 func TestPackageNames(t *testing.T) {
90 g := New()
91 g.packageNames = make(map[GoImportPath]GoPackageName)
92 g.usedPackageNames = make(map[GoPackageName]bool)
93 for _, test := range []struct {
94 importPath GoImportPath
95 want GoPackageName
96 }{
97 {"github.com/golang/foo", "foo"},
98 {"github.com/golang/second/package/named/foo", "foo1"},
99 {"github.com/golang/third/package/named/foo", "foo2"},
100 {"github.com/golang/conflicts/with/predeclared/ident/string", "string1"},
101 } {
102 if got := g.GoPackageName(test.importPath); got != test.want {
103 t.Errorf("GoPackageName(%v) = %v, want %v", test.importPath, got, test.want)
104 }
105 }
106 }
107
108 func TestUnescape(t *testing.T) {
109 tests := []struct {
110 in string
111 out string
112 }{
113
114 {"", ""},
115 {"foo bar baz frob nitz", "foo bar baz frob nitz"},
116 {`\000\001\002\003\004\005\006\007`, string([]byte{0, 1, 2, 3, 4, 5, 6, 7})},
117 {`\a\b\f\n\r\t\v\\\?\'\"`, string([]byte{'\a', '\b', '\f', '\n', '\r', '\t', '\v', '\\', '?', '\'', '"'})},
118 {`\x10\x20\x30\x40\x50\x60\x70\x80`, string([]byte{16, 32, 48, 64, 80, 96, 112, 128})},
119
120 {`\0\018\222\377\3\04\005\6\07`, string([]byte{0, 1, '8', 0222, 255, 3, 4, 5, 6, 7})},
121
122 {"foo \\g bar", "foo \\g bar"},
123 {"foo \\xg0 bar", "foo \\xg0 bar"},
124 {"\\", "\\"},
125 {"\\x", "\\x"},
126 {"\\xf", "\\xf"},
127 {"\\777", "\\777"},
128 }
129 for _, tc := range tests {
130 s := unescape(tc.in)
131 if s != tc.out {
132 t.Errorf("doUnescape(%q) = %q; should have been %q", tc.in, s, tc.out)
133 }
134 }
135 }
136
View as plain text