From a63a03322c87be7978612a194995e767976f2bf9 Mon Sep 17 00:00:00 2001 From: Shiffted Date: Sun, 14 Jun 2026 01:48:07 +0200 Subject: add tests for package load_from_xxx --- .../package/load_from_repository/foo/xmake.lua | 3 +++ tests/modules/package/load_from_repository/test.lua | 20 ++++++++++++++++++++ tests/projects/package/load_from_project/check.lua | 19 +++++++++++++++++++ tests/projects/package/load_from_project/test.lua | 3 +++ tests/projects/package/load_from_project/xmake.lua | 3 +++ 5 files changed, 48 insertions(+) create mode 100644 tests/modules/package/load_from_repository/foo/xmake.lua create mode 100644 tests/modules/package/load_from_repository/test.lua create mode 100644 tests/projects/package/load_from_project/check.lua create mode 100644 tests/projects/package/load_from_project/test.lua create mode 100644 tests/projects/package/load_from_project/xmake.lua diff --git a/tests/modules/package/load_from_repository/foo/xmake.lua b/tests/modules/package/load_from_repository/foo/xmake.lua new file mode 100644 index 000000000..a96023b7f --- /dev/null +++ b/tests/modules/package/load_from_repository/foo/xmake.lua @@ -0,0 +1,3 @@ +package("foo") + add_defines("FOO_BASE") +package_end() diff --git a/tests/modules/package/load_from_repository/test.lua b/tests/modules/package/load_from_repository/test.lua new file mode 100644 index 000000000..7899175d8 --- /dev/null +++ b/tests/modules/package/load_from_repository/test.lua @@ -0,0 +1,20 @@ +import("core.package.package") + +function test_load_from_repository(t) + local packagedir = path.absolute("foo") + local foo1 = package.load_from_repository("foo", packagedir, {}) + local foo2 = package.load_from_repository("foo", packagedir, {}) + assert(foo1 and foo2, "load_from_repository(foo) failed!") + + t:require(table.contains(table.wrap(foo1:get("defines")), "FOO_BASE")) + t:require(table.contains(table.wrap(foo2:get("defines")), "FOO_BASE")) + + -- mutating one instance should not leak into the other + foo1:add("defines", "FOO_LEAK") + t:require(table.contains(table.wrap(foo1:get("defines")), "FOO_LEAK")) + t:require_not(table.contains(table.wrap(foo2:get("defines")), "FOO_LEAK")) + + foo1:set("foo_leak", false) + t:require(foo1:get("foo_leak") == false) + t:require_not(foo2:get("foo_leak") == false) +end diff --git a/tests/projects/package/load_from_project/check.lua b/tests/projects/package/load_from_project/check.lua new file mode 100644 index 000000000..d9a4edd49 --- /dev/null +++ b/tests/projects/package/load_from_project/check.lua @@ -0,0 +1,19 @@ +import("core.package.package") + +function main() + local foo1 = package.load_from_project("foo") + local foo2 = package.load_from_project("foo") + assert(foo1 and foo2, "load_from_project(foo) failed!") + + assert(table.contains(table.wrap(foo1:get("defines")), "FOO_BASE"), "foo1 missing FOO_BASE") + assert(table.contains(table.wrap(foo2:get("defines")), "FOO_BASE"), "foo2 missing FOO_BASE") + + -- mutating one instance should not leak into the other + foo1:add("defines", "FOO_LEAK") + assert(table.contains(table.wrap(foo1:get("defines")), "FOO_LEAK"), "foo1 missing FOO_LEAK") + assert(not table.contains(table.wrap(foo2:get("defines")), "FOO_LEAK"), "FOO_LEAK leaked into foo2") + + foo1:set("foo_leak", false) + assert(foo1:get("foo_leak") == false, "foo1 foo_leak not set") + assert(foo2:get("foo_leak") ~= false, "foo_leak leaked into foo2") +end diff --git a/tests/projects/package/load_from_project/test.lua b/tests/projects/package/load_from_project/test.lua new file mode 100644 index 000000000..9ec42530e --- /dev/null +++ b/tests/projects/package/load_from_project/test.lua @@ -0,0 +1,3 @@ +function main(t) + os.exec("xmake l -vD check.lua") +end diff --git a/tests/projects/package/load_from_project/xmake.lua b/tests/projects/package/load_from_project/xmake.lua new file mode 100644 index 000000000..a96023b7f --- /dev/null +++ b/tests/projects/package/load_from_project/xmake.lua @@ -0,0 +1,3 @@ +package("foo") + add_defines("FOO_BASE") +package_end() -- cgit v1.3.1