package lang import ( "strings" "testing" ) func TestGenerateGoDataClassUsesSnakeCaseJSONTags(t *testing.T) { prog, err := Parse(` package demo data class KeycloakToken(var accessToken: String, var refreshToken: String) `) if err != nil { t.Fatalf("parse failed: %v", err) } out, err := GenerateGo(prog) if err != nil { t.Fatalf("generation failed: %v", err) } for _, want := range []string{"AccessToken", "`json:\"access_token\"`", "RefreshToken", "`json:\"refresh_token\"`"} { if !strings.Contains(string(out), want) { t.Fatalf("generated Go missing %q:\n%s", want, out) } } } func TestGenerateGoDataClassJSONNamingOverride(t *testing.T) { prog, err := Parse(` package demo @jsonNaming(camelCase) data class Account(var availableBalance: Double) `) if err != nil { t.Fatalf("parse failed: %v", err) } out, err := GenerateGo(prog) if err != nil { t.Fatalf("generation failed: %v", err) } if !strings.Contains(string(out), "`json:\"availableBalance\"`") { t.Fatalf("generated Go missing camelCase tag:\n%s", out) } } func TestGenerateGoDataClassFieldVisibilityAndSelector(t *testing.T) { prog, err := Parse(` package demo import json encoding.json data class Request(var email: String, private val traceId: String) fun email(body: ByteSlice): String { val request = json.decode(body) return request.email } `) if err != nil { t.Fatalf("parse failed: %v", err) } out, err := GenerateGo(prog) if err != nil { t.Fatalf("generation failed: %v", err) } for _, want := range []string{"Email", "`json:\"email\"`", "traceId string `json:\"-\"`", "return request.Email"} { if !strings.Contains(string(out), want) { t.Fatalf("generated Go missing %q:\n%s", want, out) } } }