MCPcopy Create free account
hub / github.com/php/frankenphp / TestConstantsIntegration

Function TestConstantsIntegration

internal/extgen/constants_test.go:12–85  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

10)
11
12func TestConstantsIntegration(t *testing.T) {
13 tmpDir := t.TempDir()
14 testFile := filepath.Join(tmpDir, "test.go")
15
16 content := `package main
17
18//export_php:const
19const STATUS_OK = iota
20
21//export_php:const
22const MAX_CONNECTIONS = 100
23
24//export_php:const: function test(): void
25func Test() {
26 // Implementation
27}
28
29func main() {}
30`
31
32 require.NoError(t, os.WriteFile(testFile, []byte(content), 0644))
33
34 generator := &Generator{
35 BaseName: "testext",
36 SourceFile: testFile,
37 BuildDir: filepath.Join(tmpDir, "build"),
38 }
39
40 require.NoError(t, generator.parseSource())
41 assert.Len(t, generator.Constants, 2, "Expected 2 constants")
42
43 expectedConstants := map[string]struct {
44 Value string
45 IsIota bool
46 }{
47 "STATUS_OK": {"0", true},
48 "MAX_CONNECTIONS": {"100", false},
49 }
50
51 for _, constant := range generator.Constants {
52 expected, exists := expectedConstants[constant.Name]
53 assert.True(t, exists, "Unexpected constant: %s", constant.Name)
54 if !exists {
55 continue
56 }
57
58 assert.Equal(t, expected.Value, constant.Value, "Constant %s: value mismatch", constant.Name)
59 assert.Equal(t, expected.IsIota, constant.IsIota, "Constant %s: isIota mismatch", constant.Name)
60 }
61
62 require.NoError(t, generator.setupBuildDirectory())
63 require.NoError(t, generator.generateStubFile())
64
65 stubPath := filepath.Join(generator.BuildDir, generator.BaseName+".stub.php")
66 stubContent, err := os.ReadFile(stubPath)
67 require.NoError(t, err)
68
69 stubStr := string(stubContent)

Callers

nothing calls this directly

Calls 4

parseSourceMethod · 0.95
setupBuildDirectoryMethod · 0.95
generateStubFileMethod · 0.95
generateCFileMethod · 0.95

Tested by

no test coverage detected