40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package lang
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestGotlinClassesAreReferenceTypesByDefault(t *testing.T) {
|
|
prog, err := Parse(`package demo
|
|
class Repository
|
|
class Service(val repository: Repository)
|
|
fun create(): Service { return Service(Repository()) }
|
|
fun many(): List<Repository> { return listOf(Repository()) }
|
|
fun optional(): Repository? { return null }`)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
out, err := GenerateGo(prog)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, want := range []string{"repository *Repository", "func create() *Service", "func many() []*Repository", "func optional() *Repository"} {
|
|
if !strings.Contains(string(out), want) {
|
|
t.Fatalf("missing %q:\n%s", want, out)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestExplicitClassPointerIsRejected(t *testing.T) {
|
|
prog, err := Parse(`package demo
|
|
class Repository
|
|
fun use(repository: *Repository): *Repository { return repository }`)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, err = GenerateGo(prog)
|
|
if err == nil || !strings.Contains(err.Error(), "already reference-valued") {
|
|
t.Fatalf("unexpected explicit pointer result: %v", err)
|
|
}
|
|
}
|