MCPcopy Index your code
hub / github.com/php/frankenphp / TestClassMethods

Function TestClassMethods

internal/extgen/classparser_test.go:122–186  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

120}
121
122func TestClassMethods(t *testing.T) {
123 var input = []byte(`package main
124
125//export_php:class User
126type UserStruct struct {
127 name string
128 Age int
129}
130
131//export_php:method User::getName(): string
132func GetUserName(u UserStruct) unsafe.Pointer {
133 return nil
134}
135
136//export_php:method User::setAge(int $age): void
137func SetUserAge(u *UserStruct, age int64) {
138 u.Age = int(age)
139}
140
141//export_php:method User::getInfo(string $prefix = "User"): string
142func GetUserInfo(u UserStruct, prefix *C.zend_string) unsafe.Pointer {
143 return nil
144}`)
145
146 tmpDir := t.TempDir()
147 fileName := filepath.Join(tmpDir, "test.go")
148 require.NoError(t, os.WriteFile(fileName, input, 0644))
149
150 parser := classParser{}
151 classes, err := parser.parse(fileName)
152 require.NoError(t, err)
153
154 require.Len(t, classes, 1, "Expected 1 class")
155
156 class := classes[0]
157 require.Len(t, class.Methods, 3, "Expected 3 methods")
158
159 getName := class.Methods[0]
160 assert.Equal(t, "getName", getName.Name, "Expected method name 'getName'")
161 assert.Equal(t, phpString, getName.ReturnType, "Expected return type 'string'")
162 assert.Empty(t, getName.Params, "Expected 0 params")
163 assert.Equal(t, "User", getName.ClassName, "Expected class name 'User'")
164
165 setAge := class.Methods[1]
166 assert.Equal(t, "setAge", setAge.Name, "Expected method name 'setAge'")
167 assert.Equal(t, phpVoid, setAge.ReturnType, "Expected return type 'void'")
168 require.Len(t, setAge.Params, 1, "Expected 1 param")
169
170 param := setAge.Params[0]
171 assert.Equal(t, "age", param.Name, "Expected param name 'age'")
172 assert.Equal(t, phpInt, param.PhpType, "Expected param type 'int'")
173 assert.False(t, param.IsNullable, "Expected param to not be nullable")
174 assert.False(t, param.HasDefault, "Expected param to not have default value")
175
176 getInfo := class.Methods[2]
177 assert.Equal(t, "getInfo", getInfo.Name, "Expected method name 'getInfo'")
178 assert.Equal(t, phpString, getInfo.ReturnType, "Expected return type 'string'")
179 require.Len(t, getInfo.Params, 1, "Expected 1 param")

Callers

nothing calls this directly

Calls 1

parseMethod · 0.95

Tested by

no test coverage detected