// Generate compiles and runs the generator and returns the generated filenames. func (m *Generator) Generate() ([]string, error) { if codegen.OutputDir == "" { return nil, fmt.Errorf("missing output directory specification") } if codegen.DesignPackagePath == "" { return nil, fmt.Errorf("missing design package path specification") } if os.Getenv("GOPATH") == "" { return nil, fmt.Errorf("GOPATH not set") } // Create output directory if err := os.MkdirAll(codegen.OutputDir, 0755); err != nil { return nil, err } // Create temporary workspace used for generation w, err := codegen.NewWorkspace("goagen") if err != nil { if _, ok := err.(*os.PathError); ok { err = fmt.Errorf(`invalid output directory path "%s"`, codegen.OutputDir) } return nil, err } defer func() { if !codegen.Debug { w.Delete() } }() if codegen.Debug { fmt.Printf("goagen source dir: %s\n", w.Path) } // Figure out design package name from its path path, err := codegen.PackageSourcePath(codegen.DesignPackagePath) if err != nil { return nil, err } pkgName, err := codegen.PackageName(path) if err != nil { return nil, err } // Generate tool source code. p, err := w.NewPackage(pkgName) if err != nil { return nil, err } m.generateToolSourceCode(p) // Compile and run generated tool. genbin, err := p.Compile("goagen") if err != nil { return nil, err } return m.spawn(genbin) }
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/raphael/goa/design" "github.com/raphael/goa/goagen/codegen" "github.com/raphael/goa/goagen/gen_app" ) var _ = Describe("ContextsWriter", func() { var writer *genapp.ContextsWriter var filename string var workspace *codegen.Workspace JustBeforeEach(func() { var err error workspace, err = codegen.NewWorkspace("test") Ω(err).ShouldNot(HaveOccurred()) pkg, err := workspace.NewPackage("contexts") Ω(err).ShouldNot(HaveOccurred()) src := pkg.CreateSourceFile("test.go") filename = src.Abs() writer, err = genapp.NewContextsWriter(filename) Ω(err).ShouldNot(HaveOccurred()) codegen.TempCount = 0 }) AfterEach(func() { workspace.Delete() }) Context("correctly configured", func() {
var debug bool var outputDir string var designPackage *codegen.Package var designPackagePath string var designPackageSource string var m *meta.Generator BeforeEach(func() { genfunc = "" debug = false designPackagePath = "design" designPackageSource = "package design" codegen.DesignPackagePath = designPackagePath var err error outputWorkspace, err = codegen.NewWorkspace("output") p, err := outputWorkspace.NewPackage("testOutput") Ω(err).ShouldNot(HaveOccurred()) outputDir = p.Abs() designWorkspace, err = codegen.NewWorkspace("test") Ω(err).ShouldNot(HaveOccurred()) compiledFiles = nil compileError = nil }) JustBeforeEach(func() { if designPackagePath != "" { designPackage, err := designWorkspace.NewPackage(designPackagePath) Ω(err).ShouldNot(HaveOccurred()) if designPackageSource != "" { file := designPackage.CreateSourceFile("design.go")