Skip to content

Commit 87112ba

Browse files
committed
fix(test): build each extension into its own subdir in TestGilString
gopy compiles generated C files in-place via os.Chdir(outputDir), so building two packages into the same directory caused symbol collisions (redefinition of gopy_build_bool, GoPyInit, etc.). Each package now gets its own subdirectory under the shared workdir, mirroring how extensions coexist under site-packages in a real virtualenv.
1 parent 0223539 commit 87112ba

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

main_test.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -800,27 +800,39 @@ func TestGilString(t *testing.T) {
800800
t.Run(be, func(t *testing.T) {
801801
cwd, _ := os.Getwd()
802802

803+
// workdir is the PYTHONPATH root; each package gets its own subdir
804+
// so their generated C files don't collide during compilation.
803805
workdir, err := os.MkdirTemp("", "gopy-")
804806
if err != nil {
805807
t.Fatalf("could not create workdir: %v", err)
806808
}
807809
defer os.RemoveAll(workdir)
808810
defer bind.ResetPackages()
809811

810-
// Build gilstring into workdir.
811-
writeGoMod(t, cwd, workdir)
812-
if err := run([]string{"build", "-vm=" + vm, "-output=" + workdir, "./_examples/gilstring"}); err != nil {
812+
gilDir := filepath.Join(workdir, "gilstring")
813+
if err := os.MkdirAll(gilDir, 0700); err != nil {
814+
t.Fatalf("could not create gilstring subdir: %v", err)
815+
}
816+
817+
// Build gilstring into its own subdir.
818+
writeGoMod(t, cwd, gilDir)
819+
if err := run([]string{"build", "-vm=" + vm, "-output=" + gilDir, "./_examples/gilstring"}); err != nil {
813820
t.Fatalf("error building gilstring: %v", err)
814821
}
815822
bind.ResetPackages()
816823

817-
// Build simple into workdir alongside gilstring.
818-
writeGoMod(t, cwd, workdir)
819-
if err := run([]string{"build", "-vm=" + vm, "-output=" + workdir, "./_examples/simple"}); err != nil {
824+
simpleDir := filepath.Join(workdir, "simple")
825+
if err := os.MkdirAll(simpleDir, 0700); err != nil {
826+
t.Fatalf("could not create simple subdir: %v", err)
827+
}
828+
829+
// Build simple into its own subdir.
830+
writeGoMod(t, cwd, simpleDir)
831+
if err := run([]string{"build", "-vm=" + vm, "-output=" + simpleDir, "./_examples/simple"}); err != nil {
820832
t.Fatalf("error building simple: %v", err)
821833
}
822834

823-
// Copy test.py into workdir.
835+
// Copy test.py into workdir root and run with PYTHONPATH=workdir.
824836
tstSrc := filepath.Join(cwd, "_examples/gilstring/test.py")
825837
tstDst := filepath.Join(workdir, "test.py")
826838
if err := copyCmd(tstSrc, tstDst); err != nil {

0 commit comments

Comments
 (0)