mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
3.7 KiB
168 lines
3.7 KiB
// Copyright 2013 Google Inc. All rights reserved. |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
|
|
package pretty |
|
|
|
import ( |
|
"reflect" |
|
"testing" |
|
"time" |
|
) |
|
|
|
func TestVal2nodeDefault(t *testing.T) { |
|
tests := []struct { |
|
desc string |
|
raw interface{} |
|
want node |
|
}{ |
|
{ |
|
desc: "nil", |
|
raw: nil, |
|
want: rawVal("nil"), |
|
}, |
|
{ |
|
desc: "nil ptr", |
|
raw: (*int)(nil), |
|
want: rawVal("nil"), |
|
}, |
|
{ |
|
desc: "nil slice", |
|
raw: []string(nil), |
|
want: list{}, |
|
}, |
|
{ |
|
desc: "nil map", |
|
raw: map[string]string(nil), |
|
want: keyvals{}, |
|
}, |
|
{ |
|
desc: "string", |
|
raw: "zaphod", |
|
want: stringVal("zaphod"), |
|
}, |
|
{ |
|
desc: "slice", |
|
raw: []string{"a", "b"}, |
|
want: list{stringVal("a"), stringVal("b")}, |
|
}, |
|
{ |
|
desc: "map", |
|
raw: map[string]string{ |
|
"zaphod": "beeblebrox", |
|
"ford": "prefect", |
|
}, |
|
want: keyvals{ |
|
{"ford", stringVal("prefect")}, |
|
{"zaphod", stringVal("beeblebrox")}, |
|
}, |
|
}, |
|
{ |
|
desc: "map of [2]int", |
|
raw: map[[2]int]string{ |
|
[2]int{-1, 2}: "school", |
|
[2]int{0, 0}: "origin", |
|
[2]int{1, 3}: "home", |
|
}, |
|
want: keyvals{ |
|
{"[-1,2]", stringVal("school")}, |
|
{"[0,0]", stringVal("origin")}, |
|
{"[1,3]", stringVal("home")}, |
|
}, |
|
}, |
|
{ |
|
desc: "struct", |
|
raw: struct{ Zaphod, Ford string }{"beeblebrox", "prefect"}, |
|
want: keyvals{ |
|
{"Zaphod", stringVal("beeblebrox")}, |
|
{"Ford", stringVal("prefect")}, |
|
}, |
|
}, |
|
{ |
|
desc: "int", |
|
raw: 3, |
|
want: rawVal("3"), |
|
}, |
|
} |
|
|
|
for _, test := range tests { |
|
if got, want := DefaultConfig.val2node(reflect.ValueOf(test.raw)), test.want; !reflect.DeepEqual(got, want) { |
|
t.Errorf("%s: got %#v, want %#v", test.desc, got, want) |
|
} |
|
} |
|
} |
|
|
|
func TestVal2node(t *testing.T) { |
|
tests := []struct { |
|
desc string |
|
raw interface{} |
|
cfg *Config |
|
want node |
|
}{ |
|
{ |
|
desc: "struct default", |
|
raw: struct{ Zaphod, Ford, foo string }{"beeblebrox", "prefect", "BAD"}, |
|
cfg: DefaultConfig, |
|
want: keyvals{ |
|
{"Zaphod", stringVal("beeblebrox")}, |
|
{"Ford", stringVal("prefect")}, |
|
}, |
|
}, |
|
{ |
|
desc: "struct w/ IncludeUnexported", |
|
raw: struct{ Zaphod, Ford, foo string }{"beeblebrox", "prefect", "GOOD"}, |
|
cfg: &Config{ |
|
IncludeUnexported: true, |
|
}, |
|
want: keyvals{ |
|
{"Zaphod", stringVal("beeblebrox")}, |
|
{"Ford", stringVal("prefect")}, |
|
{"foo", stringVal("GOOD")}, |
|
}, |
|
}, |
|
{ |
|
desc: "time default", |
|
raw: struct{ Date time.Time }{time.Unix(1234567890, 0).UTC()}, |
|
cfg: DefaultConfig, |
|
want: keyvals{ |
|
{"Date", keyvals{}}, |
|
}, |
|
}, |
|
{ |
|
desc: "time w/ PrintTextMarshalers", |
|
raw: struct{ Date time.Time }{time.Unix(1234567890, 0).UTC()}, |
|
cfg: &Config{ |
|
PrintTextMarshalers: true, |
|
}, |
|
want: keyvals{ |
|
{"Date", stringVal("2009-02-13T23:31:30Z")}, |
|
}, |
|
}, |
|
{ |
|
desc: "time w/ PrintStringers", |
|
raw: struct{ Date time.Time }{time.Unix(1234567890, 0).UTC()}, |
|
cfg: &Config{ |
|
PrintStringers: true, |
|
}, |
|
want: keyvals{ |
|
{"Date", stringVal("2009-02-13 23:31:30 +0000 UTC")}, |
|
}, |
|
}, |
|
} |
|
|
|
for _, test := range tests { |
|
if got, want := test.cfg.val2node(reflect.ValueOf(test.raw)), test.want; !reflect.DeepEqual(got, want) { |
|
t.Errorf("%s: got %#v, want %#v", test.desc, got, want) |
|
} |
|
} |
|
}
|
|
|