aboutsummaryrefslogtreecommitdiff
path: root/libs/plugin_python/tests/python/test_shared_cpp_owner.py
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
commit7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch)
tree27fb39be241fdb5ac2734c574de678977d1856d0 /libs/plugin_python/tests/python/test_shared_cpp_owner.py
Fluorine Manager: full Linux port of Mod Organizer 2
Complete native Linux port with FUSE-based virtual filesystem, Proton/umu-run integration, and Flatpak packaging. Key features: - FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak) - Proton/GE-Proton/umu-run launcher with env var forwarding - Flatpak support (sandbox-aware VFS, NXM handler, umu-run) - Wine prefix management UI - Case-insensitive path resolution for Linux filesystems - QSettings-safe INI handling (avoids Bethesda INI corruption) - Portable instance support with auto-generated launcher scripts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/plugin_python/tests/python/test_shared_cpp_owner.py')
-rw-r--r--libs/plugin_python/tests/python/test_shared_cpp_owner.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/libs/plugin_python/tests/python/test_shared_cpp_owner.py b/libs/plugin_python/tests/python/test_shared_cpp_owner.py
new file mode 100644
index 0000000..0bcecf7
--- /dev/null
+++ b/libs/plugin_python/tests/python/test_shared_cpp_owner.py
@@ -0,0 +1,72 @@
+import mobase_tests.shared_cpp_owner as m
+
+
+class PyBase(m.Base):
+ def __init__(self, name: str, value: int):
+ super().__init__(name)
+ self.value = value
+
+ def fn(self):
+ return f"PyBase.fn({self.value})"
+
+
+def test_shared_cpp_owner_1():
+ # create from C++, owned by Python
+
+ # create from C++
+ p = m.create("tmp")
+ assert m.is_alive("tmp")
+
+ # should delete since it's not owner by C++
+ del p
+ assert not m.is_alive("tmp")
+
+
+def test_shared_cpp_owner_2():
+ # create from C++, owned by C++ (and Python)
+
+ # create from C++
+ p = m.create_and_store("tmp")
+ assert m.is_alive("tmp")
+
+ # should not delete since it's owned by both C++ and Python
+ del p
+ assert m.is_alive("tmp")
+
+ # clear from C++ should free it
+ m.clear()
+ assert not m.is_alive("tmp")
+
+
+def test_shared_cpp_owner_3():
+ # create from Python, owned by Python
+
+ p = PyBase("foo", 1)
+ assert m.is_alive("foo")
+ assert m.call_fn("foo") == "PyBase.fn(1)"
+
+ del p
+ assert not m.is_alive("foo")
+
+
+def test_shared_cpp_owner_4():
+ # create from Python, owned by C++
+
+ p = PyBase("foo", 2)
+ assert m.is_alive("foo")
+
+ # send to C++
+ m.store(p)
+ assert m.is_alive("foo")
+ assert m.call_fn("foo") == "PyBase.fn(2)"
+
+ # delete in Python, should still be alived
+ del p
+ assert m.is_alive("foo")
+
+ # should still be able to call fn()
+ assert m.call_fn("foo") == "PyBase.fn(2)"
+
+ # clear in C++, should kill Python
+ m.clear()
+ assert not m.is_alive("foo")