From 4091487adfbfd07750524fd7910d7178af21f816 Mon Sep 17 00:00:00 2001 From: valmat Date: Fri, 28 Mar 2014 21:58:30 +0600 Subject: add test: 018-calling-php-functions --- tests/cpp/h/variables.h | 2 +- .../variables/013-017-calling-php-functions.h | 87 -------------- .../variables/013-018-calling-php-functions.h | 127 +++++++++++++++++++++ tests/cpp/main.cpp | 1 + .../phpt/variables/018-calling-php-functions.phpt | 32 ++++++ 5 files changed, 161 insertions(+), 88 deletions(-) delete mode 100644 tests/cpp/include/variables/013-017-calling-php-functions.h create mode 100644 tests/cpp/include/variables/013-018-calling-php-functions.h create mode 100644 tests/php/phpt/variables/018-calling-php-functions.phpt (limited to 'tests') diff --git a/tests/cpp/h/variables.h b/tests/cpp/h/variables.h index df0d923..3ff77e9 100644 --- a/tests/cpp/h/variables.h +++ b/tests/cpp/h/variables.h @@ -17,7 +17,7 @@ #include "../include/variables/008-value-arrays.h" #include "../include/variables/009-010-value-object.h" #include "../include/variables/011-012-value-casting-operators.h" -#include "../include/variables/013-017-calling-php-functions.h" +#include "../include/variables/013-018-calling-php-functions.h" //#include "../include/variables/.h" //#include "../include/variables/.h" diff --git a/tests/cpp/include/variables/013-017-calling-php-functions.h b/tests/cpp/include/variables/013-017-calling-php-functions.h deleted file mode 100644 index 94367e0..0000000 --- a/tests/cpp/include/variables/013-017-calling-php-functions.h +++ /dev/null @@ -1,87 +0,0 @@ -/** - * - * Test call function - * 013-calling-php-functions.phpt - * ... - * 017-calling-php-functions.phpt - * - */ - - -/** - * Set up namespace - */ -namespace TestVariables { - - - /* - * Test call function from user space - */ - void fnFromUserSpace(void) - { - - - Php::out << "fnFromUserSpace" << std::endl; - - Php::Value param5; - param5.set(0, "param5"); - param5.set(1, 3.14159265359); - param5.set(2, 28032014); - param5.set("key", "value"); - - auto timeZone = Php::Object("DateTimeZone", "Asia/Yekaterinburg"); - Php::Value param6 = Php::Object("DateTime", "2014-03-28 19:42:15", timeZone); - - // call a function from user space - Php::call("some_function", "param1"); - Php::call("some_function", "param1", "param2"); - Php::call("some_function", "param1", "param2", "param3"); - Php::call("some_function", "param1", "param2", "param3", "param4"); - Php::call("some_function", "param1", "param2", "param3", "param4", param5); - Php::call("some_function", "param1", "param2", "param3", "param4", param5, param6); - Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7"); - Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8"); - Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9"); - Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9", "param10"); - - } - - /* - * Test call callback - */ - void fnCallback(Php::Parameters ¶ms) - { - Php::out << "call callback" << std::endl; - - Php::Value callback = params[0]; - - - Php::Value param5; - param5.set(0, "param5"); - param5.set(1, 3.14159265359); - param5.set(2, 28032014); - param5.set("key", "value"); - - auto timeZone = Php::Object("DateTimeZone", "Asia/Yekaterinburg"); - Php::Value param6 = Php::Object("DateTime", "2014-03-28 19:42:15", timeZone); - - // call a function from user space - callback("param1"); - callback("param1", "param2"); - callback("param1", "param2", "param3"); - callback("param1", "param2", "param3", "param4"); - callback("param1", "param2", "param3", "param4", param5); - callback("param1", "param2", "param3", "param4", param5, param6); - callback("param1", "param2", "param3", "param4", "param5", "param6", "param7"); - callback("param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8"); - callback("param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9"); - callback("param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9", "param10"); - - } - - -/** - * End of namespace - */ -} - diff --git a/tests/cpp/include/variables/013-018-calling-php-functions.h b/tests/cpp/include/variables/013-018-calling-php-functions.h new file mode 100644 index 0000000..c646f60 --- /dev/null +++ b/tests/cpp/include/variables/013-018-calling-php-functions.h @@ -0,0 +1,127 @@ +/** + * + * Test call function + * 013-calling-php-functions.phpt + * ... + * 018-calling-php-functions.phpt + * + */ + + +/** + * Set up namespace + */ +namespace TestVariables { + + + /* + * Test call function from user space + */ + void fnFromUserSpace(void) + { + + + Php::out << "fnFromUserSpace" << std::endl; + + Php::Value param5; + param5.set(0, "param5"); + param5.set(1, 3.14159265359); + param5.set(2, 28032014); + param5.set("key", "value"); + + auto timeZone = Php::Object("DateTimeZone", "Asia/Yekaterinburg"); + Php::Value param6 = Php::Object("DateTime", "2014-03-28 19:42:15", timeZone); + + // call a function from user space + Php::call("some_function", "param1"); + Php::call("some_function", "param1", "param2"); + Php::call("some_function", "param1", "param2", "param3"); + Php::call("some_function", "param1", "param2", "param3", "param4"); + Php::call("some_function", "param1", "param2", "param3", "param4", param5); + Php::call("some_function", "param1", "param2", "param3", "param4", param5, param6); + Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7"); + Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8"); + Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9"); + Php::call("some_function", "param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9", "param10"); + + } + + /* + * Test call callback + */ + void fnCallback(Php::Parameters ¶ms) + { + Php::out << "call callback" << std::endl; + + Php::Value callback = params[0]; + + + Php::Value param5; + param5.set(0, "param5"); + param5.set(1, 3.14159265359); + param5.set(2, 28032014); + param5.set("key", "value"); + + auto timeZone = Php::Object("DateTimeZone", "Asia/Yekaterinburg"); + Php::Value param6 = Php::Object("DateTime", "2014-03-28 19:42:15", timeZone); + + // call a function from user space + callback("param1"); + callback("param1", "param2"); + callback("param1", "param2", "param3"); + callback("param1", "param2", "param3", "param4"); + callback("param1", "param2", "param3", "param4", param5); + callback("param1", "param2", "param3", "param4", param5, param6); + callback("param1", "param2", "param3", "param4", "param5", "param6", "param7"); + callback("param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8"); + callback("param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9"); + callback("param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8", "param9", "param10"); + + } + + /* + * Test + */ + void fnFromUserSpace2(void) + { + + // create an object (this will also call __construct()) + Php::Object time("DateTime", "2014-03-28 21:22:15", Php::Object("DateTimeZone", "Asia/Irkutsk")); + + // call a method on the datetime object + Php::out << time.call("format", "Y-m-d H:i:s") << std::endl; + + // in PHP it is possible to create an array with two parameters, the first + // parameter being an object, and the second parameter should be the name + // of the method, we can do that in PHP-CPP too + Php::Array time_format({time, "format"}); + + // call the method that is stored in the array + Php::out << time_format("Y-m-d H:i:s") << std::endl; + + // call method of class from user space + Php::Object usrspcl("usrspClass", "Mount Meru"); + Php::Array usrspcl_meth({usrspcl, "someMethod"}); + // call the method that is stored in the array + Php::out << usrspcl_meth("is in the Arctics") << std::endl; + + // call callable object of class from user space + Php::Object clbl("CallableClass", "Arctics around mount Meru"); + Php::out << clbl("is the birthplace of the Hyperboreans") << std::endl; + + + + //::someMethod + //(new usrspClass("Mount Meru"))->someMethod("is in the Arctics"); + + + + + + } + +/** + * End of namespace + */ +} + diff --git a/tests/cpp/main.cpp b/tests/cpp/main.cpp index 4db7b9c..5d0d0a6 100644 --- a/tests/cpp/main.cpp +++ b/tests/cpp/main.cpp @@ -103,6 +103,7 @@ extern "C" extension.add("TestVariables\\value_object1", TestVariables::value_object1); extension.add("TestVariables\\value_object2", TestVariables::value_object2); extension.add("TestVariables\\fnFromUserSpace", TestVariables::fnFromUserSpace); + extension.add("TestVariables\\fnFromUserSpace2", TestVariables::fnFromUserSpace2); extension.add("TestVariables\\fnCallback", TestVariables::fnCallback); diff --git a/tests/php/phpt/variables/018-calling-php-functions.phpt b/tests/php/phpt/variables/018-calling-php-functions.phpt new file mode 100644 index 0000000..1b8bfeb --- /dev/null +++ b/tests/php/phpt/variables/018-calling-php-functions.phpt @@ -0,0 +1,32 @@ +--TEST-- +calling-php-callable +--DESCRIPTION-- +call callable object of class from user space +call method of class from user space +--SKIPIF-- + +--FILEEOF-- +a = $a;} + public function __invoke($b){ echo "CallableClass({$this->a})::__invoke($b)";} + private $a = ""; +} + +class usrspClass { + function __construct($a){ $this->a = $a;} + function someMethod($b) {echo "usrspClass({$this->a})::someMethod($b)";} + private $a = ""; +} + + +TestVariables\fnFromUserSpace2(); + + +--EXPECT-- +2014-03-28 21:22:15 +2014-03-28 21:22:15 +usrspClass(Mount Meru)::someMethod(is in the Arctics) +CallableClass(Arctics around mount Meru)::__invoke(is the birthplace of the Hyperboreans) \ No newline at end of file -- cgit v1.2.3