(t *testing.T)
| 85 | } |
| 86 | |
| 87 | func 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 |
| 94 | const FILE_PERM = 0o755 |
| 95 | |
| 96 | //export_php:const |
| 97 | const OTHER_PERM = 0o644 |
| 98 | |
| 99 | //export_php:const |
| 100 | const REGULAR_INT = 42 |
| 101 | |
| 102 | func 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") |
nothing calls this directly
no test coverage detected