test/test_Module.cpp in rice-1.3.0 vs test/test_Module.cpp in rice-1.3.1
- old
+ new
@@ -2,10 +2,11 @@
#include "rice/Module.hpp"
#include "rice/Exception.hpp"
#include "rice/Array.hpp"
#include "rice/Arg.hpp"
#include "rice/global_function.hpp"
+#include "rice/Constructor.hpp"
using namespace Rice;
TESTSUITE(Module);
@@ -254,17 +255,17 @@
}
/**
* Tests for default arguments
*/
-namespace
+namespace
{
int defaults_method_one_arg1;
int defaults_method_one_arg2;
bool defaults_method_one_arg3 = false;
- void defaults_method_one(int arg1, int arg2 = 3, bool arg3 = true)
+ void defaults_method_one(int arg1, int arg2 = 3, bool arg3 = true)
{
defaults_method_one_arg1 = arg1;
defaults_method_one_arg2 = arg2;
defaults_method_one_arg3 = arg3;
}
@@ -408,27 +409,54 @@
with_defaults_and_references_x = x;
with_defaults_and_references_doIt = doIt;
}
}
-template<>
-std::string* from_ruby<std::string*>(Rice::Object x) {
- return new std::string(from_ruby<char const*>(x));
-}
-
-TESTCASE(define_method_works_with_reference_arguments)
+TESTCASE(define_method_works_with_reference_arguments)
{
Module m(anonymous_module());
- m.define_module_function("foo", &with_defaults_and_references,
+ m.define_module_function("foo", &with_defaults_and_references,
(Arg("x"), Arg("doIt") = false));
m.call("foo", "test");
ASSERT_EQUAL("test", with_defaults_and_references_x);
ASSERT(!with_defaults_and_references_doIt);
}
+namespace {
+ class ReturnTest { };
+
+ class Factory {
+ public:
+ Factory() { returnTest_ = new ReturnTest(); }
+
+ const ReturnTest& getReturnTest() const {
+ return *returnTest_;
+ }
+
+ private:
+ const ReturnTest* returnTest_;
+ };
+}
+
+TESTCASE(define_method_works_with_const_reference_return)
+{
+ define_class<ReturnTest>("ReturnTest")
+ .define_constructor(Constructor<ReturnTest>());
+
+ define_class<Factory>("Factory")
+ .define_constructor(Constructor<Factory>())
+ .define_method("get_return_test", &Factory::getReturnTest);
+
+ Module m(anonymous_module());
+
+ Object result = m.instance_eval("Factory.new.get_return_test");
+
+ ASSERT_EQUAL("ReturnTest", result.class_of().name().c_str());
+}
+
/*
namespace {
float with_reference_defaults_x;
std::string with_reference_defaults_str;
@@ -437,13 +465,13 @@
with_reference_defaults_x = x;
with_reference_defaults_str = str;
}
}
-TESTCASE(define_method_works_with_reference_const_default_values)
+TESTCASE(define_method_works_with_reference_const_default_values)
{
Module m(anonymous_module());
- m.define_module_function("bar", &with_reference_defaults,
+ m.define_module_function("bar", &with_reference_defaults,
(Arg("x"), Arg("str") = std::string("testing")));
m.call("bar", 3);
ASSERT_EQUAL(3, with_reference_defaults_x);