From 2e969e3a0afdb0cd9654c84f03c738e1163ec8c3 Mon Sep 17 00:00:00 2001 From: advect Date: Thu, 28 Jul 2011 08:15:38 +0900 Subject: [PATCH] php: 0.5.0 Fix ZEND_DECLARE_MODULE_GLOBALS Add unpack of template converter (Merge pull request #57 #58 from enfinity/msgpackr) --- php/ChangeLog | 15 + php/msgpack.c | 4 +- php/msgpack_class.c | 2 +- php/msgpack_convert.c | 618 ++++++++++++++++++++++++++++++++++++++---- php/msgpack_convert.h | 2 + php/package.xml | 86 +++++- php/php-msgpack.spec | 2 +- php/php_msgpack.h | 4 +- php/tests/034.phpt | 43 +-- php/tests/104.phpt | 81 ++++++ php/tests/104b.phpt | 81 ++++++ php/tests/105.phpt | 81 ++++++ php/tests/105b.phpt | 81 ++++++ php/tests/106.phpt | 87 ++++++ php/tests/106b.phpt | 88 ++++++ php/tests/107.phpt | 88 ++++++ php/tests/107b.phpt | 88 ++++++ php/tests/108.phpt | 93 +++++++ php/tests/108b.phpt | 93 +++++++ php/tests/109.phpt | 92 +++++++ php/tests/109b.phpt | 93 +++++++ php/tests/110.phpt | 114 ++++++++ php/tests/110b.phpt | 114 ++++++++ php/tests/111.phpt | 114 ++++++++ php/tests/111b.phpt | 114 ++++++++ php/tests/112.phpt | 144 ++++++++++ php/tests/112b.phpt | 144 ++++++++++ php/tests/113.phpt | 144 ++++++++++ php/tests/113b.phpt | 144 ++++++++++ php/tests/114.phpt | 166 ++++++++++++ php/tests/114b.phpt | 166 ++++++++++++ php/tests/115.phpt | 82 ++++++ php/tests/115b.phpt | 89 ++++++ php/tests/116.phpt | 82 ++++++ php/tests/116b.phpt | 89 ++++++ php/tests/117.phpt | 88 ++++++ php/tests/117b.phpt | 96 +++++++ php/tests/118.phpt | 89 ++++++ php/tests/118b.phpt | 96 +++++++ php/tests/119.phpt | 94 +++++++ php/tests/119b.phpt | 101 +++++++ php/tests/120.phpt | 93 +++++++ php/tests/120b.phpt | 101 +++++++ php/tests/121.phpt | 115 ++++++++ php/tests/121b.phpt | 122 +++++++++ php/tests/122.phpt | 115 ++++++++ php/tests/122b.phpt | 122 +++++++++ php/tests/123.phpt | 145 ++++++++++ php/tests/123b.phpt | 152 +++++++++++ php/tests/124.phpt | 145 ++++++++++ php/tests/124b.phpt | 152 +++++++++++ php/tests/125.phpt | 167 ++++++++++++ php/tests/125b.phpt | 174 ++++++++++++ php/tests/126.phpt | 78 ++++++ php/tests/126b.phpt | 78 ++++++ php/tests/127.phpt | 78 ++++++ php/tests/127b.phpt | 78 ++++++ php/tests/128.phpt | 84 ++++++ php/tests/128b.phpt | 85 ++++++ php/tests/129.phpt | 85 ++++++ php/tests/129b.phpt | 85 ++++++ php/tests/130.phpt | 90 ++++++ php/tests/130b.phpt | 90 ++++++ php/tests/131.phpt | 89 ++++++ php/tests/131b.phpt | 90 ++++++ php/tests/132.phpt | 111 ++++++++ php/tests/132b.phpt | 111 ++++++++ php/tests/133.phpt | 111 ++++++++ php/tests/133b.phpt | 111 ++++++++ php/tests/134.phpt | 141 ++++++++++ php/tests/134b.phpt | 141 ++++++++++ php/tests/135.phpt | 141 ++++++++++ php/tests/135b.phpt | 141 ++++++++++ php/tests/136.phpt | 163 +++++++++++ php/tests/136b.phpt | 163 +++++++++++ 75 files changed, 7946 insertions(+), 93 deletions(-) create mode 100644 php/tests/104.phpt create mode 100644 php/tests/104b.phpt create mode 100644 php/tests/105.phpt create mode 100644 php/tests/105b.phpt create mode 100644 php/tests/106.phpt create mode 100644 php/tests/106b.phpt create mode 100644 php/tests/107.phpt create mode 100644 php/tests/107b.phpt create mode 100644 php/tests/108.phpt create mode 100644 php/tests/108b.phpt create mode 100644 php/tests/109.phpt create mode 100644 php/tests/109b.phpt create mode 100644 php/tests/110.phpt create mode 100644 php/tests/110b.phpt create mode 100644 php/tests/111.phpt create mode 100644 php/tests/111b.phpt create mode 100644 php/tests/112.phpt create mode 100644 php/tests/112b.phpt create mode 100644 php/tests/113.phpt create mode 100644 php/tests/113b.phpt create mode 100644 php/tests/114.phpt create mode 100644 php/tests/114b.phpt create mode 100644 php/tests/115.phpt create mode 100644 php/tests/115b.phpt create mode 100644 php/tests/116.phpt create mode 100644 php/tests/116b.phpt create mode 100644 php/tests/117.phpt create mode 100644 php/tests/117b.phpt create mode 100644 php/tests/118.phpt create mode 100644 php/tests/118b.phpt create mode 100644 php/tests/119.phpt create mode 100644 php/tests/119b.phpt create mode 100644 php/tests/120.phpt create mode 100644 php/tests/120b.phpt create mode 100644 php/tests/121.phpt create mode 100644 php/tests/121b.phpt create mode 100644 php/tests/122.phpt create mode 100644 php/tests/122b.phpt create mode 100644 php/tests/123.phpt create mode 100644 php/tests/123b.phpt create mode 100644 php/tests/124.phpt create mode 100644 php/tests/124b.phpt create mode 100644 php/tests/125.phpt create mode 100644 php/tests/125b.phpt create mode 100644 php/tests/126.phpt create mode 100644 php/tests/126b.phpt create mode 100644 php/tests/127.phpt create mode 100644 php/tests/127b.phpt create mode 100644 php/tests/128.phpt create mode 100644 php/tests/128b.phpt create mode 100644 php/tests/129.phpt create mode 100644 php/tests/129b.phpt create mode 100644 php/tests/130.phpt create mode 100644 php/tests/130b.phpt create mode 100644 php/tests/131.phpt create mode 100644 php/tests/131b.phpt create mode 100644 php/tests/132.phpt create mode 100644 php/tests/132b.phpt create mode 100644 php/tests/133.phpt create mode 100644 php/tests/133b.phpt create mode 100644 php/tests/134.phpt create mode 100644 php/tests/134b.phpt create mode 100644 php/tests/135.phpt create mode 100644 php/tests/135b.phpt create mode 100644 php/tests/136.phpt create mode 100644 php/tests/136b.phpt diff --git a/php/ChangeLog b/php/ChangeLog index c02ab1f3..e409478b 100644 --- a/php/ChangeLog +++ b/php/ChangeLog @@ -1,5 +1,20 @@ msgpack extension changelog +Version 0.5.0 +------------- + * Fix ZEND_DECLARE_MODULE_GLOBALS: + Moved ZEND_DECLARE_MODULE_GLOBALS from header to source file. + Added ZEND_EXTERN_MODULE_GLOBALS in source files to avoid undefined + _msgpack_globals message. + (Contributed by seporaitis) + * Add unpack of template converter: + Merge https://github.com/msgpack/msgpack/pull/58 + Fixed memory leaks. + Fixed older version. + Fixed tests scripts. + Added msgpack_unpack function was implemented. + (Contributed by ivan) + Version 0.4.0 ------------- * Fix array pack. diff --git a/php/msgpack.c b/php/msgpack.c index 6e9253a7..1cc3dc05 100644 --- a/php/msgpack.c +++ b/php/msgpack.c @@ -19,6 +19,8 @@ #include "msgpack_errors.h" #include "msgpack/version.h" +ZEND_DECLARE_MODULE_GLOBALS(msgpack) + static ZEND_FUNCTION(msgpack_serialize); static ZEND_FUNCTION(msgpack_unserialize); @@ -322,7 +324,7 @@ static ZEND_FUNCTION(msgpack_unserialize) ALLOC_INIT_ZVAL(zv); php_msgpack_unserialize(zv, str, str_len TSRMLS_CC); - if (msgpack_convert_object(return_value, object, &zv) != SUCCESS) + if (msgpack_convert_template(return_value, object, &zv) != SUCCESS) { RETURN_NULL(); } diff --git a/php/msgpack_class.c b/php/msgpack_class.c index 3cd21a35..f90d6d2d 100644 --- a/php/msgpack_class.c +++ b/php/msgpack_class.c @@ -359,7 +359,7 @@ static ZEND_METHOD(msgpack, unpack) ALLOC_INIT_ZVAL(zv); php_msgpack_unserialize(zv, str, str_len TSRMLS_CC); - if (msgpack_convert_object(return_value, object, &zv) != SUCCESS) + if (msgpack_convert_template(return_value, object, &zv) != SUCCESS) { RETURN_NULL(); } diff --git a/php/msgpack_convert.c b/php/msgpack_convert.c index 47092836..f7f3d3c2 100644 --- a/php/msgpack_convert.c +++ b/php/msgpack_convert.c @@ -38,11 +38,16 @@ inline int msgpack_convert_long_to_properties( HashTable *ht, HashTable **properties, HashPosition *prop_pos, uint key_index, zval *val, HashTable *var) { + TSRMLS_FETCH(); + if (*properties != NULL) { char *prop_key; uint prop_key_len; ulong prop_key_index; + zval **data = NULL; + zval *tplval = NULL; + zval **dataval = NULL; for (;; zend_hash_move_forward_ex(*properties, prop_pos)) { @@ -53,10 +58,67 @@ inline int msgpack_convert_long_to_properties( if (var == NULL || !zend_hash_exists(var, prop_key, prop_key_len)) { - zend_hash_move_forward_ex(*properties, prop_pos); - return zend_symtable_update( - ht, prop_key, prop_key_len, - &val, sizeof(val), NULL); + if (zend_hash_find( + ht, prop_key, prop_key_len, + (void **)&data) == SUCCESS) + { + switch (Z_TYPE_PP(data)) + { + case IS_ARRAY: + { + HashTable *dataht; + dataht = HASH_OF(val); + if (zend_hash_index_find( + dataht, prop_key_index, + (void **)dataval) != SUCCESS) + { + MSGPACK_WARNING( + "[msgpack] (%s) " + "can't get data value by index", + __FUNCTION__); + return FAILURE; + } + + ALLOC_INIT_ZVAL(tplval); + if (msgpack_convert_array( + tplval, *data, dataval) == SUCCESS) + { + zend_hash_move_forward_ex( + *properties, prop_pos); + + return zend_symtable_update( + ht, prop_key, prop_key_len, + &tplval, sizeof(tplval), NULL); + } + // TODO: de we need to call dtor? + return FAILURE; + break; + } + case IS_OBJECT: + { + ALLOC_INIT_ZVAL(tplval); + if (msgpack_convert_object( + tplval, *data, &val) == SUCCESS) + { + zend_hash_move_forward_ex( + *properties, prop_pos); + + return zend_symtable_update( + ht, prop_key, prop_key_len, + &tplval, sizeof(tplval), NULL); + } + // TODO: de we need to call dtor? + return FAILURE; + break; + } + default: + zend_hash_move_forward_ex(*properties, prop_pos); + return zend_symtable_update( + ht, prop_key, prop_key_len, + &val, sizeof(val), NULL); + break; + } + } } } else @@ -108,31 +170,286 @@ inline int msgpack_convert_string_to_properties( return FAILURE; } -int msgpack_convert_object(zval *return_value, zval *object, zval **value) +int msgpack_convert_array(zval *return_value, zval *tpl, zval **value) { - zend_class_entry *ce, **pce; - HashTable *properties = NULL; - HashPosition prop_pos; TSRMLS_FETCH(); - switch (Z_TYPE_P(object)) + if (Z_TYPE_P(tpl) == IS_ARRAY) + { + char *key; + uint key_len; + int key_type; + ulong key_index; + zval **data, **arydata; + HashPosition pos, valpos; + HashTable *ht, *htval; + int num; + + ht = HASH_OF(tpl); + // TODO: maybe need to release memory? + array_init(return_value); + + num = zend_hash_num_elements(ht); + if (num <= 0) + { + MSGPACK_WARNING( + "[msgpack] (%s) template array length is 0", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + /* string */ + if (ht->nNumOfElements != ht->nNextFreeElement) + { + htval = HASH_OF(*value); + if (!htval) + { + MSGPACK_WARNING( + "[msgpack] (%s) input data is not array", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + zend_hash_internal_pointer_reset_ex(ht, &pos); + zend_hash_internal_pointer_reset_ex(htval, &valpos); + for (;; zend_hash_move_forward_ex(ht, &pos), + zend_hash_move_forward_ex(htval, &valpos)) + { + key_type = zend_hash_get_current_key_ex( + ht, &key, &key_len, &key_index, 0, &pos); + + if (key_type == HASH_KEY_NON_EXISTANT) + { + break; + } + + if (zend_hash_get_current_data_ex( + ht, (void *)&data, &pos) != SUCCESS) + { + continue; + } + + if (key_type == HASH_KEY_IS_STRING) + { + int (*convert_function)(zval *, zval *, zval **) = NULL; + zval **dataval, *val; + + switch (Z_TYPE_PP(data)) + { + case IS_ARRAY: + convert_function = msgpack_convert_array; + break; + case IS_OBJECT: + // case IS_STRING: + convert_function = msgpack_convert_object; + break; + default: + break; + } + + if (zend_hash_get_current_data_ex( + htval, (void *)&dataval, &valpos) != SUCCESS) + { + MSGPACK_WARNING( + "[msgpack] (%s) can't get data", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + MSGPACK_CONVERT_COPY_ZVAL(val, dataval); + + if (convert_function) + { + zval *rv; + ALLOC_INIT_ZVAL(rv); + if (convert_function(rv, *data, &val) != SUCCESS) + { + zval_ptr_dtor(&val); + return FAILURE; + } + add_assoc_zval_ex(return_value, key, key_len, rv); + } + else + { + add_assoc_zval_ex(return_value, key, key_len, val); + } + } + } + + zval_ptr_dtor(value); + + return SUCCESS; + } + else + { + /* index */ + int (*convert_function)(zval *, zval *, zval **) = NULL; + + if (Z_TYPE_PP(value) != IS_ARRAY) + { + MSGPACK_WARNING( + "[msgpack] (%s) unserialized data must be array.", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + zend_hash_internal_pointer_reset_ex(ht, &pos); + + key_type = zend_hash_get_current_key_ex( + ht, &key, &key_len, &key_index, 0, &pos); + + if (key_type == HASH_KEY_NON_EXISTANT) + { + MSGPACK_WARNING( + "[msgpack] (%s) first element in template array is empty", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + if (zend_hash_get_current_data_ex( + ht, (void *)&data, &pos) != SUCCESS) + { + MSGPACK_WARNING( + "[msgpack] (%s) invalid template: empty array?", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + switch (Z_TYPE_PP(data)) + { + case IS_ARRAY: + convert_function = msgpack_convert_array; + break; + case IS_OBJECT: + case IS_STRING: + convert_function = msgpack_convert_object; + break; + default: + break; + } + + htval = HASH_OF(*value); + num = zend_hash_num_elements(htval); + if (num <= 0) + { + MSGPACK_WARNING( + "[msgpack] (%s) array length is 0 in unserialized data", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + zend_hash_internal_pointer_reset_ex(htval, &valpos); + for (;; zend_hash_move_forward_ex(htval, &valpos)) + { + key_type = zend_hash_get_current_key_ex( + htval, &key, &key_len, &key_index, 0, &valpos); + + if (key_type == HASH_KEY_NON_EXISTANT) + { + break; + } + + if (zend_hash_get_current_data_ex( + htval, (void *)&arydata, &valpos) != SUCCESS) + { + MSGPACK_WARNING( + "[msgpack] (%s) can't get next data in indexed array", + __FUNCTION__); + continue; + } + + switch (key_type) + { + case HASH_KEY_IS_LONG: + { + zval *aryval, *rv; + ALLOC_INIT_ZVAL(rv); + MSGPACK_CONVERT_COPY_ZVAL(aryval, arydata); + if (convert_function) + { + if (convert_function(rv, *data, &aryval) != SUCCESS) + { + zval_ptr_dtor(&aryval); + MSGPACK_WARNING( + "[msgpack] (%s) " + "convert failure in HASH_KEY_IS_LONG " + "in indexed array", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + add_next_index_zval(return_value, rv); + } + else + { + add_next_index_zval(return_value, aryval); + } + break; + } + case HASH_KEY_IS_STRING: + MSGPACK_WARNING( + "[msgpack] (%s) key is string", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + default: + MSGPACK_WARNING( + "[msgpack] (%s) key is not string nor array", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + } + + zval_ptr_dtor(value); + return SUCCESS; + } + } + else + { + // shouldn't reach + MSGPACK_WARNING( + "[msgpack] (%s) template is not array", + __FUNCTION__); + zval_ptr_dtor(value); + return FAILURE; + } + + // shouldn't reach + zval_ptr_dtor(value); + return FAILURE; +} + +int msgpack_convert_object(zval *return_value, zval *tpl, zval **value) +{ + zend_class_entry *ce, **pce; + TSRMLS_FETCH(); + + switch (Z_TYPE_P(tpl)) { case IS_STRING: if (zend_lookup_class( - Z_STRVAL_P(object), Z_STRLEN_P(object), + Z_STRVAL_P(tpl), Z_STRLEN_P(tpl), &pce TSRMLS_CC) != SUCCESS) { MSGPACK_ERROR("[msgpack] (%s) Class '%s' not found", - __FUNCTION__, Z_STRVAL_P(object)); + __FUNCTION__, Z_STRVAL_P(tpl)); return FAILURE; } ce = *pce; break; case IS_OBJECT: - ce = zend_get_class_entry(object TSRMLS_CC); + ce = zend_get_class_entry(tpl TSRMLS_CC); break; default: - MSGPACK_ERROR("[msgpack] (%s) Object type is unsupported", + MSGPACK_ERROR("[msgpack] (%s) object type is unsupported", __FUNCTION__); return FAILURE; } @@ -152,13 +469,76 @@ int msgpack_convert_object(zval *return_value, zval *object, zval **value) } object_init_ex(return_value, ce); - properties = Z_OBJ_HT_P(return_value)->get_properties( - return_value TSRMLS_CC); - if (HASH_OF(object)) + + /* Run the constructor if there is one */ + if (ce->constructor + && (ce->constructor->common.fn_flags & ZEND_ACC_PUBLIC)) { - properties = HASH_OF(object); + zval *retval_ptr = NULL; + zval ***params = NULL; + int num_args = 0; + zend_fcall_info fci; + zend_fcall_info_cache fcc; + +#if ZEND_MODULE_API_NO >= 20090626 + fci.size = sizeof(fci); + fci.function_table = EG(function_table); + fci.function_name = NULL; + fci.symbol_table = NULL; + fci.object_ptr = return_value; + fci.retval_ptr_ptr = &retval_ptr; + fci.param_count = num_args; + fci.params = params; + fci.no_separation = 1; + + fcc.initialized = 1; + fcc.function_handler = ce->constructor; + fcc.calling_scope = EG(scope); + fcc.called_scope = Z_OBJCE_P(return_value); + fcc.object_ptr = return_value; +#else + fci.size = sizeof(fci); + fci.function_table = EG(function_table); + fci.function_name = NULL; + fci.symbol_table = NULL; + fci.object_pp = &return_value; + fci.retval_ptr_ptr = &retval_ptr; + fci.param_count = num_args; + fci.params = params; + fci.no_separation = 1; + + fcc.initialized = 1; + fcc.function_handler = ce->constructor; + fcc.calling_scope = EG(scope); + fcc.object_pp = &return_value; +#endif + + if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) + { + if (params) + { + efree(params); + } + if (retval_ptr) + { + zval_ptr_dtor(&retval_ptr); + } + + MSGPACK_WARNING( + "[msgpack] (%s) Invocation of %s's constructor failed", + __FUNCTION__, ce->name); + + return FAILURE; + } + if (retval_ptr) + { + zval_ptr_dtor(&retval_ptr); + } + if (params) + { + efree(params); + } } - zend_hash_internal_pointer_reset_ex(properties, &prop_pos); switch (Z_TYPE_PP(value)) { @@ -184,12 +564,16 @@ int msgpack_convert_object(zval *return_value, zval *object, zval **value) break; } - ALLOC_HASHTABLE(var); - zend_hash_init(var, num, NULL, NULL, 0); - - /* string */ - if (ht->nNumOfElements != ht->nNextFreeElement) + /* string - php_only mode? */ + if (ht->nNumOfElements != ht->nNextFreeElement + || ht->nNumOfElements != ret->nNumOfElements) { + HashTable *properties = NULL; + HashPosition prop_pos; + + ALLOC_HASHTABLE(var); + zend_hash_init(var, num, NULL, NULL, 0); + zend_hash_internal_pointer_reset_ex(ht, &pos); for (;; zend_hash_move_forward_ex(ht, &pos)) { @@ -222,61 +606,154 @@ int msgpack_convert_object(zval *return_value, zval *object, zval **value) } } } - } - /* index */ - zend_hash_internal_pointer_reset_ex(ht, &pos); - for (;; zend_hash_move_forward_ex(ht, &pos)) - { - key_type = zend_hash_get_current_key_ex( - ht, &key, &key_len, &key_index, 0, &pos); + /* index */ + properties = Z_OBJ_HT_P(return_value)->get_properties( + return_value TSRMLS_CC); - if (key_type == HASH_KEY_NON_EXISTANT) + if (HASH_OF(tpl)) { - break; + properties = HASH_OF(tpl); } + zend_hash_internal_pointer_reset_ex(properties, &prop_pos); - if (zend_hash_get_current_data_ex( - ht, (void *)&data, &pos) != SUCCESS) + zend_hash_internal_pointer_reset_ex(ht, &pos); + for (;; zend_hash_move_forward_ex(ht, &pos)) { - continue; - } + key_type = zend_hash_get_current_key_ex( + ht, &key, &key_len, &key_index, 0, &pos); - switch (key_type) - { - case HASH_KEY_IS_LONG: + if (key_type == HASH_KEY_NON_EXISTANT) { - zval *val; - MSGPACK_CONVERT_COPY_ZVAL(val, data); - if (msgpack_convert_long_to_properties( - ret, &properties, &prop_pos, - key_index, val, var) != SUCCESS) - { - zval_ptr_dtor(&val); - MSGPACK_WARNING( - "[msgpack] (%s) " - "illegal offset type, skip this decoding", - __FUNCTION__); - } break; } - case HASH_KEY_IS_STRING: + + if (zend_hash_get_current_data_ex( + ht, (void *)&data, &pos) != SUCCESS) + { + continue; + } + + switch (key_type) + { + case HASH_KEY_IS_LONG: + { + zval *val; + MSGPACK_CONVERT_COPY_ZVAL(val, data); + if (msgpack_convert_long_to_properties( + ret, &properties, &prop_pos, + key_index, val, var) != SUCCESS) + { + zval_ptr_dtor(&val); + MSGPACK_WARNING( + "[msgpack] (%s) " + "illegal offset type, skip this decoding", + __FUNCTION__); + } + break; + } + case HASH_KEY_IS_STRING: + break; + default: + MSGPACK_WARNING( + "[msgpack] (%s) key is not string nor array", + __FUNCTION__); + break; + } + } + + zend_hash_destroy(var); + FREE_HASHTABLE(var); + } + else + { + HashPosition valpos; + int (*convert_function)(zval *, zval *, zval **) = NULL; + zval **arydata, *aryval; + + /* index */ + zend_hash_internal_pointer_reset_ex(ret, &pos); + zend_hash_internal_pointer_reset_ex(ht, &valpos); + for (;; zend_hash_move_forward_ex(ret, &pos), + zend_hash_move_forward_ex(ht, &valpos)) + { + key_type = zend_hash_get_current_key_ex( + ret, &key, &key_len, &key_index, 0, &pos); + + if (key_type == HASH_KEY_NON_EXISTANT) + { break; - default: + } + + if (zend_hash_get_current_data_ex( + ret, (void *)&data, &pos) != SUCCESS) + { + continue; + } + + switch (Z_TYPE_PP(data)) + { + case IS_ARRAY: + convert_function = msgpack_convert_array; + break; + case IS_OBJECT: + //case IS_STRING: -- may have default values of + // class members, so it's not wise to allow + convert_function = msgpack_convert_object; + break; + default: + break; + } + + if (zend_hash_get_current_data_ex( + ht, (void *)&arydata, &valpos) != SUCCESS) + { MSGPACK_WARNING( - "[msgpack] (%s) key is not string nor array", + "[msgpack] (%s) can't get data value by index", __FUNCTION__); - break; + return FAILURE; + } + + MSGPACK_CONVERT_COPY_ZVAL(aryval, arydata); + + if (convert_function) + { + zval *rv; + ALLOC_INIT_ZVAL(rv); + + if (convert_function(rv, *data, &aryval) != SUCCESS) + { + zval_ptr_dtor(&aryval); + MSGPACK_WARNING( + "[msgpack] (%s) " + "convert failure in convert_object", + __FUNCTION__); + return FAILURE; + } + + zend_symtable_update( + ret, key, key_len, &rv, sizeof(rv), NULL); + } + else + { + zend_symtable_update( + ret, key, key_len, &aryval, sizeof(aryval), NULL); + } } } - zend_hash_destroy(var); - FREE_HASHTABLE(var); - zval_ptr_dtor(value); break; } default: + { + HashTable *properties = NULL; + HashPosition prop_pos; + + properties = Z_OBJ_HT_P(return_value)->get_properties( + return_value TSRMLS_CC); + zend_hash_internal_pointer_reset_ex(properties, &prop_pos); + if (msgpack_convert_long_to_properties( HASH_OF(return_value), &properties, &prop_pos, 0, *value, NULL) != SUCCESS) @@ -286,7 +763,32 @@ int msgpack_convert_object(zval *return_value, zval *object, zval **value) __FUNCTION__); } break; + } } return SUCCESS; } + +int msgpack_convert_template(zval *return_value, zval *tpl, zval **value) +{ + TSRMLS_FETCH(); + + switch (Z_TYPE_P(tpl)) + { + case IS_ARRAY: + return msgpack_convert_array(return_value, tpl, value); + break; + case IS_STRING: + case IS_OBJECT: + return msgpack_convert_object(return_value, tpl, value); + break; + default: + MSGPACK_ERROR("[msgpack] (%s) Template type is unsupported", + __FUNCTION__); + return FAILURE; + } + + // shouldn't reach + return FAILURE; +} + diff --git a/php/msgpack_convert.h b/php/msgpack_convert.h index 411f706b..93e045ee 100644 --- a/php/msgpack_convert.h +++ b/php/msgpack_convert.h @@ -3,5 +3,7 @@ #define MSGPACK_CONVERT_H int msgpack_convert_object(zval *return_value, zval *object, zval **value); +int msgpack_convert_array(zval *return_value, zval *tpl, zval **value); +int msgpack_convert_template(zval *return_value, zval *tpl, zval **value); #endif diff --git a/php/package.xml b/php/package.xml index 4bb29000..59c7606e 100644 --- a/php/package.xml +++ b/php/package.xml @@ -10,11 +10,11 @@ advect@gmail.com yes - 2011-01-16 - + 2011-07-27 + - 0.4.0 - 0.4.0 + 0.5.0 + 0.5.0 beta @@ -32,17 +32,17 @@ - - + + - - + + - + @@ -97,7 +97,7 @@ - + @@ -172,6 +172,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/php/php-msgpack.spec b/php/php-msgpack.spec index c79dfc86..2c04f0b1 100644 --- a/php/php-msgpack.spec +++ b/php/php-msgpack.spec @@ -3,7 +3,7 @@ Summary: PHP extension for interfacing with MessagePack Name: php-msgpack -Version: 0.4.0 +Version: 0.5.0 Release: 1%{?dist} Source: php-msgpack-%{version}.tar.gz License: New BSD License diff --git a/php/php_msgpack.h b/php/php_msgpack.h index 87b28228..d677a1c7 100644 --- a/php/php_msgpack.h +++ b/php/php_msgpack.h @@ -2,7 +2,7 @@ #ifndef PHP_MSGPACK_H #define PHP_MSGPACK_H -#define MSGPACK_EXTENSION_VERSION "0.4.0" +#define MSGPACK_EXTENSION_VERSION "0.5.0" #include "ext/standard/php_smart_str.h" @@ -26,7 +26,7 @@ ZEND_BEGIN_MODULE_GLOBALS(msgpack) zend_bool php_only; ZEND_END_MODULE_GLOBALS(msgpack) -ZEND_DECLARE_MODULE_GLOBALS(msgpack) +ZEND_EXTERN_MODULE_GLOBALS(msgpack) #ifdef ZTS #define MSGPACK_G(v) TSRMG(msgpack_globals_id, zend_msgpack_globals *, v) diff --git a/php/tests/034.phpt b/php/tests/034.phpt index 6610c7c7..f14d934f 100644 --- a/php/tests/034.phpt +++ b/php/tests/034.phpt @@ -8,31 +8,34 @@ if(!extension_loaded('msgpack')) { } $datas = array( - 87817, - -1, - array(1,2,3,"testing" => 10, "foo"), - true, - false, - 0.187182, - "dakjdh98389\000", - null, - (object)array(1,2,3), + 87817, + -1, + array(1,2,3,"testing" => 10, "foo"), + true, + false, + 0.187182, + "dakjdh98389\000", + null, + (object)array(1,2,3), ); error_reporting(0); -foreach ($datas as $data) { - $str = msgpack_serialize($data); - $len = strlen($str); +foreach ($datas as $data) +{ + $str = msgpack_serialize($data); + $len = strlen($str); - for ($j = 0; $j < 200; $j++) { - for ($i = 0; $i < $len - 1; $i++) { - $sub = substr($str, 0, $i); - $sub .= mcrypt_create_iv(30, MCRYPT_DEV_URANDOM); - $php_errormsg = null; - $v = msgpack_unserialize($sub); - } - } + for ($j = 0; $j < 200; $j++) + { + for ($i = 0; $i < $len - 1; $i++) + { + $sub = substr($str, 0, $i); + $sub .= mcrypt_create_iv(30, MCRYPT_DEV_URANDOM); + $php_errormsg = null; + $v = msgpack_unserialize($sub); + } + } } --EXPECT-- diff --git a/php/tests/104.phpt b/php/tests/104.phpt new file mode 100644 index 00000000..216baa33 --- /dev/null +++ b/php/tests/104.phpt @@ -0,0 +1,81 @@ +--TEST-- +unpack of template converter: class unpacker (array: string) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array("MyObj"); + +test("object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/104b.phpt b/php/tests/104b.phpt new file mode 100644 index 00000000..c46d9453 --- /dev/null +++ b/php/tests/104b.phpt @@ -0,0 +1,81 @@ +--TEST-- +unpack of template converter: class unpacker (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array("MyObj"); + +test("object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/105.phpt b/php/tests/105.phpt new file mode 100644 index 00000000..dcd2e08f --- /dev/null +++ b/php/tests/105.phpt @@ -0,0 +1,81 @@ +--TEST-- +unpack of template converter: class unpacker (array: object) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array(new MyObj()); + +test("object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/105b.phpt b/php/tests/105b.phpt new file mode 100644 index 00000000..e7a96b13 --- /dev/null +++ b/php/tests/105b.phpt @@ -0,0 +1,81 @@ +--TEST-- +unpack of template converter: class unpacker (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array(new MyObj()); + +test("object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/106.phpt b/php/tests/106.phpt new file mode 100644 index 00000000..dc9a95be --- /dev/null +++ b/php/tests/106.phpt @@ -0,0 +1,87 @@ +--TEST-- +unpack of template converter: class unpacker (string) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj { + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = "MyObj"; + +test("recursive object /w string", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/106b.phpt b/php/tests/106b.phpt new file mode 100644 index 00000000..2ebdcd15 --- /dev/null +++ b/php/tests/106b.phpt @@ -0,0 +1,88 @@ +--TEST-- +unpack of template converter: class unpacker (string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = "MyObj"; + +test("recursive object /w string", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/107.phpt b/php/tests/107.phpt new file mode 100644 index 00000000..14868324 --- /dev/null +++ b/php/tests/107.phpt @@ -0,0 +1,88 @@ +--TEST-- +unpack of template converter: class unpacker (object) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = new MyObj(); + +test("recursive object /w instance", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/107b.phpt b/php/tests/107b.phpt new file mode 100644 index 00000000..b8803a62 --- /dev/null +++ b/php/tests/107b.phpt @@ -0,0 +1,88 @@ +--TEST-- +unpack of template converter: class unpacker (object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = new MyObj(); + +test("recursive object /w instance", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/108.phpt b/php/tests/108.phpt new file mode 100644 index 00000000..bf21d880 --- /dev/null +++ b/php/tests/108.phpt @@ -0,0 +1,93 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: string) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/108b.phpt b/php/tests/108b.phpt new file mode 100644 index 00000000..c1fb5e08 --- /dev/null +++ b/php/tests/108b.phpt @@ -0,0 +1,93 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/109.phpt b/php/tests/109.phpt new file mode 100644 index 00000000..00c74216 --- /dev/null +++ b/php/tests/109.phpt @@ -0,0 +1,92 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: object) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj { + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array(new MyObj()); + +test("recursive object with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/109b.phpt b/php/tests/109b.phpt new file mode 100644 index 00000000..2b62a3cf --- /dev/null +++ b/php/tests/109b.phpt @@ -0,0 +1,93 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/110.phpt b/php/tests/110.phpt new file mode 100644 index 00000000..8c8131a8 --- /dev/null +++ b/php/tests/110.phpt @@ -0,0 +1,114 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: string) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/110b.phpt b/php/tests/110b.phpt new file mode 100644 index 00000000..2924e767 --- /dev/null +++ b/php/tests/110b.phpt @@ -0,0 +1,114 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/111.phpt b/php/tests/111.phpt new file mode 100644 index 00000000..aeb3f60f --- /dev/null +++ b/php/tests/111.phpt @@ -0,0 +1,114 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: object) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/111b.phpt b/php/tests/111b.phpt new file mode 100644 index 00000000..39e124fa --- /dev/null +++ b/php/tests/111b.phpt @@ -0,0 +1,114 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/112.phpt b/php/tests/112.phpt new file mode 100644 index 00000000..1cdaf45d --- /dev/null +++ b/php/tests/112.phpt @@ -0,0 +1,144 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: string) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/112b.phpt b/php/tests/112b.phpt new file mode 100644 index 00000000..af7c0cea --- /dev/null +++ b/php/tests/112b.phpt @@ -0,0 +1,144 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/113.phpt b/php/tests/113.phpt new file mode 100644 index 00000000..d4277354 --- /dev/null +++ b/php/tests/113.phpt @@ -0,0 +1,144 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: object) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/113b.phpt b/php/tests/113b.phpt new file mode 100644 index 00000000..1b792b97 --- /dev/null +++ b/php/tests/113b.phpt @@ -0,0 +1,144 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/114.phpt b/php/tests/114.phpt new file mode 100644 index 00000000..d325ec54 --- /dev/null +++ b/php/tests/114.phpt @@ -0,0 +1,166 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array) +--SKIPIF-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$arySubObj = array( + "subdata" => "subdatadata", + "subpriv" => "subprivdata", + "subpdata" => null, +); + +$aryMyObj = array( + "data" => "datadata", + "priv" => "privdata", + "pdata" => null, + "subary" => array($arySubObj), +); + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array($aryMyObj); +$resary = array($aryMyObj, $aryMyObj); +$resary[0]["pdata"] = "pubdata0"; +$resary[0]["subary"][] = $arySubObj; +$resary[0]["subary"][0]["subpdata"] = "subpubdata00"; +$resary[0]["subary"][1]["subpdata"] = "subpdata01"; +$resary[1]["subary"][] = $arySubObj; +$resary[1]["pdata"] = "pubdata1"; +$resary[1]["subary"][0]["subpdata"] = "subpubdata1"; +$resary[1]["subary"][1]["subpdata"] = "subpdata11"; + +test("recursive object list to associative array list", $ary, $tpl, $resary); + +--EXPECTF-- +array(2) { + [0]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/114b.phpt b/php/tests/114b.phpt new file mode 100644 index 00000000..790fe964 --- /dev/null +++ b/php/tests/114b.phpt @@ -0,0 +1,166 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$arySubObj = array( + "subdata" => "subdatadata", + "subpriv" => "subprivdata", + "subpdata" => null, +); + +$aryMyObj = array( + "data" => "datadata", + "priv" => "privdata", + "pdata" => null, + "subary" => array($arySubObj), +); + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array($aryMyObj); +$resary = array($aryMyObj, $aryMyObj); +$resary[0]["pdata"] = "pubdata0"; +$resary[0]["subary"][] = $arySubObj; +$resary[0]["subary"][0]["subpdata"] = "subpubdata00"; +$resary[0]["subary"][1]["subpdata"] = "subpdata01"; +$resary[1]["subary"][] = $arySubObj; +$resary[1]["pdata"] = "pubdata1"; +$resary[1]["subary"][0]["subpdata"] = "subpubdata1"; +$resary[1]["subary"][1]["subpdata"] = "subpdata11"; + +test("recursive object list to associative array list", $ary, $tpl, $resary); + +--EXPECTF-- +array(2) { + [0]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/115.phpt b/php/tests/115.phpt new file mode 100644 index 00000000..67557719 --- /dev/null +++ b/php/tests/115.phpt @@ -0,0 +1,82 @@ +--TEST-- +unpack of template converter: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array("MyObj"); + +test("object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/115b.phpt b/php/tests/115b.phpt new file mode 100644 index 00000000..fd8569b3 --- /dev/null +++ b/php/tests/115b.phpt @@ -0,0 +1,89 @@ +--TEST-- +unpack of template converter: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array("MyObj"); + +test("object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/116.phpt b/php/tests/116.phpt new file mode 100644 index 00000000..b2404aa1 --- /dev/null +++ b/php/tests/116.phpt @@ -0,0 +1,82 @@ +--TEST-- +unpack of template converter: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array(new MyObj()); + +test("object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/116b.phpt b/php/tests/116b.phpt new file mode 100644 index 00000000..79c6e1eb --- /dev/null +++ b/php/tests/116b.phpt @@ -0,0 +1,89 @@ +--TEST-- +unpack of template converter: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + + function __construct() + { + $this->data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array(new MyObj()); + +test("object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/117.phpt b/php/tests/117.phpt new file mode 100644 index 00000000..15696099 --- /dev/null +++ b/php/tests/117.phpt @@ -0,0 +1,88 @@ +--TEST-- +unpack of template converter: class unpacker (string: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj { + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = "MyObj"; + +test("recursive object /w string", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/117b.phpt b/php/tests/117b.phpt new file mode 100644 index 00000000..910eebf4 --- /dev/null +++ b/php/tests/117b.phpt @@ -0,0 +1,96 @@ +--TEST-- +unpack of template converter: class unpacker (string: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = "MyObj"; + +test("recursive object /w string", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/118.phpt b/php/tests/118.phpt new file mode 100644 index 00000000..c73bde80 --- /dev/null +++ b/php/tests/118.phpt @@ -0,0 +1,89 @@ +--TEST-- +unpack of template converter: class unpacker (object: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = new MyObj(); + +test("recursive object /w instance", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/118b.phpt b/php/tests/118b.phpt new file mode 100644 index 00000000..2a93617e --- /dev/null +++ b/php/tests/118b.phpt @@ -0,0 +1,96 @@ +--TEST-- +unpack of template converter: class unpacker (object: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = new MyObj(); + +test("recursive object /w instance", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/119.phpt b/php/tests/119.phpt new file mode 100644 index 00000000..ff4011a6 --- /dev/null +++ b/php/tests/119.phpt @@ -0,0 +1,94 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/119b.phpt b/php/tests/119b.phpt new file mode 100644 index 00000000..bf3bc204 --- /dev/null +++ b/php/tests/119b.phpt @@ -0,0 +1,101 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/120.phpt b/php/tests/120.phpt new file mode 100644 index 00000000..b9e196ec --- /dev/null +++ b/php/tests/120.phpt @@ -0,0 +1,93 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj { + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array(new MyObj()); + +test("recursive object with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/120b.phpt b/php/tests/120b.phpt new file mode 100644 index 00000000..a2ceb91c --- /dev/null +++ b/php/tests/120b.phpt @@ -0,0 +1,101 @@ +--TEST-- +unpack of template converter: multiple class: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/121.phpt b/php/tests/121.phpt new file mode 100644 index 00000000..41fbce0b --- /dev/null +++ b/php/tests/121.phpt @@ -0,0 +1,115 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/121b.phpt b/php/tests/121b.phpt new file mode 100644 index 00000000..f9a957bc --- /dev/null +++ b/php/tests/121b.phpt @@ -0,0 +1,122 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/122.phpt b/php/tests/122.phpt new file mode 100644 index 00000000..ef9b103a --- /dev/null +++ b/php/tests/122.phpt @@ -0,0 +1,115 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/122b.phpt b/php/tests/122b.phpt new file mode 100644 index 00000000..21f29507 --- /dev/null +++ b/php/tests/122b.phpt @@ -0,0 +1,122 @@ +--TEST-- +unpack of template converter: multiple variable: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/123.phpt b/php/tests/123.phpt new file mode 100644 index 00000000..477150d6 --- /dev/null +++ b/php/tests/123.phpt @@ -0,0 +1,145 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/123b.phpt b/php/tests/123b.phpt new file mode 100644 index 00000000..799d3481 --- /dev/null +++ b/php/tests/123b.phpt @@ -0,0 +1,152 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: string: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/124.phpt b/php/tests/124.phpt new file mode 100644 index 00000000..f45a2433 --- /dev/null +++ b/php/tests/124.phpt @@ -0,0 +1,145 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/124b.phpt b/php/tests/124b.phpt new file mode 100644 index 00000000..a47eb19d --- /dev/null +++ b/php/tests/124b.phpt @@ -0,0 +1,152 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: object: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/125.phpt b/php/tests/125.phpt new file mode 100644 index 00000000..142cd40c --- /dev/null +++ b/php/tests/125.phpt @@ -0,0 +1,167 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: OPT_PHPONLY=false) +--SKIPIF-- +setOption(MessagePack::OPT_PHPONLY, false); + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$arySubObj = array( + "subdata" => "subdatadata", + "subpriv" => "subprivdata", + "subpdata" => null, +); + +$aryMyObj = array( + "data" => "datadata", + "priv" => "privdata", + "pdata" => null, + "subary" => array($arySubObj), +); + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array($aryMyObj); +$resary = array($aryMyObj, $aryMyObj); +$resary[0]["pdata"] = "pubdata0"; +$resary[0]["subary"][] = $arySubObj; +$resary[0]["subary"][0]["subpdata"] = "subpubdata00"; +$resary[0]["subary"][1]["subpdata"] = "subpdata01"; +$resary[1]["subary"][] = $arySubObj; +$resary[1]["pdata"] = "pubdata1"; +$resary[1]["subary"][0]["subpdata"] = "subpubdata1"; +$resary[1]["subary"][1]["subpdata"] = "subpdata11"; + +test("recursive object list to associative array list", $ary, $tpl, $resary); + +--EXPECTF-- +array(2) { + [0]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/125b.phpt b/php/tests/125b.phpt new file mode 100644 index 00000000..31e43a89 --- /dev/null +++ b/php/tests/125b.phpt @@ -0,0 +1,174 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array: OPT_PHPONLY=false) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +setOption(MESSAGEPACK_OPT_PHPONLY, false); + } + else + { + $msgpack->setOption(MessagePack::OPT_PHPONLY, false); + } + + $serialized = $msgpack->pack($variable); + + $unserialized = $msgpack->unpack($serialized, $object); + + var_dump($unserialized); + if ($result) + { + echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; + } + else + { + echo 'SKIP', PHP_EOL; + } +} + +class MyObj +{ + private $data = null; + private $priv = "privdata"; + public $pdata = null; + public $subary = null; + + function __construct() + { + $this->data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$arySubObj = array( + "subdata" => "subdatadata", + "subpriv" => "subprivdata", + "subpdata" => null, +); + +$aryMyObj = array( + "data" => "datadata", + "priv" => "privdata", + "pdata" => null, + "subary" => array($arySubObj), +); + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array($aryMyObj); +$resary = array($aryMyObj, $aryMyObj); +$resary[0]["pdata"] = "pubdata0"; +$resary[0]["subary"][] = $arySubObj; +$resary[0]["subary"][0]["subpdata"] = "subpubdata00"; +$resary[0]["subary"][1]["subpdata"] = "subpdata01"; +$resary[1]["subary"][] = $arySubObj; +$resary[1]["pdata"] = "pubdata1"; +$resary[1]["subary"][0]["subpdata"] = "subpubdata1"; +$resary[1]["subary"][1]["subpdata"] = "subpdata11"; + +test("recursive object list to associative array list", $ary, $tpl, $resary); + +--EXPECTF-- +array(2) { + [0]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/126.phpt b/php/tests/126.phpt new file mode 100644 index 00000000..351c4f1a --- /dev/null +++ b/php/tests/126.phpt @@ -0,0 +1,78 @@ +--TEST-- +unpack of template converter (array: string) +--SKIPIF-- +data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array("MyObj"); + +test("object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/126b.phpt b/php/tests/126b.phpt new file mode 100644 index 00000000..5bc6dd06 --- /dev/null +++ b/php/tests/126b.phpt @@ -0,0 +1,78 @@ +--TEST-- +unpack of template converter (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array("MyObj"); + +test("object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/127.phpt b/php/tests/127.phpt new file mode 100644 index 00000000..70c435b5 --- /dev/null +++ b/php/tests/127.phpt @@ -0,0 +1,78 @@ +--TEST-- +unpack of template converter (array: object) +--SKIPIF-- +data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array(new MyObj()); + +test("object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/127b.phpt b/php/tests/127b.phpt new file mode 100644 index 00000000..fac7585a --- /dev/null +++ b/php/tests/127b.phpt @@ -0,0 +1,78 @@ +--TEST-- +unpack of template converter (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata0"; + +$obj2 = new MyObj(); +$obj2->pdata = "pubdata1"; + +$ary = array($obj, $obj2); + +$tpl = array(new MyObj()); + +test("object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + } + [1]=> + object(MyObj)#%d (3) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + } +} +OK diff --git a/php/tests/128.phpt b/php/tests/128.phpt new file mode 100644 index 00000000..40d7e7cc --- /dev/null +++ b/php/tests/128.phpt @@ -0,0 +1,84 @@ +--TEST-- +unpack of template converter (string) +--SKIPIF-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj { + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = "MyObj"; + +test("recursive object /w string", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/128b.phpt b/php/tests/128b.phpt new file mode 100644 index 00000000..fbdabf39 --- /dev/null +++ b/php/tests/128b.phpt @@ -0,0 +1,85 @@ +--TEST-- +unpack of template converter (string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = "MyObj"; + +test("recursive object /w string", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/129.phpt b/php/tests/129.phpt new file mode 100644 index 00000000..897e766b --- /dev/null +++ b/php/tests/129.phpt @@ -0,0 +1,85 @@ +--TEST-- +unpack of template converter (object) +--SKIPIF-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = new MyObj(); + +test("recursive object /w instance", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/129b.phpt b/php/tests/129b.phpt new file mode 100644 index 00000000..fa69ecf6 --- /dev/null +++ b/php/tests/129b.phpt @@ -0,0 +1,85 @@ +--TEST-- +unpack of template converter (object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$tpl = new MyObj(); + +test("recursive object /w instance", $obj, $tpl, $obj); + +--EXPECTF-- +object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } +} +OK diff --git a/php/tests/130.phpt b/php/tests/130.phpt new file mode 100644 index 00000000..36779e7e --- /dev/null +++ b/php/tests/130.phpt @@ -0,0 +1,90 @@ +--TEST-- +unpack of template converter: multiple class: (array: string) +--SKIPIF-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/130b.phpt b/php/tests/130b.phpt new file mode 100644 index 00000000..dd96cbd3 --- /dev/null +++ b/php/tests/130b.phpt @@ -0,0 +1,90 @@ +--TEST-- +unpack of template converter: multiple class: (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/131.phpt b/php/tests/131.phpt new file mode 100644 index 00000000..d0f46346 --- /dev/null +++ b/php/tests/131.phpt @@ -0,0 +1,89 @@ +--TEST-- +unpack of template converter: multiple class: (array: object) +--SKIPIF-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj { + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array(new MyObj()); + +test("recursive object with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/131b.phpt b/php/tests/131b.phpt new file mode 100644 index 00000000..e65350bf --- /dev/null +++ b/php/tests/131b.phpt @@ -0,0 +1,90 @@ +--TEST-- +unpack of template converter: multiple class: (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj = new MyObj(); +$obj->pdata = "pubdata"; +$obj->subary->subpdata = "subpubdata"; + +$ary = array($obj); + +$tpl = array("MyObj"); + +test("recursive object with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(1) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(7) "pubdata" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpubdata" + } + } +} +OK diff --git a/php/tests/132.phpt b/php/tests/132.phpt new file mode 100644 index 00000000..fc38a82f --- /dev/null +++ b/php/tests/132.phpt @@ -0,0 +1,111 @@ +--TEST-- +unpack of template converter: multiple variable: (array: string) +--SKIPIF-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/132b.phpt b/php/tests/132b.phpt new file mode 100644 index 00000000..7ddb9e72 --- /dev/null +++ b/php/tests/132b.phpt @@ -0,0 +1,111 @@ +--TEST-- +unpack of template converter: multiple variable: (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/133.phpt b/php/tests/133.phpt new file mode 100644 index 00000000..7452a318 --- /dev/null +++ b/php/tests/133.phpt @@ -0,0 +1,111 @@ +--TEST-- +unpack of template converter: multiple variable: (array: object) +--SKIPIF-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/133b.phpt b/php/tests/133b.phpt new file mode 100644 index 00000000..aa41971a --- /dev/null +++ b/php/tests/133b.phpt @@ -0,0 +1,111 @@ +--TEST-- +unpack of template converter: multiple variable: (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = new SubObj(); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary->subpdata = "subpubdata0"; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary->subpdata = "subpubdata1"; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata0" + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + } +} +OK diff --git a/php/tests/134.phpt b/php/tests/134.phpt new file mode 100644 index 00000000..587e1486 --- /dev/null +++ b/php/tests/134.phpt @@ -0,0 +1,141 @@ +--TEST-- +unpack of template converter: multiple class/variable: (array: string) +--SKIPIF-- +data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/134b.phpt b/php/tests/134b.phpt new file mode 100644 index 00000000..d243496f --- /dev/null +++ b/php/tests/134b.phpt @@ -0,0 +1,141 @@ +--TEST-- +unpack of template converter: multiple class/variable: (array: string) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array("MyObj"); + +test("recursive object list with object list /w string", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/135.phpt b/php/tests/135.phpt new file mode 100644 index 00000000..3d36482f --- /dev/null +++ b/php/tests/135.phpt @@ -0,0 +1,141 @@ +--TEST-- +unpack of template converter: multiple class/variable: (array: object) +--SKIPIF-- +data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + [%r"?data"?:("MyObj":)?private"?%r]=> + string(8) "datadata" + [%r"?priv"?:("MyObj":)?private"?%r]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + [%r"?subdata"?:("SubObj":)?private"?%r]=> + string(11) "subdatadata" + [%r"?subpriv"?:("SubObj":)?private"?%r]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/135b.phpt b/php/tests/135b.phpt new file mode 100644 index 00000000..4dd42765 --- /dev/null +++ b/php/tests/135b.phpt @@ -0,0 +1,141 @@ +--TEST-- +unpack of template converter: multiple class/variable: (array: object) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array(new MyObj()); + +test("recursive object list with object list /w instance", $ary, $tpl, $ary); + +--EXPECTF-- +array(2) { + [0]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + object(MyObj)#%d (4) { + ["data:private"]=> + string(8) "datadata" + ["priv:private"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + object(SubObj)#%d (3) { + ["subdata:private"]=> + string(11) "subdatadata" + ["subpriv:private"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/136.phpt b/php/tests/136.phpt new file mode 100644 index 00000000..2f2ef5d7 --- /dev/null +++ b/php/tests/136.phpt @@ -0,0 +1,163 @@ +--TEST-- +unpack of template converter: multiple class/variable: (array) +--SKIPIF-- +data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$arySubObj = array( + "subdata" => "subdatadata", + "subpriv" => "subprivdata", + "subpdata" => null, +); + +$aryMyObj = array( + "data" => "datadata", + "priv" => "privdata", + "pdata" => null, + "subary" => array($arySubObj), +); + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array($aryMyObj); +$resary = array($aryMyObj, $aryMyObj); +$resary[0]["pdata"] = "pubdata0"; +$resary[0]["subary"][] = $arySubObj; +$resary[0]["subary"][0]["subpdata"] = "subpubdata00"; +$resary[0]["subary"][1]["subpdata"] = "subpdata01"; +$resary[1]["subary"][] = $arySubObj; +$resary[1]["pdata"] = "pubdata1"; +$resary[1]["subary"][0]["subpdata"] = "subpubdata1"; +$resary[1]["subary"][1]["subpdata"] = "subpdata11"; + +test("recursive object list to associative array list", $ary, $tpl, $resary); + +--EXPECTF-- +array(2) { + [0]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK diff --git a/php/tests/136b.phpt b/php/tests/136b.phpt new file mode 100644 index 00000000..3b1d5b20 --- /dev/null +++ b/php/tests/136b.phpt @@ -0,0 +1,163 @@ +--TEST-- +unpack of template converter: multiple class/variable: class unpacker (array) +--SKIPIF-- += 0) { + echo "skip tests in PHP 5.1 or older"; +} +--FILE-- +data = "datadata"; + $this->subary = array(new SubObj()); + } +} + +class SubObj +{ + private $subdata = null; + private $subpriv = "subprivdata"; + public $subpdata = null; + + function __construct() + { + $this->subdata = "subdatadata"; + } +} + +$arySubObj = array( + "subdata" => "subdatadata", + "subpriv" => "subprivdata", + "subpdata" => null, +); + +$aryMyObj = array( + "data" => "datadata", + "priv" => "privdata", + "pdata" => null, + "subary" => array($arySubObj), +); + +$obj0 = new MyObj(); +$obj0->pdata = "pubdata0"; +$obj0->subary[0]->subpdata = "subpubdata00"; +$subobj01 = new SubObj(); +$subobj01->subpdata = "subpdata01"; +$obj0->subary[1] = $subobj01; +$obj1 = new MyObj(); +$obj1->pdata = "pubdata1"; +$obj1->subary[0]->subpdata = "subpubdata1"; +$subobj11 = new SubObj(); +$subobj11->subpdata = "subpdata11"; +$obj1->subary[1] = $subobj11; + +$ary = array($obj0, $obj1); + +$tpl = array($aryMyObj); +$resary = array($aryMyObj, $aryMyObj); +$resary[0]["pdata"] = "pubdata0"; +$resary[0]["subary"][] = $arySubObj; +$resary[0]["subary"][0]["subpdata"] = "subpubdata00"; +$resary[0]["subary"][1]["subpdata"] = "subpdata01"; +$resary[1]["subary"][] = $arySubObj; +$resary[1]["pdata"] = "pubdata1"; +$resary[1]["subary"][0]["subpdata"] = "subpubdata1"; +$resary[1]["subary"][1]["subpdata"] = "subpdata11"; + +test("recursive object list to associative array list", $ary, $tpl, $resary); + +--EXPECTF-- +array(2) { + [0]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata0" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(12) "subpubdata00" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata01" + } + } + } + [1]=> + array(4) { + ["data"]=> + string(8) "datadata" + ["priv"]=> + string(8) "privdata" + ["pdata"]=> + string(8) "pubdata1" + ["subary"]=> + array(2) { + [0]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(11) "subpubdata1" + } + [1]=> + array(3) { + ["subdata"]=> + string(11) "subdatadata" + ["subpriv"]=> + string(11) "subprivdata" + ["subpdata"]=> + string(10) "subpdata11" + } + } + } +} +OK