1 package unquote
2
3 import (
4 "strings"
5 "testing"
6
7 "github.com/kylelemons/godebug/diff"
8 "github.com/protocolbuffers/txtpbfmt/ast"
9 )
10
11 func TestUnquote(t *testing.T) {
12 inputs := []struct {
13 in string
14 want string
15 wantRaw string
16 }{
17 {
18 in: `"value"`,
19 want: `value`,
20 wantRaw: `value`,
21 },
22 {
23 in: `'value'`,
24 want: `value`,
25 wantRaw: `value`,
26 },
27 {
28 in: `"foo\'\a\b\f\n\r\t\vbar"`,
29 want: "foo'\a\b\f\n\r\t\vbar",
30 wantRaw: `foo\'\a\b\f\n\r\t\vbar`,
31 },
32 {
33 in: `'foo\"bar'`,
34 want: `foo"bar`,
35 wantRaw: `foo\"bar`,
36 },
37 }
38 for _, input := range inputs {
39 node := &ast.Node{Name: "name", Values: []*ast.Value{{Value: input.in}}}
40
41 got, err := Unquote(node)
42 if err != nil {
43 t.Errorf("Unquote(%v) returned err %v", input.in, err)
44 continue
45 }
46 if diff := diff.Diff(input.want, got); diff != "" {
47 t.Logf("want: %q", input.want)
48 t.Logf("got: %q", got)
49 t.Errorf("Unquote(%v) returned diff (-want, +got):\n%s", input.in, diff)
50 }
51
52 got, err = Raw(node)
53 if err != nil {
54 t.Errorf("unquote.Raw(%v) returned err %v", input.in, err)
55 continue
56 }
57 if diff := diff.Diff(input.wantRaw, got); diff != "" {
58 t.Errorf("unquote.Raw(%v) returned diff (-wantRaw, +got):\n%s", input.in, diff)
59 }
60 }
61 }
62
63 func TestErrorHandling(t *testing.T) {
64 inputs := []struct {
65 in string
66 wantErr string
67 }{
68 {
69 in: `"value`,
70 wantErr: "unmatched quote",
71 },
72 {
73 in: `"`,
74 wantErr: "not a quoted string",
75 },
76 {
77 in: "`foo`",
78 wantErr: "invalid quote character `",
79 },
80 }
81
82 for _, input := range inputs {
83 node := &ast.Node{Name: "name", Values: []*ast.Value{{Value: input.in}}}
84
85 _, err := Unquote(node)
86 if err == nil || !strings.Contains(err.Error(), input.wantErr) {
87 t.Errorf("Unquote(%s) got %v, want err to contain %q", input.in, err, input.wantErr)
88 }
89
90 _, err = Raw(node)
91 if err == nil || !strings.Contains(err.Error(), input.wantErr) {
92 t.Errorf("Raw(%s) got %v, want err to contain %q", input.in, err, input.wantErr)
93 }
94 }
95 }
96
View as plain text