github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/api/types/strslice/strslice_test.go (about)

     1  package strslice
     2  
     3  import (
     4  	"encoding/json"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  func TestStrSliceMarshalJSON(t *testing.T) {
    10  	for _, testcase := range []struct {
    11  		input    StrSlice
    12  		expected string
    13  	}{
    14  		// MADNESS(stevvooe): No clue why nil would be "" but empty would be
    15  		// "null". Had to make a change here that may affect compatibility.
    16  		{input: nil, expected: "null"},
    17  		{StrSlice{}, "[]"},
    18  		{StrSlice{"/bin/sh", "-c", "echo"}, `["/bin/sh","-c","echo"]`},
    19  	} {
    20  		data, err := json.Marshal(testcase.input)
    21  		if err != nil {
    22  			t.Fatal(err)
    23  		}
    24  		if string(data) != testcase.expected {
    25  			t.Fatalf("%#v: expected %v, got %v", testcase.input, testcase.expected, string(data))
    26  		}
    27  	}
    28  }
    29  
    30  func TestStrSliceUnmarshalJSON(t *testing.T) {
    31  	parts := map[string][]string{
    32  		"":   {"default", "values"},
    33  		"[]": {},
    34  		`["/bin/sh","-c","echo"]`: {"/bin/sh", "-c", "echo"},
    35  	}
    36  	for json, expectedParts := range parts {
    37  		strs := StrSlice{"default", "values"}
    38  		if err := strs.UnmarshalJSON([]byte(json)); err != nil {
    39  			t.Fatal(err)
    40  		}
    41  
    42  		actualParts := []string(strs)
    43  		if !reflect.DeepEqual(actualParts, expectedParts) {
    44  			t.Fatalf("%#v: expected %v, got %v", json, expectedParts, actualParts)
    45  		}
    46  
    47  	}
    48  }
    49  
    50  func TestStrSliceUnmarshalString(t *testing.T) {
    51  	var e StrSlice
    52  	echo, err := json.Marshal("echo")
    53  	if err != nil {
    54  		t.Fatal(err)
    55  	}
    56  	if err := json.Unmarshal(echo, &e); err != nil {
    57  		t.Fatal(err)
    58  	}
    59  
    60  	if len(e) != 1 {
    61  		t.Fatalf("expected 1 element after unmarshal: %q", e)
    62  	}
    63  
    64  	if e[0] != "echo" {
    65  		t.Fatalf("expected `echo`, got: %q", e[0])
    66  	}
    67  }
    68  
    69  func TestStrSliceUnmarshalSlice(t *testing.T) {
    70  	var e StrSlice
    71  	echo, err := json.Marshal([]string{"echo"})
    72  	if err != nil {
    73  		t.Fatal(err)
    74  	}
    75  	if err := json.Unmarshal(echo, &e); err != nil {
    76  		t.Fatal(err)
    77  	}
    78  
    79  	if len(e) != 1 {
    80  		t.Fatalf("expected 1 element after unmarshal: %q", e)
    81  	}
    82  
    83  	if e[0] != "echo" {
    84  		t.Fatalf("expected `echo`, got: %q", e[0])
    85  	}
    86  }