PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/dom - attr.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 67 87 77.0 %
Date: 2014-10-24 Functions: 8 8 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :    +----------------------------------------------------------------------+
       3             :    | PHP Version 5                                                        |
       4             :    +----------------------------------------------------------------------+
       5             :    | Copyright (c) 1997-2014 The PHP Group                                |
       6             :    +----------------------------------------------------------------------+
       7             :    | This source file is subject to version 3.01 of the PHP license,      |
       8             :    | that is bundled with this package in the file LICENSE, and is        |
       9             :    | available through the world-wide-web at the following url:           |
      10             :    | http://www.php.net/license/3_01.txt                                  |
      11             :    | If you did not receive a copy of the PHP license and are unable to   |
      12             :    | obtain it through the world-wide-web, please send a note to          |
      13             :    | license@php.net so we can mail you a copy immediately.               |
      14             :    +----------------------------------------------------------------------+
      15             :    | Authors: Christian Stocker <chregu@php.net>                          |
      16             :    |          Rob Richards <rrichards@php.net>                            |
      17             :    +----------------------------------------------------------------------+
      18             : */
      19             : 
      20             : /* $Id$ */
      21             : 
      22             : #ifdef HAVE_CONFIG_H
      23             : #include "config.h"
      24             : #endif
      25             : 
      26             : #include "php.h"
      27             : 
      28             : #if HAVE_LIBXML && HAVE_DOM
      29             : 
      30             : #include "php_dom.h"
      31             : 
      32             : /* {{{ arginfo */
      33             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_attr_is_id, 0, 0, 0)
      34             : ZEND_END_ARG_INFO();
      35             : 
      36             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_attr_construct, 0, 0, 1)
      37             :         ZEND_ARG_INFO(0, name)
      38             :         ZEND_ARG_INFO(0, value)
      39             : ZEND_END_ARG_INFO();
      40             : /* }}} */
      41             : 
      42             : /*
      43             : * class DOMAttr extends DOMNode 
      44             : *
      45             : * URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-637646024
      46             : * Since: 
      47             : */
      48             : 
      49             : const zend_function_entry php_dom_attr_class_functions[] = {
      50             :         PHP_FALIAS(isId, dom_attr_is_id, arginfo_dom_attr_is_id)
      51             :         PHP_ME(domattr, __construct, arginfo_dom_attr_construct, ZEND_ACC_PUBLIC)
      52             :         PHP_FE_END
      53             : };
      54             : 
      55             : /* {{{ proto void DOMAttr::__construct(string name, [string value]); */
      56           6 : PHP_METHOD(domattr, __construct)
      57             : {
      58             : 
      59             :         zval *id;
      60           6 :         xmlAttrPtr nodep = NULL;
      61           6 :         xmlNodePtr oldnode = NULL;
      62             :         dom_object *intern;
      63           6 :         char *name, *value = NULL;
      64             :         int name_len, value_len, name_valid;
      65             :         zend_error_handling error_handling;
      66             : 
      67           6 :         zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling TSRMLS_CC);
      68           6 :         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_attr_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
      69           1 :                 zend_restore_error_handling(&error_handling TSRMLS_CC);
      70           1 :                 return;
      71             :         }
      72             : 
      73           5 :         zend_restore_error_handling(&error_handling TSRMLS_CC);
      74           5 :         intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
      75             : 
      76           5 :         name_valid = xmlValidateName((xmlChar *) name, 0);
      77           5 :         if (name_valid != 0) {
      78           1 :                 php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC);
      79           1 :                 RETURN_FALSE;
      80             :         }
      81             : 
      82           4 :         nodep = xmlNewProp(NULL, (xmlChar *) name, value);
      83             : 
      84           4 :         if (!nodep) {
      85           0 :                 php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
      86           0 :                 RETURN_FALSE;
      87             :         }
      88             : 
      89           4 :         if (intern != NULL) {
      90           4 :                 oldnode = dom_object_get_node(intern);
      91           4 :                 if (oldnode != NULL) {
      92           0 :                         php_libxml_node_free_resource(oldnode  TSRMLS_CC);
      93             :                 }
      94           4 :                 php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)nodep, (void *)intern TSRMLS_CC);
      95             :         }
      96             : }
      97             : 
      98             : /* }}} end DOMAttr::__construct */
      99             : 
     100             : /* {{{ name     string  
     101             : readonly=yes 
     102             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1112119403
     103             : Since: 
     104             : */
     105           2 : int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC)
     106             : {
     107             :         xmlAttrPtr attrp;
     108             : 
     109           2 :         attrp = (xmlAttrPtr) dom_object_get_node(obj);
     110             : 
     111           2 :         if (attrp == NULL) {
     112           0 :                 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
     113           0 :                 return FAILURE;
     114             :         }
     115             : 
     116           2 :         ALLOC_ZVAL(*retval);
     117           2 :         ZVAL_STRING(*retval, (char *) (attrp->name), 1);
     118             : 
     119           2 :         return SUCCESS;
     120             : }
     121             : 
     122             : /* }}} */
     123             : 
     124             : /* {{{ specified        boolean 
     125             : readonly=yes 
     126             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-862529273
     127             : Since: 
     128             : */
     129           1 : int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC)
     130             : {
     131             :         /* TODO */
     132           1 :         ALLOC_ZVAL(*retval);
     133           1 :         ZVAL_TRUE(*retval);
     134           1 :         return SUCCESS;
     135             : }
     136             : 
     137             : /* }}} */
     138             : 
     139             : /* {{{ value    string  
     140             : readonly=no 
     141             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-221662474
     142             : Since: 
     143             : */
     144           7 : int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC)
     145             : {
     146             :         xmlAttrPtr attrp;
     147             :         xmlChar *content;
     148             : 
     149           7 :         attrp = (xmlAttrPtr) dom_object_get_node(obj);
     150             : 
     151           7 :         if (attrp == NULL) {
     152           0 :                 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
     153           0 :                 return FAILURE;
     154             :         }
     155             : 
     156           7 :         ALLOC_ZVAL(*retval);
     157             : 
     158             :         
     159           7 :         if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) {
     160           7 :                 ZVAL_STRING(*retval, content, 1);
     161           7 :                 xmlFree(content);
     162             :         } else {
     163           0 :                 ZVAL_EMPTY_STRING(*retval);
     164             :         }
     165             : 
     166           7 :         return SUCCESS;
     167             : 
     168             : }
     169             : 
     170           5 : int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC)
     171             : {
     172             :         zval value_copy;
     173             :         xmlAttrPtr attrp;
     174             : 
     175           5 :         attrp = (xmlAttrPtr) dom_object_get_node(obj);
     176             : 
     177           5 :         if (attrp == NULL) {
     178           0 :                 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
     179           0 :                 return FAILURE;
     180             :         }
     181             : 
     182           5 :         if (attrp->children) {
     183           4 :                 node_list_unlink(attrp->children TSRMLS_CC);
     184             :         }
     185             : 
     186           5 :         if (newval->type != IS_STRING) {
     187           1 :                 if(Z_REFCOUNT_P(newval) > 1) {
     188           0 :                         value_copy = *newval;
     189             :                         zval_copy_ctor(&value_copy);
     190           0 :                         newval = &value_copy;
     191             :                 }
     192           1 :                 convert_to_string(newval);
     193             :         }
     194             : 
     195           5 :         xmlNodeSetContentLen((xmlNodePtr) attrp, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
     196             : 
     197           5 :         if (newval == &value_copy) {
     198             :                 zval_dtor(newval);
     199             :         }
     200             : 
     201           5 :         return SUCCESS;
     202             : }
     203             : 
     204             : /* }}} */
     205             : 
     206             : /* {{{ ownerElement     DOMElement      
     207             : readonly=yes 
     208             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-ownerElement
     209             : Since: DOM Level 2
     210             : */
     211           2 : int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC)
     212             : {
     213             :         xmlNodePtr nodep, nodeparent;
     214             :         int ret;
     215             : 
     216           2 :         nodep = dom_object_get_node(obj);
     217             : 
     218           2 :         if (nodep == NULL) {
     219           0 :                 php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
     220           0 :                 return FAILURE;
     221             :         }
     222             : 
     223           2 :         ALLOC_ZVAL(*retval);
     224             : 
     225           2 :         nodeparent = nodep->parent;
     226           2 :         if (!nodeparent) {
     227           0 :                 ZVAL_NULL(*retval);
     228           0 :                 return SUCCESS;
     229             :         }
     230             : 
     231           2 :         if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, *retval, obj TSRMLS_CC))) {
     232           0 :                 php_error_docref(NULL TSRMLS_CC, E_WARNING,  "Cannot create required DOM object");
     233           0 :                 return FAILURE;
     234             :         }
     235           2 :         return SUCCESS;
     236             : 
     237             : }
     238             : 
     239             : /* }}} */
     240             : 
     241             : /* {{{ schemaTypeInfo   DOMTypeInfo     
     242             : readonly=yes 
     243             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-schemaTypeInfo
     244             : Since: DOM Level 3
     245             : */
     246           1 : int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC)
     247             : {
     248           1 :         php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not yet implemented");
     249           1 :         ALLOC_ZVAL(*retval);
     250           1 :         ZVAL_NULL(*retval);
     251           1 :         return SUCCESS;
     252             : }
     253             : 
     254             : /* }}} */
     255             : 
     256             : /* {{{ proto boolean dom_attr_is_id();
     257             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId
     258             : Since: DOM Level 3
     259             : */
     260           1 : PHP_FUNCTION(dom_attr_is_id)
     261             : {
     262             :         zval *id;
     263             :         dom_object *intern;
     264             :         xmlAttrPtr attrp;
     265             : 
     266           1 :         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_attr_class_entry) == FAILURE) {
     267           0 :                 return;
     268             :         }
     269             : 
     270           1 :         DOM_GET_OBJ(attrp, id, xmlAttrPtr, intern);
     271             : 
     272           1 :         if (attrp->atype == XML_ATTRIBUTE_ID) {
     273           0 :                 RETURN_TRUE;
     274             :         } else {
     275           1 :                 RETURN_FALSE;
     276             :         }
     277             : }
     278             : /* }}} end dom_attr_is_id */
     279             : 
     280             : #endif
     281             : 
     282             : /*
     283             :  * Local variables:
     284             :  * tab-width: 4
     285             :  * c-basic-offset: 4
     286             :  * End:
     287             :  * vim600: noet sw=4 ts=4 fdm=marker
     288             :  * vim<600: noet sw=4 ts=4
     289             :  */

Generated by: LCOV version 1.10

Generated at Fri, 24 Oct 2014 05:21:46 +0000 (7 days ago)

Copyright © 2005-2014 The PHP Group
All rights reserved.