summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorvalmat <ufabiz@gmail.com>2014-03-28 19:00:17 +0600
committervalmat <ufabiz@gmail.com>2014-03-28 19:00:17 +0600
commit708a22fae15b13db871ca5ffc73004c70f0584fe (patch)
tree639e424f544f8ca5c950803620399c57fceb69bd /tests
parent7bc500847e3027bb785c5525a21078ff72acc2ab (diff)
Changed the structure of the test file. With the increasing number of tests the old structure became uncomfortable.
Diffstat (limited to 'tests')
-rw-r--r--tests/cpp/h/Classes_and_objects.h14
-rw-r--r--tests/cpp/h/ValueIterator.h8
-rw-r--r--tests/cpp/h/variables.h28
-rw-r--r--tests/cpp/include/Classes_and_objects.h199
-rw-r--r--tests/cpp/include/bool2str.h12
-rw-r--r--tests/cpp/include/class_obj/001-002.h66
-rw-r--r--tests/cpp/include/class_obj/003-comparable.h74
-rw-r--r--tests/cpp/include/class_obj/004-static-funct.h90
-rw-r--r--tests/cpp/include/class_obj/tpl.h25
-rw-r--r--tests/cpp/include/valueiterator/001-006.h27
-rw-r--r--tests/cpp/include/valueiterator/007.h (renamed from tests/cpp/include/ValueIterator.h)12
-rw-r--r--tests/cpp/include/variables.h366
-rw-r--r--tests/cpp/include/variables/001-process_globals.h57
-rw-r--r--tests/cpp/include/variables/002-get_complex_array.h35
-rw-r--r--tests/cpp/include/variables/003-value-types.h39
-rw-r--r--tests/cpp/include/variables/004-store-scalar-variables.h48
-rw-r--r--tests/cpp/include/variables/005-cast-objects-to-scalars.h75
-rw-r--r--tests/cpp/include/variables/006-casting-obj2str.h30
-rw-r--r--tests/cpp/include/variables/007-overloaded-operators.h46
-rw-r--r--tests/cpp/include/variables/008-value-arrays.h57
-rw-r--r--tests/cpp/include/variables/009-010-value-object.h68
-rw-r--r--tests/cpp/include/variables/011-012-value-casting-operators.h52
-rw-r--r--tests/cpp/include/variables/tpl.h30
-rw-r--r--tests/cpp/main.cpp9
-rw-r--r--tests/php/phpt/variables/005-cast-objects-to-scalars.phpt4
25 files changed, 889 insertions, 582 deletions
diff --git a/tests/cpp/h/Classes_and_objects.h b/tests/cpp/h/Classes_and_objects.h
new file mode 100644
index 0000000..8404c69
--- /dev/null
+++ b/tests/cpp/h/Classes_and_objects.h
@@ -0,0 +1,14 @@
+/**
+ *
+ *
+ * Classes_and_objects.h
+ *
+ */
+
+#include "../include/class_obj/001-002.h"
+#include "../include/class_obj/003-comparable.h"
+#include "../include/class_obj/004-static-funct.h"
+//#include "../include/class_obj/.h"
+//#include "../include/class_obj/.h"
+//#include "../include/class_obj/.h"
+
diff --git a/tests/cpp/h/ValueIterator.h b/tests/cpp/h/ValueIterator.h
new file mode 100644
index 0000000..b430008
--- /dev/null
+++ b/tests/cpp/h/ValueIterator.h
@@ -0,0 +1,8 @@
+/**
+ *
+ * TestValueIterator
+ *
+ */
+
+#include "../include/valueiterator/001-006.h"
+#include "../include/valueiterator/007.h"
diff --git a/tests/cpp/h/variables.h b/tests/cpp/h/variables.h
new file mode 100644
index 0000000..e884481
--- /dev/null
+++ b/tests/cpp/h/variables.h
@@ -0,0 +1,28 @@
+/**
+ *
+ * Test variables
+ *
+ */
+
+#include "../include/doubl2str.h"
+#include "../include/bool2str.h"
+
+#include "../include/variables/001-process_globals.h"
+#include "../include/variables/002-get_complex_array.h"
+#include "../include/variables/003-value-types.h"
+#include "../include/variables/004-store-scalar-variables.h"
+#include "../include/variables/005-cast-objects-to-scalars.h"
+#include "../include/variables/006-casting-obj2str.h"
+#include "../include/variables/007-overloaded-operators.h"
+#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/.h"
+//#include "../include/variables/.h"
+//#include "../include/variables/.h"
+
+
+
+
+
+
diff --git a/tests/cpp/include/Classes_and_objects.h b/tests/cpp/include/Classes_and_objects.h
deleted file mode 100644
index 0977da9..0000000
--- a/tests/cpp/include/Classes_and_objects.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- *
- *
- * Classes_and_objects.h
- *
- */
-
-
-/**
- * Set up namespace
- */
-namespace TestBaseClass {
-
-
-
- class MyCustomClass : public Php::Base, public Php::Countable
- {
- private:
- int _x = 3;
-
- public:
- MyCustomClass()
- {
- std::cerr << "MyCustomClass::MyCustomClass()" << std::endl;
- }
-
- MyCustomClass(int value) : _x(value)
- {
- std::cerr << "MyCustomClass::MyCustomClass(" << value << ")" << std::endl;
- }
-
- MyCustomClass(const MyCustomClass &that)
- {
- //std::cerr << "MyCustomClass::MyCustomClass copy constructor" << std::endl;
- }
-
- virtual ~MyCustomClass()
- {
- std::cerr << "MyCustomClass::~MyCustomClass" << std::endl;
- }
-
- virtual long int count() override
- {
- return 33;
- }
-
- Php::Value myMethod(Php::Parameters &params)
- {
- // check number of parameters
- //if (params.size() != 1) throw Php::Exception("Invalid number of parameters supplied");
-
- Php::out << "myMethod is called for object " << _x << std::endl;
-
- return 5;
-
- }
- };
-
-
- /**
- * Test custom comparison operator
- */
- class Comparable : public Php::Base
- {
- private:
- /**
- * Internal value of the class
- * @var int
- */
- static int count;
- int _nom;
- int _value;
-
- public:
- /**
- * C++ constructor
- */
- Comparable()
- {
- // start with random value
- //_value = rand();
- _nom = ++count;
- _value = _nom%2+1;
- }
-
- /**
- * C++ destructor
- */
- virtual ~Comparable() {}
-
- /**
- * Cast the object to a string
- * @return std::string
- */
- std::string __toString()
- {
- return "Obj#" + std::to_string(_nom) + "(" + std::to_string(_value) + ")";
- }
-
- /**
- * Compare with a different object
- * @param that
- * @return int
- */
- int __compare(const Comparable &that) const
- {
- return _value - that._value;
- }
- };
- int Comparable::count = 0;
-
-
- /**
- * Begin test static functions
- */
-
-
- /**
- * Regular function
- *
- * Because a regular function does not have a 'this' pointer,
- * it has the same signature as static methods
- *
- * @param params Parameters passed to the function
- */
- void testStaticRegFunc(Php::Parameters &params)
- {
- Php::out << "testStatic regular function"<< std::endl;
- }
-
- /**
- * A very simple class that will not be exported to PHP
- */
- class testStaticPrivClass
- {
- public:
- /**
- * C++ constructor and destructor
- */
- testStaticPrivClass() {}
- virtual ~testStaticPrivClass() {}
-
- /**
- * Static method
- *
- * A static method also has no 'this' pointer and has
- * therefore a signature identical to regular functions
- *
- * @param params Parameters passed to the method
- */
- static void staticMethod(Php::Parameters &params)
- {
- Php::out << "testStaticPrivClass::staticMethod()"<< std::endl;
- }
- };
-
- /**
- * A very simple class that will be exported to PHP
- */
- class testStaticPubClass : public Php::Base
- {
- public:
- /**
- * C++ constructor and destructor
- */
- testStaticPubClass() {}
- virtual ~testStaticPubClass() {}
-
- /**
- * Another static method
- *
- * This static has exactly the same signature as the
- * regular function and static method that were mentioned
- * before
- *
- * @param params Parameters passed to the method
- */
- static void staticMethod(Php::Parameters &params)
- {
- Php::out << "testStaticPubClass::staticMethod()"<< std::endl;
- }
- };
-
-
- /**
- * End test static functions
- */
-
-
-
-
-
-
-/**
- * End of namespace
- */
-}
-
- \ No newline at end of file
diff --git a/tests/cpp/include/bool2str.h b/tests/cpp/include/bool2str.h
new file mode 100644
index 0000000..26aac80
--- /dev/null
+++ b/tests/cpp/include/bool2str.h
@@ -0,0 +1,12 @@
+/**
+ *
+ * bool -> string
+ *
+ */
+
+
+
+std::string bool2str(bool b)
+{
+ return b ? "Yes" : "No";
+}
diff --git a/tests/cpp/include/class_obj/001-002.h b/tests/cpp/include/class_obj/001-002.h
new file mode 100644
index 0000000..2a3b4df
--- /dev/null
+++ b/tests/cpp/include/class_obj/001-002.h
@@ -0,0 +1,66 @@
+/**
+ *
+ * Test Classes and objects
+ * 001.phpt
+ * 002.phpt
+ *
+ */
+
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestBaseClass {
+
+
+ class MyCustomClass : public Php::Base, public Php::Countable
+ {
+ private:
+ int _x = 3;
+
+ public:
+ MyCustomClass()
+ {
+ std::cerr << "MyCustomClass::MyCustomClass()" << std::endl;
+ }
+
+ MyCustomClass(int value) : _x(value)
+ {
+ std::cerr << "MyCustomClass::MyCustomClass(" << value << ")" << std::endl;
+ }
+
+ MyCustomClass(const MyCustomClass &that)
+ {
+ //std::cerr << "MyCustomClass::MyCustomClass copy constructor" << std::endl;
+ }
+
+ virtual ~MyCustomClass()
+ {
+ std::cerr << "MyCustomClass::~MyCustomClass" << std::endl;
+ }
+
+ virtual long int count() override
+ {
+ return 33;
+ }
+
+ Php::Value myMethod(Php::Parameters &params)
+ {
+ // check number of parameters
+ //if (params.size() != 1) throw Php::Exception("Invalid number of parameters supplied");
+
+ Php::out << "myMethod is called for object " << _x << std::endl;
+
+ return 5;
+
+ }
+ };
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/class_obj/003-comparable.h b/tests/cpp/include/class_obj/003-comparable.h
new file mode 100644
index 0000000..8a384dc
--- /dev/null
+++ b/tests/cpp/include/class_obj/003-comparable.h
@@ -0,0 +1,74 @@
+/**
+ *
+ * Test Classes and objects
+ * 003-comparable.phpt
+ *
+ */
+
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestBaseClass {
+
+
+ /**
+ * Test custom comparison operator
+ */
+ class Comparable : public Php::Base
+ {
+ private:
+ /**
+ * Internal value of the class
+ * @var int
+ */
+ static int count;
+ int _nom;
+ int _value;
+
+ public:
+ /**
+ * C++ constructor
+ */
+ Comparable()
+ {
+ // start with random value
+ //_value = rand();
+ _nom = ++count;
+ _value = _nom%2+1;
+ }
+
+ /**
+ * C++ destructor
+ */
+ virtual ~Comparable() {}
+
+ /**
+ * Cast the object to a string
+ * @return std::string
+ */
+ std::string __toString()
+ {
+ return "Obj#" + std::to_string(_nom) + "(" + std::to_string(_value) + ")";
+ }
+
+ /**
+ * Compare with a different object
+ * @param that
+ * @return int
+ */
+ int __compare(const Comparable &that) const
+ {
+ return _value - that._value;
+ }
+ };
+ int Comparable::count = 0;
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/class_obj/004-static-funct.h b/tests/cpp/include/class_obj/004-static-funct.h
new file mode 100644
index 0000000..d6816ab
--- /dev/null
+++ b/tests/cpp/include/class_obj/004-static-funct.h
@@ -0,0 +1,90 @@
+/**
+ *
+ * Test Classes and objects
+ * 004-static-funct.phpt
+ * test static functions
+ *
+ */
+
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestBaseClass {
+
+
+ /**
+ * Regular function
+ *
+ * Because a regular function does not have a 'this' pointer,
+ * it has the same signature as static methods
+ *
+ * @param params Parameters passed to the function
+ */
+ void testStaticRegFunc(Php::Parameters &params)
+ {
+ Php::out << "testStatic regular function"<< std::endl;
+ }
+
+ /**
+ * A very simple class that will not be exported to PHP
+ */
+ class testStaticPrivClass
+ {
+ public:
+ /**
+ * C++ constructor and destructor
+ */
+ testStaticPrivClass() {}
+ virtual ~testStaticPrivClass() {}
+
+ /**
+ * Static method
+ *
+ * A static method also has no 'this' pointer and has
+ * therefore a signature identical to regular functions
+ *
+ * @param params Parameters passed to the method
+ */
+ static void staticMethod(Php::Parameters &params)
+ {
+ Php::out << "testStaticPrivClass::staticMethod()"<< std::endl;
+ }
+ };
+
+ /**
+ * A very simple class that will be exported to PHP
+ */
+ class testStaticPubClass : public Php::Base
+ {
+ public:
+ /**
+ * C++ constructor and destructor
+ */
+ testStaticPubClass() {}
+ virtual ~testStaticPubClass() {}
+
+ /**
+ * Another static method
+ *
+ * This static has exactly the same signature as the
+ * regular function and static method that were mentioned
+ * before
+ *
+ * @param params Parameters passed to the method
+ */
+ static void staticMethod(Php::Parameters &params)
+ {
+ Php::out << "testStaticPubClass::staticMethod()"<< std::endl;
+ }
+ };
+
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/class_obj/tpl.h b/tests/cpp/include/class_obj/tpl.h
new file mode 100644
index 0000000..7dfdcfc
--- /dev/null
+++ b/tests/cpp/include/class_obj/tpl.h
@@ -0,0 +1,25 @@
+/**
+ *
+ * Test Classes and objects
+ * phptname.phpt
+ *
+ */
+
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestBaseClass {
+
+
+
+
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/valueiterator/001-006.h b/tests/cpp/include/valueiterator/001-006.h
new file mode 100644
index 0000000..0dc6778
--- /dev/null
+++ b/tests/cpp/include/valueiterator/001-006.h
@@ -0,0 +1,27 @@
+/**
+ *
+ * TestValueIterator
+ * test valueiterator/001.phpt-valueiterator/006.phpt
+ *
+ */
+
+/**
+ * Set up namespace
+ */
+namespace TestValueIterator {
+
+
+ void loopValue(Php::Parameters &params)
+ {
+ std::cout << "Array/Object contains " << params[0].size() << " items" << std::endl;
+ for (auto it=params[0].begin(), itend = params[0].end(); it != itend; ++it) {
+ std::cout << "["<< it->first << "]="<< it->second << std::endl;
+ //std::cout << "["<< it->key() << "]="<< it->value() << std::endl;
+ }
+ return;
+ }
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/ValueIterator.h b/tests/cpp/include/valueiterator/007.h
index 689797a..3cfcb59 100644
--- a/tests/cpp/include/ValueIterator.h
+++ b/tests/cpp/include/valueiterator/007.h
@@ -1,6 +1,7 @@
/**
*
* TestValueIterator
+ * test valueiterator/007.phpt
*
*/
@@ -9,17 +10,6 @@
*/
namespace TestValueIterator {
-
- void loopValue(Php::Parameters &params)
- {
- std::cout << "Array/Object contains " << params[0].size() << " items" << std::endl;
- for (auto it=params[0].begin(), itend = params[0].end(); it != itend; ++it) {
- std::cout << "["<< it->first << "]="<< it->second << std::endl;
- //std::cout << "["<< it->key() << "]="<< it->value() << std::endl;
- }
- return;
- }
-
void loopArray(void)
{
diff --git a/tests/cpp/include/variables.h b/tests/cpp/include/variables.h
deleted file mode 100644
index e8cb526..0000000
--- a/tests/cpp/include/variables.h
+++ /dev/null
@@ -1,366 +0,0 @@
-/**
- *
- * Test variables
- *
- */
-
- #include "doubl2str.h"
-
-/**
- * Set up namespace
- */
-namespace TestVariables {
-
-
- /**
- * process_globals()
- *
- * This function reads and modifies global variables
- */
- Php::Value process_globals()
- {
- // all global variables can be accessed via the Php::GLOBALS variable,
- // which is more or less the same as the PHP $_GLOBALS variable
-
- // set a global variable
- Php::GLOBALS["a"] = 1;
-
- // increment a global variable
- Php::GLOBALS["b"] += 1;
-
- // set a global variable to be an array
- Php::GLOBALS["c"] = Php::Array();
-
- // add a member to an array
- Php::GLOBALS["c"]["member"] = 123;
-
- // and increment it
- Php::GLOBALS["c"]["member"] += 77;
-
- // change value e
- Php::GLOBALS["e"] = Php::GLOBALS["e"][0]("hello");
-
- // if a global variable holds a function, we can call it
- return Php::GLOBALS["d"](1,2,3);
- }
-
- /**
- * This function returns complex array
- */
- Php::Value get_complex_array()
- {
- Php::Value r;
- r["a"] = 123;
- r["b"] = 456;
- r["c"][0] = "nested value";
- r["c"][1] = "example";
- r["c"][2] = 7;
- return r;
- }
-
-
- std::string bool2str(bool b)
- {
- return b ? "Yes" : "No";
- }
-
- /*
- * Check type of value
- * @param array
- */
- void value_types(Php::Parameters &params) {
- if (params.size() == 0) {
- return;
- }
-
- Php::Value arr = params[0];
-
- Php::out << "Null: " << bool2str( arr.get("Null").type() == Php::Type::Null ) << std::endl;
- Php::out << "Numeric: " << bool2str( arr.get("Numeric").type() == Php::Type::Numeric ) << std::endl;
- Php::out << "Float: " << bool2str( arr.get("Float").type() == Php::Type::Float ) << std::endl;
- Php::out << "Bool: " << bool2str( arr.get("Bool").type() == Php::Type::Bool ) << std::endl;
- Php::out << "Array: " << bool2str( arr.get("Array").type() == Php::Type::Array ) << std::endl;
- Php::out << "Object: " << bool2str( arr.get("Object").type() == Php::Type::Object ) << std::endl;
- Php::out << "String: " << bool2str( arr.get("String").type() == Php::Type::String ) << std::endl;
- Php::out << "Resource: " << bool2str( arr.get("Resource").type() == Php::Type::Resource ) << std::endl;
- Php::out << "Constant: " << bool2str( arr.get("Constant").type() == Php::Type::Constant ) << std::endl;
- Php::out << "ConstantArray: " << bool2str( arr.get("ConstantArray").type() == Php::Type::ConstantArray ) << std::endl;
- Php::out << "Callable1: " << bool2str( arr.get("Callable1").type() == Php::Type::Callable ) << std::endl;
- Php::out << "Callable2: " << bool2str( arr.get("Callable2").type() == Php::Type::Callable ) << std::endl;
- Php::out << "Callable3: " << bool2str( arr.get("Callable3").type() == Php::Type::Callable ) << std::endl;
- Php::out << "Callable4: " << bool2str( arr.get("Callable4").type() == Php::Type::Callable ) << std::endl;
- }
-
- /*
- * Test variables defined in PHP-CPP
- */
- Php::Value scalar_store(void) {
-
- Php::Value value1 = 1234;
- Php::Value value2 = "this is a string";
- Php::Value value3 = std::string("another string");
- Php::Value value4 = nullptr;
- Php::Value value5 = 123.45;
- Php::Value value6 = true;
-
- Php::Value r;
- r[0] = value1;
- r[1] = value2;
- r[2] = value3;
- r[3] = value4;
- r[4] = value5;
- r[5] = value6;
-
- r[6] = 1234;
- r[7] = "this is a string";
- r[8] = std::string("another string");
- r[9] = nullptr;
- r[10] = Php::Value();
- r[11] = 123.45;
- r[12] = false;
-
- return r;
- }
-
-
- /*
- * Test Php::Value casting operators
- */
- void value_casting(Php::Parameters &params)
- {
- Php::Value value = params[0];
-
- long value1 = value;
- std::string value2 = value;
- bool value4 = value;
-
- Php::out << " long:" << value1 << "\n string:" << value2 << "\n bool:" << bool2str(value4) << std::endl;
- }
-
-
- /*
- * Test Php::Value casting operators
- */
- void value_cast2double(Php::Parameters &params)
- {
- Php::Value value = params[0];
- double value3 = value;
-
- /*
- * The remark (from valmat).
- * Somehow std::to_string truncates the tail of numbers of type `double` when converting it to a string.
- * So I wrote my own function `double2str()`, which does not have this drawback.
- */
- Php::out << double2str(value3) << std::endl;
- }
-
- /*
- * Test Php::Value casting operators
- */
- void value_cast2str(Php::Parameters &params)
- {
- std::string value = params[0];
- Php::out << value << std::endl;
- }
-
- /*
- * Test Php::Value overloaded operators
- */
- void overloaded_op(Php::Parameters &params)
- {
- Php::Value value = params[0];
- if (value == "some string")
- {
- Php::out << "value == 'some string'" << std::endl;
- }
-
- if (value == 12)
- {
- Php::out << "value == 12" << std::endl;
- }
- else if (value > 100)
- {
- Php::out << "value > 100" << std::endl;
- }
-
- value += 10;
- Php::out << value << std::endl;
-
- int r1 = value - 8;
- Php::out << r1 << std::endl;
-
- double r2 = value*123.45;
- Php::out << r2 << std::endl;
-
- double r3 = value/123.45;
- Php::out << r3 << std::endl;
-
-
-
- }
-
- /*
- * Test Php::Value arrays
- */
- Php::Value value_arrays(void)
- {
- // create a regular array
- Php::Value array;
- array[0] = "apple";
- array[1] = "banana";
- array[2] = "tomato";
-
- // an initializer list can be used to create a filled array
- Php::Value filled({ "a", "b", "c", "d"});
-
- // create an associative array
- Php::Value assoc;
- assoc["apple"] = "green";
- assoc["banana"] = "yellow";
- assoc["tomato"] = "green";
-
- // the variables in an array do not all have to be of the same type
- Php::Value assoc2;
- assoc2["x"] = "info@example.com";
- assoc2["y"] = nullptr;
- assoc2["z"] = 123;
-
- // nested arrays are possible too
- Php::Value assoc3;
- assoc3["x"] = "info@example.com";
- assoc3["y"] = nullptr;
- assoc3["z"][0] = "a";
- assoc3["z"][1] = "b";
- assoc3["z"][2] = "c";
-
- Php::Value r;
- r["array"] = array;
- r["filled"] = filled;
- r["assoc"] = assoc;
- r["assoc2"] = assoc2;
- r["assoc3"] = assoc3;
- return r;
- }
-
- /*
- * Test Php::Value object
- */
- Php::Value value_object1(void)
- {
-
- // create empty object of type stdClass
- Php::Object object;
-
- // object properties can be accessed with square brackets
- object["property1"] = "value1";
- object["property2"] = "value2";
-
- // Php::Value is the base class, so you can assign Php::Object objects
- //Php::Value value = object;
-
- return object;
- }
-
- /*
- * Test Php::Value object
- */
- Php::Value value_object2(void)
- {
-
- // create empty object of type stdClass
- Php::Object object;
-
- // to create an object of a different type, pass in the class name
- // to the constructor with optional constructor parameters
- //object = Php::Object("DateTime", "2014-03-27 00:37:15.638276");
-
- auto timeZone = Php::Object("DateTimeZone", "Europe/Amsterdam");
- object = Php::Object("DateTime", "2014-03-27 00:37:15", timeZone);
-
-
- // methods can be called with the call() method
- Php::out << object.call("format", "Y-m-d H:i:s") << std::endl;
-
- // all these methods can be called on a Php::Value object too
- Php::Value value = Php::Object("DateTime", "2016-03-31 15:48:00", timeZone);
- Php::out << value.call("format", "Y-m-d H:i:s") << std::endl;
- Php::out << value.call("getOffset") << std::endl;
-
- return object;
- }
-
- /**
- * A sample class, with methods to cast objects to scalars
- */
- class Obj2Scalar : public Php::Base
- {
- public:
- /**
- * C++ constructor and C++ destructpr
- */
- Obj2Scalar() {}
- virtual ~Obj2Scalar() {}
-
- /**
- * Cast to a string
- *
- * Note that now we use const char* as return value, and not Php::Value.
- * The __toString function is detected at compile time, and it does
- * not have a fixed signature. You can return any value that can be picked
- * up by a Php::Value object.
- *
- * @return const char *
- */
- const char *__toString()
- {
- return "Mount Meru, also called Sumeru (Sanskrit)";
- }
-
- /**
- * Cast to a integer
- * @return long
- */
- long __toInteger()
- {
- return 27032014;
- }
-
- /**
- * Cast to a floating point number
- * @return double
- */
- double __toFloat()
- {
- return 3.14159265359;
- }
-
- /**
- * Cast to a boolean
- * @return bool
- */
- bool __toBool()
- {
- return true;
- }
- };
-
- /*
- * Test Php::Value resize
- */
- void ghfghfhf2(Php::Parameters &params)
- {
-
-
- }
-
-
-
-
-
-
-
-/**
- * End of namespace
- */
-}
-
diff --git a/tests/cpp/include/variables/001-process_globals.h b/tests/cpp/include/variables/001-process_globals.h
new file mode 100644
index 0000000..ae930d2
--- /dev/null
+++ b/tests/cpp/include/variables/001-process_globals.h
@@ -0,0 +1,57 @@
+/**
+ *
+ * Test variables
+ * 001-process_globals.phpt
+ * Global variables in PHP-CPP
+ *
+ */
+
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+
+
+ /**
+ * process_globals()
+ *
+ * This function reads and modifies global variables
+ */
+ Php::Value process_globals()
+ {
+ // all global variables can be accessed via the Php::GLOBALS variable,
+ // which is more or less the same as the PHP $_GLOBALS variable
+
+ // set a global variable
+ Php::GLOBALS["a"] = 1;
+
+ // increment a global variable
+ Php::GLOBALS["b"] += 1;
+
+ // set a global variable to be an array
+ Php::GLOBALS["c"] = Php::Array();
+
+ // add a member to an array
+ Php::GLOBALS["c"]["member"] = 123;
+
+ // and increment it
+ Php::GLOBALS["c"]["member"] += 77;
+
+ // change value e
+ Php::GLOBALS["e"] = Php::GLOBALS["e"][0]("hello");
+
+ // if a global variable holds a function, we can call it
+ return Php::GLOBALS["d"](1,2,3);
+ }
+
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/variables/002-get_complex_array.h b/tests/cpp/include/variables/002-get_complex_array.h
new file mode 100644
index 0000000..b12e5ee
--- /dev/null
+++ b/tests/cpp/include/variables/002-get_complex_array.h
@@ -0,0 +1,35 @@
+/**
+ *
+ * Test variables
+ * 002-get_complex_array.phpt
+ *
+ */
+
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+ /**
+ * This function returns complex array
+ */
+ Php::Value get_complex_array()
+ {
+ Php::Value r;
+ r["a"] = 123;
+ r["b"] = 456;
+ r["c"][0] = "nested value";
+ r["c"][1] = "example";
+ r["c"][2] = 7;
+ return r;
+ }
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/variables/003-value-types.h b/tests/cpp/include/variables/003-value-types.h
new file mode 100644
index 0000000..e1d31b9
--- /dev/null
+++ b/tests/cpp/include/variables/003-value-types.h
@@ -0,0 +1,39 @@
+/**
+ *
+ * Test variables
+ * 003-value-types.phpt
+ *
+ */
+
+
+namespace TestVariables {
+
+ /*
+ * Check type of value
+ * @param array
+ */
+ void value_types(Php::Parameters &params) {
+ if (params.size() == 0) {
+ return;
+ }
+
+ Php::Value arr = params[0];
+
+ Php::out << "Null: " << bool2str( arr.get("Null").type() == Php::Type::Null ) << std::endl;
+ Php::out << "Numeric: " << bool2str( arr.get("Numeric").type() == Php::Type::Numeric ) << std::endl;
+ Php::out << "Float: " << bool2str( arr.get("Float").type() == Php::Type::Float ) << std::endl;
+ Php::out << "Bool: " << bool2str( arr.get("Bool").type() == Php::Type::Bool ) << std::endl;
+ Php::out << "Array: " << bool2str( arr.get("Array").type() == Php::Type::Array ) << std::endl;
+ Php::out << "Object: " << bool2str( arr.get("Object").type() == Php::Type::Object ) << std::endl;
+ Php::out << "String: " << bool2str( arr.get("String").type() == Php::Type::String ) << std::endl;
+ Php::out << "Resource: " << bool2str( arr.get("Resource").type() == Php::Type::Resource ) << std::endl;
+ Php::out << "Constant: " << bool2str( arr.get("Constant").type() == Php::Type::Constant ) << std::endl;
+ Php::out << "ConstantArray: " << bool2str( arr.get("ConstantArray").type() == Php::Type::ConstantArray ) << std::endl;
+ Php::out << "Callable1: " << bool2str( arr.get("Callable1").type() == Php::Type::Callable ) << std::endl;
+ Php::out << "Callable2: " << bool2str( arr.get("Callable2").type() == Php::Type::Callable ) << std::endl;
+ Php::out << "Callable3: " << bool2str( arr.get("Callable3").type() == Php::Type::Callable ) << std::endl;
+ Php::out << "Callable4: " << bool2str( arr.get("Callable4").type() == Php::Type::Callable ) << std::endl;
+ }
+
+}
+
diff --git a/tests/cpp/include/variables/004-store-scalar-variables.h b/tests/cpp/include/variables/004-store-scalar-variables.h
new file mode 100644
index 0000000..9ce82e5
--- /dev/null
+++ b/tests/cpp/include/variables/004-store-scalar-variables.h
@@ -0,0 +1,48 @@
+/**
+ *
+ * Test variables
+ * 004-store-scalar-variables.phpt
+ *
+ */
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+ /*
+ * Test variables defined in PHP-CPP
+ */
+ Php::Value scalar_store(void) {
+
+ Php::Value value1 = 1234;
+ Php::Value value2 = "this is a string";
+ Php::Value value3 = std::string("another string");
+ Php::Value value4 = nullptr;
+ Php::Value value5 = 123.45;
+ Php::Value value6 = true;
+
+ Php::Value r;
+ r[0] = value1;
+ r[1] = value2;
+ r[2] = value3;
+ r[3] = value4;
+ r[4] = value5;
+ r[5] = value6;
+
+ r[6] = 1234;
+ r[7] = "this is a string";
+ r[8] = std::string("another string");
+ r[9] = nullptr;
+ r[10] = Php::Value();
+ r[11] = 123.45;
+ r[12] = false;
+
+ return r;
+ }
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/variables/005-cast-objects-to-scalars.h b/tests/cpp/include/variables/005-cast-objects-to-scalars.h
new file mode 100644
index 0000000..f053c4d
--- /dev/null
+++ b/tests/cpp/include/variables/005-cast-objects-to-scalars.h
@@ -0,0 +1,75 @@
+/**
+ *
+ * Test variables
+ * 005-cast-objects-to-scalars.phpt
+ *
+ */
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+ /**
+ * A sample class, with methods to cast objects to scalars
+ */
+ class Obj2Scalar : public Php::Base
+ {
+ public:
+ /**
+ * C++ constructor and C++ destructpr
+ */
+ Obj2Scalar() {}
+ virtual ~Obj2Scalar() {}
+
+ /**
+ * Cast to a string
+ *
+ * Note that now we use const char* as return value, and not Php::Value.
+ * The __toString function is detected at compile time, and it does
+ * not have a fixed signature. You can return any value that can be picked
+ * up by a Php::Value object.
+ *
+ * @return const char *
+ */
+ const char *__toString()
+ {
+ return "Mount Meru, also called Sumeru (Sanskrit)";
+ }
+
+ /**
+ * Cast to a integer
+ * @return long
+ */
+ long __toInteger()
+ {
+ return 27032014;
+ }
+
+ /**
+ * Cast to a floating point number
+ * @return double
+ */
+ double __toFloat()
+ {
+ return 3.14159265359;
+ }
+
+ /**
+ * Cast to a boolean
+ * @return bool
+ */
+ bool __toBool()
+ {
+ return true;
+ }
+ };
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/variables/006-casting-obj2str.h b/tests/cpp/include/variables/006-casting-obj2str.h
new file mode 100644
index 0000000..879683d
--- /dev/null
+++ b/tests/cpp/include/variables/006-casting-obj2str.h
@@ -0,0 +1,30 @@
+/**
+ *
+ * Test variables
+ * 006-casting-obj2str.phpt
+ *
+ */
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+
+ /*
+ * Test Php::Value casting operators
+ */
+ void value_cast2str(Php::Parameters &params)
+ {
+ std::string value = params[0];
+ Php::out << value << std::endl;
+ }
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/variables/007-overloaded-operators.h b/tests/cpp/include/variables/007-overloaded-operators.h
new file mode 100644
index 0000000..88b3117
--- /dev/null
+++ b/tests/cpp/include/variables/007-overloaded-operators.h
@@ -0,0 +1,46 @@
+/**
+ *
+ * Test variables
+ * 007-overloaded-operators.phpt
+ *
+ */
+
+
+
+namespace TestVariables {
+
+ /*
+ * Test Php::Value overloaded operators
+ */
+ void overloaded_op(Php::Parameters &params)
+ {
+ Php::Value value = params[0];
+ if (value == "some string")
+ {
+ Php::out << "value == 'some string'" << std::endl;
+ }
+
+ if (value == 12)
+ {
+ Php::out << "value == 12" << std::endl;
+ }
+ else if (value > 100)
+ {
+ Php::out << "value > 100" << std::endl;
+ }
+
+ value += 10;
+ Php::out << value << std::endl;
+
+ int r1 = value - 8;
+ Php::out << r1 << std::endl;
+
+ double r2 = value*123.45;
+ Php::out << r2 << std::endl;
+
+ double r3 = value/123.45;
+ Php::out << r3 << std::endl;
+ }
+
+}
+
diff --git a/tests/cpp/include/variables/008-value-arrays.h b/tests/cpp/include/variables/008-value-arrays.h
new file mode 100644
index 0000000..937f79a
--- /dev/null
+++ b/tests/cpp/include/variables/008-value-arrays.h
@@ -0,0 +1,57 @@
+/**
+ *
+ * Test variables
+ * 008-value-arrays.phpt
+ *
+ */
+
+
+namespace TestVariables {
+
+
+ /*
+ * Test Php::Value arrays
+ */
+ Php::Value value_arrays(void)
+ {
+ // create a regular array
+ Php::Value array;
+ array[0] = "apple";
+ array[1] = "banana";
+ array[2] = "tomato";
+
+ // an initializer list can be used to create a filled array
+ Php::Value filled({ "a", "b", "c", "d"});
+
+ // create an associative array
+ Php::Value assoc;
+ assoc["apple"] = "green";
+ assoc["banana"] = "yellow";
+ assoc["tomato"] = "green";
+
+ // the variables in an array do not all have to be of the same type
+ Php::Value assoc2;
+ assoc2["x"] = "info@example.com";
+ assoc2["y"] = nullptr;
+ assoc2["z"] = 123;
+
+ // nested arrays are possible too
+ Php::Value assoc3;
+ assoc3["x"] = "info@example.com";
+ assoc3["y"] = nullptr;
+ assoc3["z"][0] = "a";
+ assoc3["z"][1] = "b";
+ assoc3["z"][2] = "c";
+
+ Php::Value r;
+ r["array"] = array;
+ r["filled"] = filled;
+ r["assoc"] = assoc;
+ r["assoc2"] = assoc2;
+ r["assoc3"] = assoc3;
+ return r;
+ }
+
+
+}
+
diff --git a/tests/cpp/include/variables/009-010-value-object.h b/tests/cpp/include/variables/009-010-value-object.h
new file mode 100644
index 0000000..e3eba85
--- /dev/null
+++ b/tests/cpp/include/variables/009-010-value-object.h
@@ -0,0 +1,68 @@
+/**
+ *
+ * Test variables
+ * 009-value-object.phpt
+ * 010-value-object2.phpt
+ *
+ */
+
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+
+ /*
+ * Test Php::Value object
+ */
+ Php::Value value_object1(void)
+ {
+
+ // create empty object of type stdClass
+ Php::Object object;
+
+ // object properties can be accessed with square brackets
+ object["property1"] = "value1";
+ object["property2"] = "value2";
+
+ // Php::Value is the base class, so you can assign Php::Object objects
+ //Php::Value value = object;
+
+ return object;
+ }
+
+ /*
+ * Test Php::Value object
+ */
+ Php::Value value_object2(void)
+ {
+
+ // create empty object of type stdClass
+ Php::Object object;
+
+ // to create an object of a different type, pass in the class name
+ // to the constructor with optional constructor parameters
+ //object = Php::Object("DateTime", "2014-03-27 00:37:15.638276");
+
+ auto timeZone = Php::Object("DateTimeZone", "Europe/Amsterdam");
+ object = Php::Object("DateTime", "2014-03-27 00:37:15", timeZone);
+
+
+ // methods can be called with the call() method
+ Php::out << object.call("format", "Y-m-d H:i:s") << std::endl;
+
+ // all these methods can be called on a Php::Value object too
+ Php::Value value = Php::Object("DateTime", "2016-03-31 15:48:00", timeZone);
+ Php::out << value.call("format", "Y-m-d H:i:s") << std::endl;
+ Php::out << value.call("getOffset") << std::endl;
+
+ return object;
+ }
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/variables/011-012-value-casting-operators.h b/tests/cpp/include/variables/011-012-value-casting-operators.h
new file mode 100644
index 0000000..182054b
--- /dev/null
+++ b/tests/cpp/include/variables/011-012-value-casting-operators.h
@@ -0,0 +1,52 @@
+/**
+ *
+ * Test variables
+ * 011-value-casting-operators.phpt
+ * 012-value-casting-operators-double.phpt
+ *
+ */
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+ /*
+ * Test Php::Value casting operators
+ */
+ void value_casting(Php::Parameters &params)
+ {
+ Php::Value value = params[0];
+
+ long value1 = value;
+ std::string value2 = value;
+ bool value4 = value;
+
+ Php::out << " long:" << value1 << "\n string:" << value2 << "\n bool:" << bool2str(value4) << std::endl;
+ }
+
+
+ /*
+ * Test Php::Value casting operators
+ */
+ void value_cast2double(Php::Parameters &params)
+ {
+ Php::Value value = params[0];
+ double value3 = value;
+
+ /*
+ * The remark (from valmat).
+ * Somehow std::to_string truncates the tail of numbers of type `double` when converting it to a string.
+ * So I wrote my own function `double2str()`, which does not have this drawback.
+ */
+ Php::out << double2str(value3) << std::endl;
+ }
+
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/include/variables/tpl.h b/tests/cpp/include/variables/tpl.h
new file mode 100644
index 0000000..3c4ed7c
--- /dev/null
+++ b/tests/cpp/include/variables/tpl.h
@@ -0,0 +1,30 @@
+/**
+ *
+ * Test variables
+ * phptname.phpt
+ *
+ */
+
+
+
+
+/**
+ * Set up namespace
+ */
+namespace TestVariables {
+
+
+ /*
+ * Test
+ */
+ void fnname(Php::Parameters &params)
+ {
+
+
+ }
+
+/**
+ * End of namespace
+ */
+}
+
diff --git a/tests/cpp/main.cpp b/tests/cpp/main.cpp
index b892b41..c1e33b1 100644
--- a/tests/cpp/main.cpp
+++ b/tests/cpp/main.cpp
@@ -8,9 +8,9 @@
#include <phpcpp.h>
// Test includes
-#include "include/ValueIterator.h"
-#include "include/Classes_and_objects.h"
-#include "include/variables.h"
+#include "h/ValueIterator.h"
+#include "h/Classes_and_objects.h"
+#include "h/variables.h"
@@ -90,6 +90,7 @@ extern "C"
* tests for variables
*
*/
+ // create a nested namespace
extension.add("TestVariables\\process_globals", TestVariables::process_globals);
extension.add("TestVariables\\get_complex_array", TestVariables::get_complex_array);
extension.add("TestVariables\\value_types", TestVariables::value_types);
@@ -103,7 +104,7 @@ extern "C"
extension.add("TestVariables\\value_object2", TestVariables::value_object2);
// A sample class, with methods to cast objects to scalars
- Php::Class<TestVariables::Obj2Scalar> cObj2Scalar("Obj2Scalar");
+ Php::Class<TestVariables::Obj2Scalar> cObj2Scalar("TestVariables\\Obj2Scalar");
extension.add(std::move(cObj2Scalar));
diff --git a/tests/php/phpt/variables/005-cast-objects-to-scalars.phpt b/tests/php/phpt/variables/005-cast-objects-to-scalars.phpt
index 335acb7..9de9ba5 100644
--- a/tests/php/phpt/variables/005-cast-objects-to-scalars.phpt
+++ b/tests/php/phpt/variables/005-cast-objects-to-scalars.phpt
@@ -11,7 +11,7 @@ http://www.phpcpp.com/documentation/special-features#casting-functions
function bool2str($b) {
return $b ? "Yes" : "No";
}
-$obj = new Obj2Scalar();
+$obj = new TestVariables\Obj2Scalar();
echo " long: ", (int)$obj, "\n string: ", (string)$obj, "\n double: ", (double)$obj, "\n bool: ", bool2str((bool)$obj);
@@ -19,4 +19,4 @@ echo " long: ", (int)$obj, "\n string: ", (string)$obj, "\n double: ", (doubl
long: 27032014
string: Mount Meru, also called Sumeru (Sanskrit)
double: 3.14159265359
- bool: Yes \ No newline at end of file
+ bool: Yes