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

Function TestConstantsIntegrationOctal

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

Source from the content-addressed store, hash-verified

85}
86
87func TestConstantsIntegrationOctal(t *testing.T) {
88 tmpDir := t.TempDir()
89 testFile := filepath.Join(tmpDir, "test.go")
90
91 content := `package main
92
93//export_php:const
94const FILE_PERM = 0o755
95
96//export_php:const
97const OTHER_PERM = 0o644
98
99//export_php:const
100const REGULAR_INT = 42
101
102func main() {}
103`
104
105 require.NoError(t, os.WriteFile(testFile, []byte(content), 0644))
106
107 generator := &Generator{
108 BaseName: "octalstest",
109 SourceFile: testFile,
110 BuildDir: filepath.Join(tmpDir, "build"),
111 }
112
113 require.NoError(t, generator.parseSource())
114 assert.Len(t, generator.Constants, 3, "Expected 3 constants")
115
116 // Verify CValue conversion
117 for _, constant := range generator.Constants {
118 switch constant.Name {
119 case "FILE_PERM":
120 assert.Equal(t, "0o755", constant.Value, "FILE_PERM value mismatch")
121 assert.Equal(t, "493", constant.CValue(), "FILE_PERM CValue mismatch")
122 case "OTHER_PERM":
123 assert.Equal(t, "0o644", constant.Value, "OTHER_PERM value mismatch")
124 assert.Equal(t, "420", constant.CValue(), "OTHER_PERM CValue mismatch")
125 case "REGULAR_INT":
126 assert.Equal(t, "42", constant.Value, "REGULAR_INT value mismatch")
127 assert.Equal(t, "42", constant.CValue(), "REGULAR_INT CValue mismatch")
128 }
129 }
130
131 require.NoError(t, generator.setupBuildDirectory())
132
133 // Test C file generation
134 require.NoError(t, generator.generateCFile())
135
136 cPath := filepath.Join(generator.BuildDir, generator.BaseName+".c")
137 cContent, err := os.ReadFile(cPath)
138 require.NoError(t, err)
139
140 cStr := string(cContent)
141
142 // Verify C file uses decimal values for octal constants
143 assert.Contains(t, cStr, `REGISTER_LONG_CONSTANT("FILE_PERM", 493, CONST_CS | CONST_PERSISTENT);`, "C file does not contain FILE_PERM registration with decimal value 493")
144 assert.Contains(t, cStr, `REGISTER_LONG_CONSTANT("OTHER_PERM", 420, CONST_CS | CONST_PERSISTENT);`, "C file does not contain OTHER_PERM registration with decimal value 420")

Callers

nothing calls this directly

Calls 5

parseSourceMethod · 0.95
setupBuildDirectoryMethod · 0.95
generateCFileMethod · 0.95
generateHeaderFileMethod · 0.95
CValueMethod · 0.80

Tested by

no test coverage detected