...

Source file src/github.com/protocolbuffers/txtpbfmt/unquote/unquote_test.go

Documentation: github.com/protocolbuffers/txtpbfmt/unquote

     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", // Double-quoted; string contains real control characters.
    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