| // 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 |
| }{ |
| { |
| "nil", |
| (*int)(nil), |
| rawVal("nil"), |
| }, |
| { |
| "string", |
| "zaphod", |
| stringVal("zaphod"), |
| }, |
| { |
| "slice", |
| []string{"a", "b"}, |
| list{stringVal("a"), stringVal("b")}, |
| }, |
| { |
| "map", |
| map[string]string{ |
| "zaphod": "beeblebrox", |
| "ford": "prefect", |
| }, |
| keyvals{ |
| {"ford", stringVal("prefect")}, |
| {"zaphod", stringVal("beeblebrox")}, |
| }, |
| }, |
| { |
| "map of [2]int", |
| map[[2]int]string{ |
| [2]int{-1, 2}: "school", |
| [2]int{0, 0}: "origin", |
| [2]int{1, 3}: "home", |
| }, |
| keyvals{ |
| {"[-1,2]", stringVal("school")}, |
| {"[0,0]", stringVal("origin")}, |
| {"[1,3]", stringVal("home")}, |
| }, |
| }, |
| { |
| "struct", |
| struct{ Zaphod, Ford string }{"beeblebrox", "prefect"}, |
| keyvals{ |
| {"Zaphod", stringVal("beeblebrox")}, |
| {"Ford", stringVal("prefect")}, |
| }, |
| }, |
| { |
| "int", |
| 3, |
| 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 |
| }{ |
| { |
| "struct default", |
| struct{ Zaphod, Ford, foo string }{"beeblebrox", "prefect", "BAD"}, |
| DefaultConfig, |
| keyvals{ |
| {"Zaphod", stringVal("beeblebrox")}, |
| {"Ford", stringVal("prefect")}, |
| }, |
| }, |
| { |
| "struct w/ IncludeUnexported", |
| struct{ Zaphod, Ford, foo string }{"beeblebrox", "prefect", "GOOD"}, |
| &Config{ |
| IncludeUnexported: true, |
| }, |
| keyvals{ |
| {"Zaphod", stringVal("beeblebrox")}, |
| {"Ford", stringVal("prefect")}, |
| {"foo", stringVal("GOOD")}, |
| }, |
| }, |
| { |
| "time default", |
| struct{ Date time.Time }{time.Unix(1234567890, 0).UTC()}, |
| DefaultConfig, |
| keyvals{ |
| {"Date", keyvals{}}, // empty struct, it has unexported fields |
| }, |
| }, |
| { |
| "time w/ PrintStringers", |
| struct{ Date time.Time }{time.Unix(1234567890, 0).UTC()}, |
| &Config{ |
| PrintStringers: true, |
| }, |
| 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) |
| } |
| } |
| } |