llcppsymg:config & clangutil test
llcppsymg:clangutil test
This commit is contained in:
119
chore/_xtool/llcppsymg/_cmptest/clangutils_test/clangutils.go
Normal file
119
chore/_xtool/llcppsymg/_cmptest/clangutils_test/clangutils.go
Normal file
@@ -0,0 +1,119 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/c/clang"
|
||||
"github.com/goplus/llgo/chore/_xtool/llcppsymg/clangutils"
|
||||
)
|
||||
|
||||
func main() {
|
||||
TestClangUtil()
|
||||
}
|
||||
|
||||
func TestClangUtil() {
|
||||
testCases := []struct {
|
||||
name string
|
||||
content string
|
||||
isTemp bool
|
||||
isCpp bool
|
||||
}{
|
||||
{
|
||||
name: "C Header File",
|
||||
content: `
|
||||
int test_function(int a, int b);
|
||||
void another_function(void);
|
||||
`,
|
||||
isTemp: false,
|
||||
isCpp: false,
|
||||
},
|
||||
{
|
||||
name: "C++ Temp File",
|
||||
content: `
|
||||
class TestClass {
|
||||
public:
|
||||
void test_method();
|
||||
static int static_method(float f);
|
||||
};
|
||||
|
||||
namespace TestNamespace {
|
||||
void namespaced_function();
|
||||
}
|
||||
`,
|
||||
isTemp: true,
|
||||
isCpp: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
fmt.Printf("=== Test Case: %s ===\n", tc.name)
|
||||
|
||||
var filePath string
|
||||
var tempFile *os.File
|
||||
if tc.isTemp {
|
||||
filePath = tc.content
|
||||
} else {
|
||||
var err error
|
||||
tempFile, err = os.CreateTemp("", "test_*.h")
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to create temporary file: %v\n", err)
|
||||
continue
|
||||
}
|
||||
|
||||
_, err = tempFile.Write([]byte(tc.content))
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to write to temporary file: %v\n", err)
|
||||
tempFile.Close()
|
||||
os.Remove(tempFile.Name())
|
||||
continue
|
||||
}
|
||||
tempFile.Close()
|
||||
filePath = tempFile.Name()
|
||||
}
|
||||
|
||||
config := &clangutils.Config{
|
||||
File: filePath,
|
||||
Temp: tc.isTemp,
|
||||
IsCpp: tc.isCpp,
|
||||
}
|
||||
index, unit, err := clangutils.CreateTranslationUnit(config)
|
||||
if err != nil {
|
||||
fmt.Printf("CreateTranslationUnit failed: %v\n", err)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Println("CreateTranslationUnit succeeded")
|
||||
|
||||
cursor := unit.Cursor()
|
||||
|
||||
clangutils.VisitChildren(cursor, func(cursor, parent clang.Cursor) clang.ChildVisitResult {
|
||||
switch cursor.Kind {
|
||||
case clang.CursorFunctionDecl, clang.CursorCXXMethod:
|
||||
funcName := cursor.String()
|
||||
fmt.Printf("Function/Method: %s\n", c.GoString(funcName.CStr()))
|
||||
parts := clangutils.BuildScopingParts(cursor)
|
||||
fmt.Printf("Scoping parts: %v\n", parts)
|
||||
funcName.Dispose()
|
||||
case clang.CursorClassDecl:
|
||||
className := cursor.String()
|
||||
fmt.Printf("Class: %s\n", c.GoString(className.CStr()))
|
||||
className.Dispose()
|
||||
case clang.CursorNamespace:
|
||||
namespaceName := cursor.String()
|
||||
fmt.Printf("Namespace: %s\n", c.GoString(namespaceName.CStr()))
|
||||
namespaceName.Dispose()
|
||||
}
|
||||
return clang.ChildVisit_Recurse
|
||||
})
|
||||
index.Dispose()
|
||||
unit.Dispose()
|
||||
|
||||
if !tc.isTemp && tempFile != nil {
|
||||
os.Remove(tempFile.Name())
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
}
|
||||
}
|
||||
23
chore/_xtool/llcppsymg/_cmptest/clangutils_test/llgo.expect
Normal file
23
chore/_xtool/llcppsymg/_cmptest/clangutils_test/llgo.expect
Normal file
@@ -0,0 +1,23 @@
|
||||
#stdout
|
||||
=== Test Case: C Header File ===
|
||||
CreateTranslationUnit succeeded
|
||||
Function/Method: test_function
|
||||
Scoping parts: [test_function]
|
||||
Function/Method: another_function
|
||||
Scoping parts: [another_function]
|
||||
|
||||
=== Test Case: C++ Temp File ===
|
||||
CreateTranslationUnit succeeded
|
||||
Class: TestClass
|
||||
Function/Method: test_method
|
||||
Scoping parts: [TestClass test_method]
|
||||
Function/Method: static_method
|
||||
Scoping parts: [TestClass static_method]
|
||||
Namespace: TestNamespace
|
||||
Function/Method: namespaced_function
|
||||
Scoping parts: [TestNamespace namespaced_function]
|
||||
|
||||
|
||||
#stderr
|
||||
|
||||
#exit 0
|
||||
63
chore/_xtool/llcppsymg/_cmptest/config_test/config.go
Normal file
63
chore/_xtool/llcppsymg/_cmptest/config_test/config.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/goplus/llgo/chore/_xtool/llcppsymg/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
TestGetConf()
|
||||
}
|
||||
|
||||
func TestGetConf() {
|
||||
testCases := []struct {
|
||||
name string
|
||||
input string
|
||||
}{
|
||||
{
|
||||
name: "SQLite configuration",
|
||||
input: `{
|
||||
"name": "sqlite",
|
||||
"cflags": "-I/opt/homebrew/opt/sqlite/include",
|
||||
"include": ["sqlite3.h"],
|
||||
"libs": "-L/opt/homebrew/opt/sqlite/lib -lsqlite3",
|
||||
"trimPrefixes": ["sqlite3_"],
|
||||
"cplusplus": false
|
||||
}`,
|
||||
},
|
||||
{
|
||||
name: "Lua configuration",
|
||||
input: `{
|
||||
"name": "lua",
|
||||
"cflags": "-I/opt/homebrew/include/lua",
|
||||
"include": ["lua.h"],
|
||||
"libs": "-L/opt/homebrew/lib -llua -lm",
|
||||
"trimPrefixes": ["lua_", "lua_"],
|
||||
"cplusplus": false
|
||||
}`,
|
||||
},
|
||||
{
|
||||
name: "Invalid JSON",
|
||||
input: `{invalid json}`,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
fmt.Printf("=== Test case: %s ===\n", tc.name)
|
||||
result, err := config.GetConf([]byte(tc.input))
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err.Error())
|
||||
} else {
|
||||
fmt.Println("Name:", result.Config.Name)
|
||||
fmt.Println("CFlags:", result.Config.CFlags)
|
||||
fmt.Println("Libs:", result.Config.Libs)
|
||||
fmt.Println("Include:", strings.Join(result.Config.Include, ", "))
|
||||
fmt.Println("TrimPrefixes:", strings.Join(result.Config.TrimPrefixes, ", "))
|
||||
fmt.Println("Cplusplus:", result.Config.Cplusplus)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
}
|
||||
24
chore/_xtool/llcppsymg/_cmptest/config_test/llgo.expect
Normal file
24
chore/_xtool/llcppsymg/_cmptest/config_test/llgo.expect
Normal file
@@ -0,0 +1,24 @@
|
||||
#stdout
|
||||
=== Test case: SQLite configuration ===
|
||||
Name: sqlite
|
||||
CFlags: -I/opt/homebrew/opt/sqlite/include
|
||||
Libs: -L/opt/homebrew/opt/sqlite/lib -lsqlite3
|
||||
Include: sqlite3.h
|
||||
TrimPrefixes: sqlite3_
|
||||
Cplusplus: false
|
||||
|
||||
=== Test case: Lua configuration ===
|
||||
Name: lua
|
||||
CFlags: -I/opt/homebrew/include/lua
|
||||
Libs: -L/opt/homebrew/lib -llua -lm
|
||||
Include: lua.h
|
||||
TrimPrefixes: lua_, lua_
|
||||
Cplusplus: false
|
||||
|
||||
=== Test case: Invalid JSON ===
|
||||
Error: failed to parse config
|
||||
|
||||
|
||||
#stderr
|
||||
|
||||
#exit 0
|
||||
Reference in New Issue
Block a user