Changeset 20864 for lang/cplusplus

Show
Ignore:
Timestamp:
10/07/08 00:43:28 (2 months ago)
Author:
tokuhirom
Message:

added doc.createTextNode

Location:
lang/cplusplus/llv8call/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/cplusplus/llv8call/trunk/ext/libxml/document.cc

    r20862 r20864  
    2323#include "libxml.h" 
    2424 
    25 #define EXTERNAL_DOC() EXTERNAL(xmlDocPtr, doc, args.This(), 0); 
     25#define EXTERNAL_DOC()      EXTERNAL(xmlDocPtr,  doc,      args.This(), 0); 
     26#define EXTERNAL_FRAGMENT() EXTERNAL(xmlNodePtr, fragment, args.This(), 1); 
    2627 
    2728FUNCTION(createDocument) 
     
    3637    Handle<Object> t = document_class()->NewInstance(); 
    3738    t->SetInternalField(0, External::New(doc)); 
     39    t->SetInternalField(1, External::New(xmlNewDocFragment(doc))); 
    3840    return t; 
    3941END 
     
    4547    assert(doc); // TODO: better error handling 
    4648    args.This()->SetInternalField(0, External::New(doc)); 
     49    args.This()->SetInternalField(1, External::New(xmlNewDocFragment(doc))); 
    4750    return Undefined(); 
    4851END 
     
    101104    ARG_str(elname, 0); 
    102105    EXTERNAL_DOC(); 
     106    EXTERNAL_FRAGMENT(); 
    103107 
    104108    xmlNodePtr node_raw = xmlNewNode(NULL, (const xmlChar*)*elname); 
    105109    assert(node_raw); 
     110    xmlAddChild(fragment, node_raw); 
    106111    return createNode( doc, node_raw ); 
     112END 
     113 
     114FUNCTION(createTextNode) 
     115    ARG_COUNT(1); 
     116    ARG_str(text, 0); 
     117    EXTERNAL_DOC(); 
     118    EXTERNAL_FRAGMENT(); 
     119 
     120    xmlNodePtr textnode = xmlNewDocText(doc, (const xmlChar*)*text); 
     121    assert(textnode); 
     122    textnode->doc = doc; 
     123    xmlAddChild(fragment, textnode); 
     124    return createNode( doc, textnode ); 
    107125END 
    108126 
     
    136154    CLASS(); 
    137155    BIND_CM("createDocument",         createDocument); 
    138  
    139156    BIND_IM("readFile",               _readFile); 
    140157    BIND_IM("encoding",               _encoding); 
     
    144161    BIND_IM("setDocumentElement",     setDocumentElement); 
    145162    BIND_IM("createElement",          _createElement); 
     163    BIND_IM("createTextNode",         createTextNode); 
    146164    BIND_IM("toString",               toString); 
    147165    BIND_IM("close",                  _close); 
    148     INTERNALCOUNT(1); 
     166    INTERNALCOUNT(2); 
    149167    EXPORT_CLASS("Document"); 
    150168ENDSUBMODULE 
    151169 
    152 // rest: 9/51 
     170// rest: 11/51 
    153171 
    154172// TODO: doc.actualEncoding 
     
    170188// TODO: doc.documentElement 
    171189// TODO: doc.createElementNS 
    172 // TODO: doc.createTextNode 
    173190// TODO: doc.createComment 
    174191// TODO: doc.createAttribute 
  • lang/cplusplus/llv8call/trunk/t/070_libxml/01_simple.js

    r20859 r20864  
    11require('t/util.js'); 
    22 
    3 plan({tests:7}); 
     3plan({tests:8}); 
    44 
    55check_lib("org.coderepos.libxml"); 
     
    1515is(doc.createElement("bar").toString(), "<bar/>", 'node.toString'); 
    1616is(root.toString(), "<foo/>", "node.toString"); 
     17doc.setEncoding("euc-jp"); 
     18is(doc.encoding(), "euc-jp", "setEncoding"); 
    1719doc.close(); 
    1820 
  • lang/cplusplus/llv8call/trunk/t/070_libxml/02_dom.js

    r20861 r20864  
    11require('t/util.js'); 
    22 
    3 plan({tests:9}); 
     3plan({tests:11}); 
    44 
    55check_lib("org.coderepos.libxml"); 
    66var libxml = org.coderepos.libxml; 
     7 
    78var doc = new libxml.Document.createDocument("1.0"); 
    89var foo = doc.createElement("foo"); 
    910doc.setDocumentElement(foo); 
    10 doc.setEncoding("euc-jp"); 
    11 is(doc.encoding(), "euc-jp", "setEncoding"); 
    1211var root = doc.documentElement(); 
    1312var bar = doc.createElement("bar"); 
    1413var eee = doc.createElement("eee"); 
    15 root.appendChild(bar); 
    16 is(root.toString(), "<foo><bar/></foo>", "node.appendChild"); 
    17 root.removeChild(bar); 
    18 is(root.toString(), "<foo/>", "node.removeChild"); 
    19 root.appendChild(bar); 
    20 root.appendChild(eee); 
    21 is(root.toString(), "<foo><bar/><eee/></foo>", "node.appendChild"); 
    22 root.removeChildNodes(); 
    23 is(root.toString(), "<foo/>", "node.removeChildNodes"); 
    24 root.appendChild(bar); 
    25 is(root.insertBefore(eee, bar).nodeName(), 'eee', 'node.insertBefore'); 
    26 is(root.toString(), "<foo><eee/><bar/></foo>", "node.insertBefore"); 
    27 root.removeChildNodes(); 
    28 root.appendChild(bar); 
    29 is(root.insertAfter(eee, bar).nodeName(), 'eee', 'node.insertAfter'); 
    30 is(root.toString(), "<foo><bar/><eee/></foo>", "node.insertAfter"); 
     14 
     15function test(cb, purpose) { 
     16    root.removeChildNodes(); 
     17    cb(); 
     18} 
     19 
     20test(function () { 
     21    root.appendChild(bar); 
     22    is(root.toString(), "<foo><bar/></foo>", "node.appendChild"); 
     23}); 
     24 
     25test(function () { 
     26    root.appendChild(bar); 
     27    root.removeChild(bar); 
     28    is(root.toString(), "<foo/>", "node.removeChild"); 
     29}); 
     30 
     31test(function () { 
     32    root.appendChild(bar); 
     33    root.appendChild(eee); 
     34    is(root.toString(), "<foo><bar/><eee/></foo>", "node.appendChild"); 
     35}); 
     36 
     37test(function () { 
     38    root.removeChildNodes(); 
     39    is(root.toString(), "<foo/>", "node.removeChildNodes"); 
     40}); 
     41 
     42test(function () { 
     43    root.appendChild(bar); 
     44    is(root.insertBefore(eee, bar).nodeName(), 'eee', 'node.insertBefore'); 
     45    is(root.toString(), "<foo><eee/><bar/></foo>", "node.insertBefore"); 
     46}); 
     47 
     48test(function () { 
     49    root.appendChild(bar); 
     50    is(root.insertAfter(eee, bar).nodeName(), 'eee', 'node.insertAfter'); 
     51    is(root.toString(), "<foo><bar/><eee/></foo>", "node.insertAfter"); 
     52}); 
     53 
     54test(function () { 
     55    root.appendChild(bar); 
     56    is(root.insertAfter(eee, bar).nodeName(), 'eee', 'node.insertAfter'); 
     57    is(root.toString(), "<foo><bar/><eee/></foo>", "node.insertAfter"); 
     58}); 
     59 
     60test(function () { 
     61    root.appendChild(doc.createTextNode("qqq")); 
     62    is(root.toString(), '<foo>qqq</foo>', 'doc.createTextNode()'); 
     63}); 
    3164 
    3265doc.close();