mirror of https://github.com/k3s-io/k3s
commit
93d45c1e71
|
@ -85,14 +85,14 @@ const (
|
||||||
|
|
||||||
// SetYAML implements the yaml.Setter interface.
|
// SetYAML implements the yaml.Setter interface.
|
||||||
func (intstr *IntOrString) SetYAML(tag string, value interface{}) bool {
|
func (intstr *IntOrString) SetYAML(tag string, value interface{}) bool {
|
||||||
if intVal, ok := value.(int); ok {
|
switch v := value.(type) {
|
||||||
|
case int:
|
||||||
intstr.Kind = IntstrInt
|
intstr.Kind = IntstrInt
|
||||||
intstr.IntVal = intVal
|
intstr.IntVal = v
|
||||||
return true
|
return true
|
||||||
}
|
case string:
|
||||||
if strVal, ok := value.(string); ok {
|
|
||||||
intstr.Kind = IntstrString
|
intstr.Kind = IntstrString
|
||||||
intstr.StrVal = strVal
|
intstr.StrVal = v
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
@ -129,6 +129,6 @@ func (intstr IntOrString) MarshalJSON() ([]byte, error) {
|
||||||
case IntstrString:
|
case IntstrString:
|
||||||
return json.Marshal(intstr.StrVal)
|
return json.Marshal(intstr.StrVal)
|
||||||
default:
|
default:
|
||||||
panic("impossible IntOrString.Kind")
|
return []byte{}, fmt.Errorf("impossible IntOrString.Kind")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,121 +73,83 @@ type IntOrStringHolder struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIntOrStringUnmarshalYAML(t *testing.T) {
|
func TestIntOrStringUnmarshalYAML(t *testing.T) {
|
||||||
{
|
cases := []struct {
|
||||||
yamlCodeInt := "val: 123\n"
|
input string
|
||||||
|
result IntOrString
|
||||||
var result IntOrStringHolder
|
}{
|
||||||
if err := yaml.Unmarshal([]byte(yamlCodeInt), &result); err != nil {
|
{"val: 123\n", IntOrString{Kind: IntstrInt, IntVal: 123}},
|
||||||
t.Errorf("Failed to unmarshal: %v", err)
|
{"val: \"123\"\n", IntOrString{Kind: IntstrString, StrVal: "123"}},
|
||||||
}
|
|
||||||
if result.IOrS.Kind != IntstrInt || result.IOrS.IntVal != 123 {
|
|
||||||
t.Errorf("Failed to unmarshal int-typed IntOrString: %v", result)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
for _, c := range cases {
|
||||||
yamlCodeStr := "val: \"123\"\n"
|
|
||||||
|
|
||||||
var result IntOrStringHolder
|
var result IntOrStringHolder
|
||||||
if err := yaml.Unmarshal([]byte(yamlCodeStr), &result); err != nil {
|
if err := yaml.Unmarshal([]byte(c.input), &result); err != nil {
|
||||||
t.Errorf("Failed to unmarshal: %v", err)
|
t.Errorf("Failed to unmarshal: %v", err)
|
||||||
}
|
}
|
||||||
if result.IOrS.Kind != IntstrString || result.IOrS.StrVal != "123" {
|
if result.IOrS != c.result {
|
||||||
t.Errorf("Failed to unmarshal string-typed IntOrString: %v", result)
|
t.Errorf("Failed to unmarshal IntOrString: got %+v", result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIntOrStringMarshalYAML(t *testing.T) {
|
func TestIntOrStringMarshalYAML(t *testing.T) {
|
||||||
{
|
cases := []struct {
|
||||||
input := IntOrStringHolder{
|
input IntOrString
|
||||||
IOrS: IntOrString{
|
result string
|
||||||
Kind: IntstrInt,
|
}{
|
||||||
IntVal: 123,
|
{IntOrString{Kind: IntstrInt, IntVal: 123}, "val: 123\n"},
|
||||||
},
|
{IntOrString{Kind: IntstrString, StrVal: "123"}, "val: \"123\"\n"},
|
||||||
}
|
|
||||||
result, err := yaml.Marshal(&input)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Failed to marshal: %v", err)
|
|
||||||
}
|
|
||||||
if string(result) != "val: 123\n" {
|
|
||||||
t.Errorf("Failed to marshal int-typed IntOrString: %q", string(result))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
for _, c := range cases {
|
||||||
input := IntOrStringHolder{
|
input := IntOrStringHolder{c.input}
|
||||||
IOrS: IntOrString{
|
|
||||||
Kind: IntstrString,
|
|
||||||
StrVal: "123",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
result, err := yaml.Marshal(&input)
|
result, err := yaml.Marshal(&input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to marshal: %v", err)
|
t.Errorf("Failed to marshal: %v", err)
|
||||||
}
|
}
|
||||||
if string(result) != "val: \"123\"\n" {
|
if string(result) != c.result {
|
||||||
t.Errorf("Failed to marshal string-typed IntOrString: %q", string(result))
|
t.Errorf("Failed to marshal IntOrString: got %q", string(result))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIntOrStringUnmarshalJSON(t *testing.T) {
|
func TestIntOrStringUnmarshalJSON(t *testing.T) {
|
||||||
{
|
cases := []struct {
|
||||||
jsonCodeInt := "{\"val\": 123}"
|
input string
|
||||||
|
result IntOrString
|
||||||
var result IntOrStringHolder
|
}{
|
||||||
if err := json.Unmarshal([]byte(jsonCodeInt), &result); err != nil {
|
{"{\"val\": 123}", IntOrString{Kind: IntstrInt, IntVal: 123}},
|
||||||
t.Errorf("Failed to unmarshal: %v", err)
|
{"{\"val\": \"123\"}", IntOrString{Kind: IntstrString, StrVal: "123"}},
|
||||||
}
|
|
||||||
if result.IOrS.Kind != IntstrInt || result.IOrS.IntVal != 123 {
|
|
||||||
t.Errorf("Failed to unmarshal int-typed IntOrString: %v", result)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
for _, c := range cases {
|
||||||
jsonCodeStr := "{\"val\": \"123\"}"
|
|
||||||
|
|
||||||
var result IntOrStringHolder
|
var result IntOrStringHolder
|
||||||
if err := json.Unmarshal([]byte(jsonCodeStr), &result); err != nil {
|
if err := json.Unmarshal([]byte(c.input), &result); err != nil {
|
||||||
t.Errorf("Failed to unmarshal: %v", err)
|
t.Errorf("Failed to unmarshal: %v", err)
|
||||||
}
|
}
|
||||||
if result.IOrS.Kind != IntstrString || result.IOrS.StrVal != "123" {
|
if result.IOrS != c.result {
|
||||||
t.Errorf("Failed to unmarshal string-typed IntOrString: %v", result)
|
t.Errorf("Failed to unmarshal IntOrString: got %+v", result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIntOrStringMarshalJSON(t *testing.T) {
|
func TestIntOrStringMarshalJSON(t *testing.T) {
|
||||||
{
|
cases := []struct {
|
||||||
input := IntOrStringHolder{
|
input IntOrString
|
||||||
IOrS: IntOrString{
|
result string
|
||||||
Kind: IntstrInt,
|
}{
|
||||||
IntVal: 123,
|
{IntOrString{Kind: IntstrInt, IntVal: 123}, "{\"val\":123}"},
|
||||||
},
|
{IntOrString{Kind: IntstrString, StrVal: "123"}, "{\"val\":\"123\"}"},
|
||||||
}
|
|
||||||
result, err := json.Marshal(&input)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Failed to marshal: %v", err)
|
|
||||||
}
|
|
||||||
if string(result) != "{\"val\":123}" {
|
|
||||||
t.Errorf("Failed to marshal int-typed IntOrString: %q", string(result))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
for _, c := range cases {
|
||||||
input := IntOrStringHolder{
|
input := IntOrStringHolder{c.input}
|
||||||
IOrS: IntOrString{
|
|
||||||
Kind: IntstrString,
|
|
||||||
StrVal: "123",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
result, err := json.Marshal(&input)
|
result, err := json.Marshal(&input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to marshal: %v", err)
|
t.Errorf("Failed to marshal: %v", err)
|
||||||
}
|
}
|
||||||
if string(result) != "{\"val\":\"123\"}" {
|
if string(result) != c.result {
|
||||||
t.Errorf("Failed to marshal string-typed IntOrString: %q", string(result))
|
t.Errorf("Failed to marshal IntOrString: got %q", string(result))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue