diff options
| author | ruki <[email protected]> | 2023-11-04 00:42:43 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-11-04 00:42:43 +0800 |
| commit | c081aec8e424290724739db98c768c83feef568a (patch) | |
| tree | e5f6fdf6fe41921d4f97bd20f9296a469c2f7bac | |
| parent | 63654a215803b9fa198d4abeaec9e9acbac7b855 (diff) | |
support shared test
| -rw-r--r-- | tests/projects/c++/doctest/src/foo.cpp | 2 | ||||
| -rw-r--r-- | tests/projects/c++/doctest/xmake.lua | 12 | ||||
| -rw-r--r-- | xmake/actions/test/main.lua | 95 |
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 |
