summaryrefslogtreecommitdiff
path: root/ext/pybind11/tests/test_keep_alive.py
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pybind11/tests/test_keep_alive.py')
-rw-r--r--ext/pybind11/tests/test_keep_alive.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/ext/pybind11/tests/test_keep_alive.py b/ext/pybind11/tests/test_keep_alive.py
new file mode 100644
index 000000000..0cef34658
--- /dev/null
+++ b/ext/pybind11/tests/test_keep_alive.py
@@ -0,0 +1,97 @@
+import gc
+
+
+def test_keep_alive_argument(capture):
+ from pybind11_tests import Parent, Child
+
+ with capture:
+ p = Parent()
+ assert capture == "Allocating parent."
+ with capture:
+ p.addChild(Child())
+ gc.collect()
+ assert capture == """
+ Allocating child.
+ Releasing child.
+ """
+ with capture:
+ del p
+ gc.collect()
+ assert capture == "Releasing parent."
+
+ with capture:
+ p = Parent()
+ assert capture == "Allocating parent."
+ with capture:
+ p.addChildKeepAlive(Child())
+ gc.collect()
+ assert capture == "Allocating child."
+ with capture:
+ del p
+ gc.collect()
+ assert capture == """
+ Releasing parent.
+ Releasing child.
+ """
+
+
+def test_keep_alive_return_value(capture):
+ from pybind11_tests import Parent
+
+ with capture:
+ p = Parent()
+ assert capture == "Allocating parent."
+ with capture:
+ p.returnChild()
+ gc.collect()
+ assert capture == """
+ Allocating child.
+ Releasing child.
+ """
+ with capture:
+ del p
+ gc.collect()
+ assert capture == "Releasing parent."
+
+ with capture:
+ p = Parent()
+ assert capture == "Allocating parent."
+ with capture:
+ p.returnChildKeepAlive()
+ gc.collect()
+ assert capture == "Allocating child."
+ with capture:
+ del p
+ gc.collect()
+ assert capture == """
+ Releasing parent.
+ Releasing child.
+ """
+
+
+def test_return_none(capture):
+ from pybind11_tests import Parent
+
+ with capture:
+ p = Parent()
+ assert capture == "Allocating parent."
+ with capture:
+ p.returnNullChildKeepAliveChild()
+ gc.collect()
+ assert capture == ""
+ with capture:
+ del p
+ gc.collect()
+ assert capture == "Releasing parent."
+
+ with capture:
+ p = Parent()
+ assert capture == "Allocating parent."
+ with capture:
+ p.returnNullChildKeepAliveParent()
+ gc.collect()
+ assert capture == ""
+ with capture:
+ del p
+ gc.collect()
+ assert capture == "Releasing parent."