bf51655a7b
Signed-off-by: Jacek J. Łakis <jacek.lakis@intel.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
package swagger
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func testJsonFromStructWithConfig(t *testing.T, sample interface{}, expectedJson string, config *Config) bool {
|
|
m := modelsFromStructWithConfig(sample, config)
|
|
data, _ := json.MarshalIndent(m, " ", " ")
|
|
return compareJson(t, string(data), expectedJson)
|
|
}
|
|
|
|
func modelsFromStructWithConfig(sample interface{}, config *Config) *ModelList {
|
|
models := new(ModelList)
|
|
builder := modelBuilder{Models: models, Config: config}
|
|
builder.addModelFrom(sample)
|
|
return models
|
|
}
|
|
|
|
func testJsonFromStruct(t *testing.T, sample interface{}, expectedJson string) bool {
|
|
return testJsonFromStructWithConfig(t, sample, expectedJson, &Config{})
|
|
}
|
|
|
|
func modelsFromStruct(sample interface{}) *ModelList {
|
|
return modelsFromStructWithConfig(sample, &Config{})
|
|
}
|
|
|
|
func compareJson(t *testing.T, actualJsonAsString string, expectedJsonAsString string) bool {
|
|
success := false
|
|
var actualMap map[string]interface{}
|
|
json.Unmarshal([]byte(actualJsonAsString), &actualMap)
|
|
var expectedMap map[string]interface{}
|
|
err := json.Unmarshal([]byte(expectedJsonAsString), &expectedMap)
|
|
if err != nil {
|
|
var actualArray []interface{}
|
|
json.Unmarshal([]byte(actualJsonAsString), &actualArray)
|
|
var expectedArray []interface{}
|
|
err := json.Unmarshal([]byte(expectedJsonAsString), &expectedArray)
|
|
success = reflect.DeepEqual(actualArray, expectedArray)
|
|
if err != nil {
|
|
t.Fatalf("Unparsable expected JSON: %s", err)
|
|
}
|
|
} else {
|
|
success = reflect.DeepEqual(actualMap, expectedMap)
|
|
}
|
|
if !success {
|
|
t.Log("---- expected -----")
|
|
t.Log(withLineNumbers(expectedJsonAsString))
|
|
t.Log("---- actual -----")
|
|
t.Log(withLineNumbers(actualJsonAsString))
|
|
t.Log("---- raw -----")
|
|
t.Log(actualJsonAsString)
|
|
t.Error("there are differences")
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func indexOfNonMatchingLine(actual, expected string) int {
|
|
a := strings.Split(actual, "\n")
|
|
e := strings.Split(expected, "\n")
|
|
size := len(a)
|
|
if len(e) < len(a) {
|
|
size = len(e)
|
|
}
|
|
for i := 0; i < size; i++ {
|
|
if a[i] != e[i] {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
func withLineNumbers(content string) string {
|
|
var buffer bytes.Buffer
|
|
lines := strings.Split(content, "\n")
|
|
for i, each := range lines {
|
|
buffer.WriteString(fmt.Sprintf("%d:%s\n", i, each))
|
|
}
|
|
return buffer.String()
|
|
}
|