summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2017-04-03 13:33:21 +0200
committerEmilio Cobos Álvarez <emilio@crisal.io>2017-04-04 01:05:35 +0200
commit7aed4bab534c39c3c218d2fe54d6f86be07aac52 (patch)
tree86a2654ac6e57cc37b5745f37df8507e3fb7cc78
parentebcd36954fbdc090a5007196b6658c20b8a048ed (diff)
codegen: Add integration tests for destructors.
-rw-r--r--bindgen-integration/cpp/Test.cc11
-rw-r--r--bindgen-integration/cpp/Test.h8
-rwxr-xr-xbindgen-integration/src/lib.rs18
3 files changed, 36 insertions, 1 deletions
diff --git a/bindgen-integration/cpp/Test.cc b/bindgen-integration/cpp/Test.cc
index 1d962406..7b0ec4ad 100644
--- a/bindgen-integration/cpp/Test.cc
+++ b/bindgen-integration/cpp/Test.cc
@@ -21,6 +21,15 @@ Test::Test(double foo)
, m_double(foo)
{}
+AutoRestoreBool::AutoRestoreBool(bool* ptr)
+ : m_ptr(ptr)
+ , m_value(*ptr)
+{}
+
+AutoRestoreBool::~AutoRestoreBool() {
+ *m_ptr = m_value;
+}
+
namespace bitfields {
bool
@@ -47,4 +56,4 @@ Third::assert(int first, bool second, ItemKind third)
kind == third;
}
-}
+} // namespace bitfields
diff --git a/bindgen-integration/cpp/Test.h b/bindgen-integration/cpp/Test.h
index 310478bb..01c7aea1 100644
--- a/bindgen-integration/cpp/Test.h
+++ b/bindgen-integration/cpp/Test.h
@@ -64,3 +64,11 @@ struct Third {
};
} // namespace bitfields
+
+struct AutoRestoreBool {
+ bool* m_ptr;
+ bool m_value;
+
+ AutoRestoreBool(bool*);
+ ~AutoRestoreBool();
+};
diff --git a/bindgen-integration/src/lib.rs b/bindgen-integration/src/lib.rs
index 8d7eb753..be3c8451 100755
--- a/bindgen-integration/src/lib.rs
+++ b/bindgen-integration/src/lib.rs
@@ -101,3 +101,21 @@ fn test_bitfields_third() {
bindings::bitfields::ItemKind::ITEM_KIND_TRES)
});
}
+
+impl Drop for bindings::AutoRestoreBool {
+ fn drop(&mut self) {
+ unsafe { bindings::AutoRestoreBool::destruct(self) }
+ }
+}
+
+#[test]
+fn test_destructors() {
+ let mut v = true;
+
+ {
+ let auto_restore = unsafe { bindings::AutoRestoreBool::new(&mut v) };
+ v = false;
+ }
+
+ assert!(v, "Should've been restored when going out of scope");
+}