github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/shlex/shlex_test.go (about)

     1  // Copyright 2017-2020 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package shlex
     6  
     7  import (
     8  	"fmt"
     9  	"reflect"
    10  	"testing"
    11  )
    12  
    13  func TestArgv(t *testing.T) {
    14  	for i, tt := range []struct {
    15  		desc string
    16  		in   string
    17  		want []string
    18  	}{
    19  		{
    20  			desc: "nothing to do",
    21  			in:   "stuff",
    22  			want: []string{"stuff"},
    23  		},
    24  		{
    25  			desc: "split",
    26  			in:   "stuff more stuff",
    27  			want: []string{"stuff", "more", "stuff"},
    28  		},
    29  		{
    30  			desc: "escape",
    31  			in:   "stuff\\ more stuff",
    32  			want: []string{"stuff more", "stuff"},
    33  		},
    34  		{
    35  			desc: "quote",
    36  			in:   "stuff var='more stuff'",
    37  			want: []string{"stuff", "var=more stuff"},
    38  		},
    39  		{
    40  			desc: "double quote",
    41  			in:   "stuff var=\"more stuff\"",
    42  			want: []string{"stuff", "var=more stuff"},
    43  		},
    44  		{
    45  			desc: "quote specials",
    46  			in:   "stuff var='more stuff $ \\ \\$ \" '",
    47  			want: []string{"stuff", "var=more stuff $ \\ \\$ \" "},
    48  		},
    49  		{
    50  			desc: "double quote",
    51  			in:   "stuff var=\"more stuff $ \\ \\$ \\\" \"",
    52  			want: []string{"stuff", "var=more stuff $ \\ $ \" "},
    53  		},
    54  		{
    55  			desc: "quote forgot close",
    56  			in:   "stuff var='more stuff",
    57  			want: []string{"stuff", "var=more stuff"},
    58  		},
    59  		{
    60  			desc: "empty",
    61  			in:   "",
    62  			want: nil,
    63  		},
    64  	} {
    65  		t.Run(fmt.Sprintf("Test [%02d] %s", i, tt.desc), func(t *testing.T) {
    66  			got := Argv(tt.in)
    67  			if !reflect.DeepEqual(got, tt.want) {
    68  				t.Errorf("Argv = %#v, want %#v", got, tt.want)
    69  			}
    70  
    71  		})
    72  	}
    73  }