forked from Shiloh/githaven
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
|
package assertions
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/smartystreets/assertions/internal/go-render/render"
|
||
|
)
|
||
|
|
||
|
type Serializer interface {
|
||
|
serialize(expected, actual interface{}, message string) string
|
||
|
serializeDetailed(expected, actual interface{}, message string) string
|
||
|
}
|
||
|
|
||
|
type failureSerializer struct{}
|
||
|
|
||
|
func (self *failureSerializer) serializeDetailed(expected, actual interface{}, message string) string {
|
||
|
view := FailureView{
|
||
|
Message: message,
|
||
|
Expected: render.Render(expected),
|
||
|
Actual: render.Render(actual),
|
||
|
}
|
||
|
serialized, err := json.Marshal(view)
|
||
|
if err != nil {
|
||
|
return message
|
||
|
}
|
||
|
return string(serialized)
|
||
|
}
|
||
|
|
||
|
func (self *failureSerializer) serialize(expected, actual interface{}, message string) string {
|
||
|
view := FailureView{
|
||
|
Message: message,
|
||
|
Expected: fmt.Sprintf("%+v", expected),
|
||
|
Actual: fmt.Sprintf("%+v", actual),
|
||
|
}
|
||
|
serialized, err := json.Marshal(view)
|
||
|
if err != nil {
|
||
|
return message
|
||
|
}
|
||
|
return string(serialized)
|
||
|
}
|
||
|
|
||
|
func newSerializer() *failureSerializer {
|
||
|
return &failureSerializer{}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// This struct is also declared in github.com/smartystreets/goconvey/convey/reporting.
|
||
|
// The json struct tags should be equal in both declarations.
|
||
|
type FailureView struct {
|
||
|
Message string `json:"Message"`
|
||
|
Expected string `json:"Expected"`
|
||
|
Actual string `json:"Actual"`
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////
|
||
|
|
||
|
// noopSerializer just gives back the original message. This is useful when we are using
|
||
|
// the assertions from a context other than the web UI, that requires the JSON structure
|
||
|
// provided by the failureSerializer.
|
||
|
type noopSerializer struct{}
|
||
|
|
||
|
func (self *noopSerializer) serialize(expected, actual interface{}, message string) string {
|
||
|
return message
|
||
|
}
|
||
|
func (self *noopSerializer) serializeDetailed(expected, actual interface{}, message string) string {
|
||
|
return message
|
||
|
}
|