package dev import ( "os" "path/filepath" "strings" "testing" "dappco.re/go/io" ) func TestRunTestGen_Good(t *testing.T) { tmpDir := t.TempDir() originalWD, err := os.Getwd() mustNoError(t, err) t.Cleanup(func() { _ = os.Chdir(originalWD) }) mustNoError(t, os.Chdir(tmpDir)) serviceDir := filepath.Join(tmpDir, "pkg", "demo") mustNoError(t, io.Local.EnsureDir(serviceDir)) mustNoError(t, io.Local.Write(filepath.Join(serviceDir, "demo.go"), `package demo type Example struct{} const Answer = 42 var Value = Example{} func Run() {} `)) mustNoError(t, io.Local.Write(filepath.Join(serviceDir, "extra.go"), `package demo type Another struct{} func Extra() {} `)) mustNoError(t, io.Local.Write(filepath.Join(serviceDir, "demo_test.go"), `package demo func Ignored() {} `)) mustNoError(t, runTestGen()) generatedPath := filepath.Join(tmpDir, "demo", "demo_test.go") content, err := io.Local.Read(generatedPath) mustNoError(t, err) mustContains(t, content, `// Code generated by "core dev api test-gen"; DO NOT EDIT.`) mustContains(t, content, `package demo`) mustContains(t, content, `impl "dappco.re/go/cli/demo"`) mustContains(t, content, `type _ = impl.Example`) mustContains(t, content, `type _ = impl.Another`) mustContains(t, content, `const _ = impl.Answer`) mustContains(t, content, `var _ = impl.Value`) mustContains(t, content, `var _ = impl.Run`) mustContains(t, content, `var _ = impl.Extra`) mustNotContains(t, content, `Ignored`) } func TestGeneratePublicAPITestFile_Good(t *testing.T) { tmpDir := t.TempDir() mustNoError(t, generatePublicAPITestFile( filepath.Join(tmpDir, "demo"), filepath.Join(tmpDir, "demo", "demo_test.go"), "demo", []symbolInfo{ {Name: "Example", Kind: "type"}, {Name: "Answer", Kind: "const"}, }, )) content, err := io.Local.Read(filepath.Join(tmpDir, "demo", "demo_test.go")) mustNoError(t, err) mustTrue(t, strings.Contains(content, `type _ = impl.Example`)) mustTrue(t, strings.Contains(content, `const _ = impl.Answer`)) } func TestGetExportedSymbols_MultiFile_Good(t *testing.T) { tmpDir := t.TempDir() serviceDir := filepath.Join(tmpDir, "demo") mustNoError(t, io.Local.EnsureDir(serviceDir)) mustNoError(t, io.Local.Write(filepath.Join(serviceDir, "demo.go"), `package demo type Example struct{} const Answer = 42 `)) mustNoError(t, io.Local.Write(filepath.Join(serviceDir, "extra.go"), `package demo var Value = Example{} func Run() {} `)) mustNoError(t, io.Local.Write(filepath.Join(serviceDir, "demo_test.go"), `package demo type Ignored struct{} `)) symbols, err := getExportedSymbols(serviceDir) mustNoError(t, err) want := []symbolInfo{ {Name: "Answer", Kind: "const"}, {Name: "Example", Kind: "type"}, {Name: "Run", Kind: "func"}, {Name: "Value", Kind: "var"}, } mustDeepEqual(t, want, symbols) }