summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-11-04 00:42:43 +0800
committerruki <[email protected]>2023-11-04 00:42:43 +0800
commitc081aec8e424290724739db98c768c83feef568a (patch)
treee5f6fdf6fe41921d4f97bd20f9296a469c2f7bac
parent63654a215803b9fa198d4abeaec9e9acbac7b855 (diff)
support shared test
-rw-r--r--tests/projects/c++/doctest/src/foo.cpp2
-rw-r--r--tests/projects/c++/doctest/xmake.lua12
-rw-r--r--xmake/actions/test/main.lua95
3 files changed, 62 insertions, 47 deletions
diff --git a/tests/projects/c++/doctest/src/foo.cpp b/tests/projects/c++/doctest/src/foo.cpp
new file mode 100644
index 000000000..a39080144
--- /dev/null
+++ b/tests/projects/c++/doctest/src/foo.cpp
@@ -0,0 +1,2 @@
+void foo() {
+}
diff --git a/tests/projects/c++/doctest/xmake.lua b/tests/projects/c++/doctest/xmake.lua
index 17be8d163..2a6037305 100644
--- a/tests/projects/c++/doctest/xmake.lua
+++ b/tests/projects/c++/doctest/xmake.lua
@@ -14,3 +14,15 @@ target("doctest")
defines = "DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN"})
end
+target("doctest_shared")
+ set_kind("shared")
+ add_files("src/foo.cpp")
+ for _, testfile in ipairs(os.files("tests/*.cpp")) do
+ add_tests(path.basename(testfile), {
+ kind = "binary",
+ files = testfile,
+ languages = "c++11",
+ packages = "doctest",
+ defines = "DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN"})
+ end
+
diff --git a/xmake/actions/test/main.lua b/xmake/actions/test/main.lua
index 510c87719..f61c6e1e0 100644
--- a/xmake/actions/test/main.lua
+++ b/xmake/actions/test/main.lua
@@ -344,56 +344,57 @@ function main()
group_pattern = "^" .. path.pattern(group_pattern) .. "$"
end
for _, target in ipairs(project.ordertargets()) do
- if target:is_binary() or target:script("run") then
- for _, name in ipairs(target:get("tests")) do
- local extra = target:extraconf("tests", name)
- local testname = target:name() .. "/" .. name
- local testinfo = {name = testname, target = target}
- if extra then
- table.join2(testinfo, extra)
- if extra.files then
- local target_new = target:clone()
- local scriptdir = target:scriptdir()
- target_new:name_set(target:name() .. "_" .. name)
- for _, file in ipairs(extra.files) do
- file = path.absolute(file, scriptdir)
- file = path.relative(file, os.projectdir())
- target_new:add("files", file, {defines = extra.defines,
- cflags = extra.cflags,
- cxflags = extra.cxflags,
- cxxflags = extra.cxxflags,
- undefines = extra.undefines,
- languages = extra.languages})
- project.target_add(target_new)
- end
- for _, file in ipairs(extra.remove_files) do
- file = path.absolute(file, scriptdir)
- file = path.relative(file, os.projectdir())
- target_new:remove("files", file)
- end
- if extra.frameworks then
- target_new:add("frameworks", extra.frameworks)
- end
- if extra.links then
- target_new:add("links", extra.links)
- end
- if extra.syslinks then
- target_new:add("syslinks", extra.syslinks)
- end
- if extra.packages then
- target_new:add("packages", extra.packages)
- end
- testinfo.target = target_new
+ for _, name in ipairs(target:get("tests")) do
+ local extra = target:extraconf("tests", name)
+ local testname = target:name() .. "/" .. name
+ local testinfo = {name = testname, target = target}
+ if extra then
+ table.join2(testinfo, extra)
+ if extra.files then
+ local target_new = target:clone()
+ local scriptdir = target:scriptdir()
+ target_new:name_set(target:name() .. "_" .. name)
+ for _, file in ipairs(extra.files) do
+ file = path.absolute(file, scriptdir)
+ file = path.relative(file, os.projectdir())
+ target_new:add("files", file, {defines = extra.defines,
+ cflags = extra.cflags,
+ cxflags = extra.cxflags,
+ cxxflags = extra.cxxflags,
+ undefines = extra.undefines,
+ languages = extra.languages})
+ project.target_add(target_new)
end
+ for _, file in ipairs(extra.remove_files) do
+ file = path.absolute(file, scriptdir)
+ file = path.relative(file, os.projectdir())
+ target_new:remove("files", file)
+ end
+ if extra.kind then
+ target_new:set("kind", kind)
+ end
+ if extra.frameworks then
+ target_new:add("frameworks", extra.frameworks)
+ end
+ if extra.links then
+ target_new:add("links", extra.links)
+ end
+ if extra.syslinks then
+ target_new:add("syslinks", extra.syslinks)
+ end
+ if extra.packages then
+ target_new:add("packages", extra.packages)
+ end
+ testinfo.target = target_new
end
- if not testinfo.group then
- testinfo.group = target:get("group")
- end
+ end
+ if not testinfo.group then
+ testinfo.group = target:get("group")
+ end
- local group = testinfo.group
- if (not group_pattern) or (group_pattern and group and group:match(group_pattern)) then
- tests[testname] = testinfo
- end
+ local group = testinfo.group
+ if (not group_pattern) or (group_pattern and group and group:match(group_pattern)) then
+ tests[testname] = testinfo
end
end
end