mirror of
https://github.com/Threnklyn/jira.git
synced 2026-05-22 14:08:26 +02:00
127 lines
3.5 KiB
Go
127 lines
3.5 KiB
Go
package parse_test
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"log"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/cheekybits/genny/parse"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var tests = []struct {
|
|
// input
|
|
filename string
|
|
pkgName string
|
|
in string
|
|
types []map[string]string
|
|
|
|
// expectations
|
|
expectedOut string
|
|
expectedErr error
|
|
}{
|
|
{
|
|
filename: "generic_queue.go",
|
|
in: `test/queue/generic_queue.go`,
|
|
types: []map[string]string{{"Something": "int"}},
|
|
expectedOut: `test/queue/int_queue.go`,
|
|
},
|
|
{
|
|
filename: "generic_queue.go",
|
|
pkgName: "changed",
|
|
in: `test/queue/generic_queue.go`,
|
|
types: []map[string]string{{"Something": "int"}},
|
|
expectedOut: `test/queue/changed/int_queue.go`,
|
|
},
|
|
{
|
|
filename: "generic_queue.go",
|
|
in: `test/queue/generic_queue.go`,
|
|
types: []map[string]string{{"Something": "float32"}},
|
|
expectedOut: `test/queue/float32_queue.go`,
|
|
},
|
|
{
|
|
filename: "generic_simplemap.go",
|
|
in: `test/multipletypes/generic_simplemap.go`,
|
|
types: []map[string]string{{"KeyType": "string", "ValueType": "int"}},
|
|
expectedOut: `test/multipletypes/string_int_simplemap.go`,
|
|
},
|
|
{
|
|
filename: "generic_simplemap.go",
|
|
in: `test/multipletypes/generic_simplemap.go`,
|
|
types: []map[string]string{{"KeyType": "interface{}", "ValueType": "int"}},
|
|
expectedOut: `test/multipletypes/interface_int_simplemap.go`,
|
|
},
|
|
{
|
|
filename: "generic_simplemap.go",
|
|
in: `test/multipletypes/generic_simplemap.go`,
|
|
types: []map[string]string{{"KeyType": "*MyType1", "ValueType": "*MyOtherType"}},
|
|
expectedOut: `test/multipletypes/custom_types_simplemap.go`,
|
|
},
|
|
{
|
|
filename: "generic_internal.go",
|
|
in: `test/unexported/generic_internal.go`,
|
|
types: []map[string]string{{"secret": "*myType"}},
|
|
expectedOut: `test/unexported/mytype_internal.go`,
|
|
},
|
|
{
|
|
filename: "generic_simplemap.go",
|
|
in: `test/multipletypesets/generic_simplemap.go`,
|
|
types: []map[string]string{
|
|
{"KeyType": "int", "ValueType": "string"},
|
|
{"KeyType": "float64", "ValueType": "bool"},
|
|
},
|
|
expectedOut: `test/multipletypesets/many_simplemaps.go`,
|
|
},
|
|
{
|
|
filename: "generic_number.go",
|
|
in: `test/numbers/generic_number.go`,
|
|
types: []map[string]string{{"NumberType": "int"}},
|
|
expectedOut: `test/numbers/int_number.go`,
|
|
},
|
|
{
|
|
filename: "generic_digraph.go",
|
|
in: `test/bugreports/generic_digraph.go`,
|
|
types: []map[string]string{{"Node": "int"}},
|
|
expectedOut: `test/bugreports/int_digraph.go`,
|
|
},
|
|
}
|
|
|
|
func TestParse(t *testing.T) {
|
|
|
|
for _, test := range tests {
|
|
|
|
test.in = contents(test.in)
|
|
test.expectedOut = contents(test.expectedOut)
|
|
|
|
bytes, err := parse.Generics(test.filename, test.pkgName, strings.NewReader(test.in), test.types)
|
|
|
|
// check the error
|
|
if test.expectedErr == nil {
|
|
assert.NoError(t, err, "(%s) No error was expected but got: %s", test.filename, err)
|
|
} else {
|
|
assert.NotNil(t, err, "(%s) No error was returned by one was expected: %s", test.filename, test.expectedErr)
|
|
assert.IsType(t, test.expectedErr, err, "(%s) Generate should return object of type %v", test.filename, test.expectedErr)
|
|
}
|
|
|
|
// assert the response
|
|
if !assert.Equal(t, string(bytes), test.expectedOut, "Parse didn't generate the expected output.") {
|
|
log.Println("EXPECTED: " + test.expectedOut)
|
|
log.Println("ACTUAL: " + string(bytes))
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func contents(s string) string {
|
|
if strings.HasSuffix(s, "go") {
|
|
file, err := ioutil.ReadFile(s)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return string(file)
|
|
}
|
|
return s
|
|
}
|