Expand Gotlin language and tooling

This commit is contained in:
pavel 2026-08-27 01:46:57 +02:00
commit de1262b4cf
41 changed files with 6059 additions and 379 deletions

View file

@ -0,0 +1,62 @@
package lang
import (
"strings"
"testing"
)
func TestGenerateExternalGoStructConstruction(t *testing.T) {
prog, err := Parse(`package demo
import platform "example/platform"
fun create(issuer: String, audience: String, jwksUrl: String): *platform.Authorizer {
return platform.Authorizer(issuer = issuer, audience = audience, jwksUrl = jwksUrl)
}`)
if err != nil {
t.Fatal(err)
}
out, err := GenerateGo(prog)
if err != nil {
t.Fatal(err)
}
want := `&platform.Authorizer{Issuer: issuer, Audience: audience, JWKSURL: jwksUrl}`
if !strings.Contains(string(out), want) {
t.Fatalf("missing %q:\n%s", want, out)
}
}
func TestGenerateEmbeddedValue(t *testing.T) {
prog, err := Parse(`package demo
import embed
@embed("assets/*") val assets: embed.FS
fun main() { println(assets) }`)
if err != nil {
t.Fatal(err)
}
out, err := GenerateGo(prog)
if err != nil {
t.Fatal(err)
}
for _, want := range []string{`"embed"`, `//go:embed assets/*`, `var assets embed.FS`} {
if !strings.Contains(string(out), want) {
t.Fatalf("missing %q:\n%s", want, out)
}
}
}
func TestGenerateEmbeddedStringAddsBlankImport(t *testing.T) {
prog, err := Parse(`package demo
@embed("schema.sql") val schema: String
fun main() { println(schema) }`)
if err != nil {
t.Fatal(err)
}
out, err := GenerateGo(prog)
if err != nil {
t.Fatal(err)
}
for _, want := range []string{`_ "embed"`, `//go:embed schema.sql`, `var schema string`} {
if !strings.Contains(string(out), want) {
t.Fatalf("missing %q:\n%s", want, out)
}
}
}