summaryrefslogtreecommitdiff
path: root/tests/test_bind_as_slot.cc
diff options
context:
space:
mode:
authorMurray Cumming <murrayc@murrayc.com>2016-03-01 16:12:50 +0100
committerMurray Cumming <murrayc@murrayc.com>2016-03-01 16:19:51 +0100
commit9526ba21cc3f7b6bf24fa33741b81a8e3e879053 (patch)
treea54712cc9c4bf4904e2cb7f486553d088565c6c3 /tests/test_bind_as_slot.cc
parent611b26a78927212ce069b00cc3a18ea3aef5eaa0 (diff)
downloadsigc++-9526ba21cc3f7b6bf24fa33741b81a8e3e879053.tar.gz
Add test_bind_as_slot.
This tests sigc::bind()'s indirect use of adaptor_functor<>. I added this because this doesn't work yet in the variadic_bind branch.
Diffstat (limited to 'tests/test_bind_as_slot.cc')
-rw-r--r--tests/test_bind_as_slot.cc71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/test_bind_as_slot.cc b/tests/test_bind_as_slot.cc
new file mode 100644
index 0000000..28bcf4f
--- /dev/null
+++ b/tests/test_bind_as_slot.cc
@@ -0,0 +1,71 @@
+// -*- c++ -*-
+/* Copyright 2002, The libsigc++ Development Team
+ * Assigned to public domain. Use as you wish without restriction.
+ */
+
+#include "testutilities.h"
+#include <sigc++/adaptors/bind.h>
+#include <sigc++/functors/slot.h>
+#include <sstream>
+#include <string>
+#include <functional> //For std::ref().
+#include <cstdlib>
+
+namespace
+{
+
+std::ostringstream result_stream;
+
+bool func_to_bind(int a, int b)
+{
+ result_stream << "func_to_bind(" << a << ", " << b << ")";
+ return true;
+}
+
+bool func_to_bind_with_iter(int a, std::string::iterator& b)
+{
+ result_stream << "func_to_bind_with_iter(" << a << ", " << *b << ")";
+ return true;
+}
+
+bool func_to_bind_with_const_iter(int a, std::string::const_iterator& b)
+{
+ result_stream << "func_to_bind_with_const_iter(" << a << ", " << *b << ")";
+ return true;
+}
+
+} // end anonymous namespace
+
+int main(int argc, char* argv[])
+{
+ auto util = TestUtilities::get_instance();
+
+ if (!util->check_command_args(argc, argv))
+ return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
+
+
+ //Test that sigc::bind()'s result can be converted to a sigc::slot<>.
+ {
+ sigc::slot<bool, int> bound_slot = sigc::bind(sigc::ptr_fun(&func_to_bind), 2);
+ bound_slot(1);
+ util->check_result(result_stream, "func_to_bind(1, 2)");
+ }
+
+ //Test with a non-const iterator:
+ {
+ std::string c = "2";
+ sigc::slot<bool, int> bound_slot = sigc::bind(sigc::ptr_fun(&func_to_bind_with_iter), c.begin());
+ bound_slot(1);
+ util->check_result(result_stream, "func_to_bind_with_iter(1, 2)");
+ }
+
+ //Test with a const_iterator:
+ {
+ const std::string c = "2";
+ sigc::slot<bool, int> bound_slot = sigc::bind(sigc::ptr_fun(&func_to_bind_with_const_iter), c.begin());
+ bound_slot(1);
+ util->check_result(result_stream, "func_to_bind_with_const_iter(1, 2)");
+ }
+
+ return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
+}