1
0
Fork 0
mirror of https://github.com/Luzifer/cloudkeys-go.git synced 2024-11-14 00:42:44 +00:00
cloudkeys-go/vendor/github.com/juju/testing/checkers/codec_test.go
2017-12-28 01:56:23 +00:00

157 lines
3.8 KiB
Go

// Copyright 2014 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package checkers_test
import (
gc "gopkg.in/check.v1"
jc "github.com/juju/testing/checkers"
)
type Inner struct {
First string
Second int `json:",omitempty" yaml:",omitempty"`
Third map[string]bool `json:",omitempty" yaml:",omitempty"`
}
type Outer struct {
First float64
Second []*Inner `json:"Last,omitempty" yaml:"last,omitempty"`
}
func (s *CheckerSuite) TestJSONEquals(c *gc.C) {
tests := []struct {
descr string
obtained string
expected *Outer
result bool
msg string
}{
{
descr: "very simple",
obtained: `{"First": 47.11}`,
expected: &Outer{
First: 47.11,
},
result: true,
}, {
descr: "nested",
obtained: `{"First": 47.11, "Last": [{"First": "Hello", "Second": 42}]}`,
expected: &Outer{
First: 47.11,
Second: []*Inner{
{First: "Hello", Second: 42},
},
},
result: true,
}, {
descr: "nested with newline",
obtained: `{"First": 47.11, "Last": [{"First": "Hello", "Second": 42},
{"First": "World", "Third": {"T": true, "F": false}}]}`,
expected: &Outer{
First: 47.11,
Second: []*Inner{
{First: "Hello", Second: 42},
{First: "World", Third: map[string]bool{
"F": false,
"T": true,
}},
},
},
result: true,
}, {
descr: "illegal field",
obtained: `{"NotThere": 47.11}`,
expected: &Outer{
First: 47.11,
},
result: false,
msg: `mismatch at .*: validity mismatch; .*`,
}, {
descr: "illegal optained content",
obtained: `{"NotThere": `,
result: false,
msg: `cannot unmarshal obtained contents: unexpected end of JSON input; .*`,
},
}
for i, test := range tests {
c.Logf("test #%d) %s", i, test.descr)
result, msg := jc.JSONEquals.Check([]interface{}{test.obtained, test.expected}, nil)
c.Check(result, gc.Equals, test.result)
c.Check(msg, gc.Matches, test.msg)
}
// Test non-string input.
result, msg := jc.JSONEquals.Check([]interface{}{true, true}, nil)
c.Check(result, gc.Equals, false)
c.Check(msg, gc.Matches, "expected string, got bool")
}
func (s *CheckerSuite) TestYAMLEquals(c *gc.C) {
tests := []struct {
descr string
obtained string
expected *Outer
result bool
msg string
}{
{
descr: "very simple",
obtained: `first: 47.11`,
expected: &Outer{
First: 47.11,
},
result: true,
}, {
descr: "nested",
obtained: `{first: 47.11, last: [{first: 'Hello', second: 42}]}`,
expected: &Outer{
First: 47.11,
Second: []*Inner{
{First: "Hello", Second: 42},
},
},
result: true,
}, {
descr: "nested with newline",
obtained: `{first: 47.11, last: [{first: 'Hello', second: 42},
{first: 'World', third: {t: true, f: false}}]}`,
expected: &Outer{
First: 47.11,
Second: []*Inner{
{First: "Hello", Second: 42},
{First: "World", Third: map[string]bool{
"f": false,
"t": true,
}},
},
},
result: true,
}, {
descr: "illegal field",
obtained: `{"NotThere": 47.11}`,
expected: &Outer{
First: 47.11,
},
result: false,
msg: `mismatch at .*: validity mismatch; .*`,
}, {
descr: "illegal obtained content",
obtained: `{"NotThere": `,
result: false,
msg: `cannot unmarshal obtained contents: yaml: line 1: .*`,
},
}
for i, test := range tests {
c.Logf("test #%d) %s", i, test.descr)
result, msg := jc.YAMLEquals.Check([]interface{}{test.obtained, test.expected}, nil)
c.Check(result, gc.Equals, test.result)
c.Check(msg, gc.Matches, test.msg)
}
// Test non-string input.
result, msg := jc.YAMLEquals.Check([]interface{}{true, true}, nil)
c.Check(result, gc.Equals, false)
c.Check(msg, gc.Matches, "expected string, got bool")
}