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);