File:  [ELWIX - Embedded LightWeight unIX -] / gpl / axl / test / test_01.py
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 8 07:09:12 2011 UTC (13 years, 2 months ago) by misho
Branches: axl, MAIN
CVS tags: HEAD, AXL0_6_1
3th party - XML

    1: #!/usr/bin/python
    2: # -*- coding: utf-8 -*-
    3: 
    4: import sys
    5: 
    6: # import base library 
    7: import axl
    8: 
    9: def test_01():
   10:     # do two consecutive parse operations
   11:     (doc, err) = axl.parse ("<?xml version='1.0' ?><axldoc />", 32)
   12:     if err:
   13:         error ("Found error: " + str (err.code) + ", message: " + err.msg)
   14:         return False
   15: 
   16:     (doc, err) = axl.parse ("<?xml  version=\"1.0\" \t \n \r encoding='utf-8\"   ?> <data />", 63)
   17:     if err:
   18:         error ("Found error: " + str (err.code) + ", message: " + err.msg)
   19:         return False
   20: 
   21:     # check doc encoding 
   22:     if doc.encoding != "utf-8":
   23:         error ("Error, expected to find enconding value utf-8 but found: " + doc.encoding)
   24:         return False
   25: 
   26:     # do a fail parse operation
   27:     (doc, err) = axl.parse ("aefadsadsf<?xml  version=\"1.0\" \t \n \r encoding='utf-8\"   ?> <data />", 73)
   28:     if not err:
   29:         error ("Expected to find error but found no error report")
   30:         return False
   31:     
   32:     # check error returned
   33:     if not err.code == -2:
   34:         error ("Expected to find error code -2 but found: " + str (err.code))
   35: 
   36:     # check standalone configuration
   37:     (doc, err) = axl.parse ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>  <data/>", 65)
   38:     if err:
   39:         error ("Expected to find proper document parse but a failure was found: " + err.msg)
   40:         return False
   41: 
   42:     if not doc.standalone:
   43:         error ("Expected to find standalone enabled but found it disabled")
   44:         return False
   45:         
   46:     return True
   47: 
   48: def test_01b():
   49:     # parse document
   50:     (doc, err) = axl.file_parse ("test_01b.xml")
   51:     if err:
   52:         error ("Found error: " + str (err.code) + ", message: " + err.msg)
   53:         return False
   54: 
   55:     # get root node
   56:     node = doc.root
   57: 
   58:     # check node name 
   59:     if node.name != "document":
   60:         error ("Expected to find node name 'document' but found: " + node.name)
   61:         return False
   62: 
   63:     # get first child
   64:     node = node.first_child
   65:     
   66:     # check node name 
   67:     if node.name != "child1":
   68:         error ("Expected to find node name 'child1' but found: " + node.name)
   69:         return False
   70: 
   71:     # get next
   72:     node = node.next
   73: 
   74:     # check node name 
   75:     if node.name != "child2":
   76:         error ("Expected to find node name 'child2' but found: " + node.name)
   77:         return False
   78: 
   79:     return True
   80: 
   81: def test_01c():
   82:     # parse document
   83:     (doc, err) = axl.file_parse ("test_01b.xml")
   84:     if err:
   85:         error ("Found error: " + str (err.code) + ", message: " + err.msg)
   86:         return False
   87: 
   88:     # get root node
   89:     node = doc.root
   90: 
   91:     # check node name 
   92:     if node.name != "document":
   93:         error ("Expected to find node name 'document' but found: " + node.name)
   94:         return False
   95: 
   96:     # get first child
   97:     node = node.first_child
   98:     
   99:     # check node name 
  100:     if node.name != "child1":
  101:         error ("Expected to find node name 'child1' but found: " + node.name)
  102:         return False
  103: 
  104:     # get parent
  105:     parent = node.parent
  106: 
  107:     # check node name 
  108:     if parent.name != "document":
  109:         error ("Expected to find node name 'document' but found: " + parent.name)
  110:         return False
  111: 
  112:     node = node.next
  113: 
  114:     # check node name 
  115:     if node.name != "child2":
  116:         error ("Expected to find node name 'child2' but found: " + node.name)
  117:         return False
  118: 
  119: 
  120:     # check parent again
  121:     parent = node.parent
  122: 
  123:     # check node name 
  124:     if parent.name != "document":
  125:         error ("Expected to find node name 'document' but found: " + parent.name)
  126:         return False
  127: 
  128:     node = node.next
  129: 
  130:     # check node name 
  131:     if node.name != "child3":
  132:         error ("Expected to find node name 'child3' but found: " + node.name)
  133:         return False
  134: 
  135:     # check parent again
  136:     parent = node.parent
  137: 
  138:     # check node name 
  139:     if parent.name != "document":
  140:         error ("Expected to find node name 'document' but found: " + parent.name)
  141:         return False
  142: 
  143:     node = node.next
  144: 
  145:     # check node name 
  146:     if node.name != "child4":
  147:         error ("Expected to find node name 'child4' but found: " + node.name)
  148:         return False
  149: 
  150:     # check parent again
  151:     parent = node.parent
  152: 
  153:     # check node name 
  154:     if parent.name != "document":
  155:         error ("Expected to find node name 'document' but found: " + parent.name)
  156:         return False
  157: 
  158:     node = node.next
  159: 
  160:     # check node name 
  161:     if node.name != "child5":
  162:         error ("Expected to find node name 'child5' but found: " + node.name)
  163:         return False
  164: 
  165:     # check next is none
  166:     if node.next:
  167:         error ("Expected to find none value for the next child node found next to child5")
  168:         return False
  169: 
  170:     node = node.previous
  171: 
  172:     # check node name 
  173:     if node.name != "child4":
  174:         error ("Expected to find node name 'child4' but found: " + node.name)
  175:         return False
  176: 
  177:     # check node name 
  178:     if parent.name != "document":
  179:         error ("Expected to find node name 'document' but found: " + parent.name)
  180:         return False
  181: 
  182:     node = node.previous
  183: 
  184:     # check node name 
  185:     if node.name != "child3":
  186:         error ("Expected to find node name 'child3' but found: " + node.name)
  187:         return False
  188: 
  189:     # check node name 
  190:     if parent.name != "document":
  191:         error ("Expected to find node name 'document' but found: " + parent.name)
  192:         return False
  193: 
  194:     node = node.previous
  195: 
  196:     # check node name 
  197:     if node.name != "child2":
  198:         error ("Expected to find node name 'child2' but found: " + node.name)
  199:         return False
  200: 
  201:     # check node name 
  202:     if parent.name != "document":
  203:         error ("Expected to find node name 'document' but found: " + parent.name)
  204:         return False
  205: 
  206:     node = node.previous
  207: 
  208:     # check node name 
  209:     if node.name != "child1":
  210:         error ("Expected to find node name 'child1' but found: " + node.name)
  211:         return False
  212: 
  213:     # check node name 
  214:     if parent.name != "document":
  215:         error ("Expected to find node name 'document' but found: " + parent.name)
  216:         return False
  217:     
  218:     # check previous is none
  219:     if node.previous:
  220:         error ("Expected to find none value for the previous child node found previous to child1")
  221:         return False
  222: 
  223:     # now test called api
  224:     node = doc.root.first_child
  225: 
  226:     # get <child5>
  227:     node = node.next_called ("child5")
  228:     if node.name != "child5":
  229:         error ("Expected to find child node with name child5 but found: " + node.name)
  230:         return False
  231: 
  232:     # get <child5>
  233:     node = node.next_called ("child5")
  234:     if node:
  235:         error ("Expected to find none node after calling next_called with child5 but found: " + node.name)
  236:         return False
  237:     
  238:     node = doc.root.first_child.next_called ("child5")
  239:     if not node:
  240:         error ("Expected to find a xml node but found none")
  241:         return False
  242:     if node.name != "child5":
  243:         error ("Expected to find child node child5 but found: " + node.name)
  244:         return False
  245: 
  246:     # get <child1>
  247:     node = node.previous_called ("child1")
  248:     if not node:
  249:         error ("Expected to find a xml node child1 but found none")
  250:         return False
  251:     if node.name != "child1":
  252:         error ("Expected to find child node child1 but found: " + node.name)
  253:         return False
  254: 
  255:     node = node.previous_called ("child1")
  256:     if node:
  257:         error ("Expected to not find a xml node but found somethind defined: " + node.name)
  258:         return False
  259:     
  260:     return True
  261: 
  262: def test_01d():
  263:     (doc, err) = axl.file_parse ("test_01d.xml")
  264:     if err:
  265:         error ("Expected to find proper parse operation but found an error: " + err.msg)
  266:         return False
  267:     
  268:     child = doc.root.nth_child (0)
  269:     if child.name != "child1":
  270:         error ("Expected to find child1 node but found: " + child.name)
  271:         return False
  272: 
  273:     child = doc.root.nth_child (1)
  274:     if child.name != "child2":
  275:         error ("Expected to find child2 node but found: " + child.name)
  276:         return False
  277: 
  278:     child = doc.root.nth_child (2)
  279:     if child.name != "child3":
  280:         error ("(2) Expected to find child3 node but found: " + child.name)
  281:         return False
  282: 
  283:     child = doc.root.nth_child (3)
  284:     if child.name != "child4":
  285:         error ("Expected to find child4 node but found: " + child.name)
  286:         return False
  287: 
  288:     child = doc.root.nth_child (4)
  289:     if child.name != "child5":
  290:         error ("Expected to find child5 node but found: " + child.name)
  291:         return False
  292:     
  293:     # get the child 0 located at the child 2
  294:     child  = doc.root.nth_child (2).nth_child (0)
  295:     
  296:     if child.name != "a":
  297:         error ("Expected to find node name <a> but found: " + child.name)
  298:         return False
  299: 
  300:     child  = doc.root.nth_child (2).nth_child (1)
  301:     
  302:     if child.name != "b":
  303:         error ("Expected to find node name <b> but found: " + child.name)
  304:         return False
  305: 
  306:     child  = doc.root.nth_child (2).nth_child (2)
  307:     
  308:     if child.name != "c":
  309:         error ("Expected to find node name <c> but found: " + child.name)
  310:         return False
  311: 
  312:     child  = doc.root.nth_child (2).nth_child (3)
  313:     
  314:     if child.name != "f":
  315:         error ("Expected to find node name <f> but found: " + child.name)
  316:         return False
  317: 
  318: 
  319:     child  = doc.root.nth_child (2).nth_child (4)
  320:     
  321:     if child.name != "g":
  322:         error ("Expected to find node name <g> but found: " + child.name)
  323:         return False
  324: 
  325:     return True
  326: 
  327: def test_01f():
  328: 
  329:     # parse document
  330:     (doc, err) = axl.file_parse ("test_01f.xml")
  331:     if err:
  332:         error ("Expected proper document parse but found a failure: " + err.msg)
  333:         return False
  334:     
  335:     # get root content
  336:     (content, size) = doc.root.content
  337: 
  338:     # check content
  339:     if content != "     ":
  340:         error ("Expected to find '     ' but found: " + content)
  341:         return False
  342: 
  343:     # parse another document 
  344:     (doc, err) = axl.file_parse ("test_01f2.xml")
  345:     if err:
  346:         error ("Expected proper document parse but found a failure: " + err.msg)
  347:         return False
  348: 
  349:     # get content from node id found as child of the root node
  350:     (content, size) = doc.root.child_called ("id").content
  351: 
  352:     # check content
  353:     if content != "   ":
  354:         error ("(2) Expected to find '   ' but found: " + content)
  355:         return False
  356: 
  357:     (content, size) = doc.root.child_called ("id2").content
  358: 
  359:     # check content
  360:     if content != "":
  361:         error ("Expected to find '' but found: " + content)
  362:         return False
  363: 
  364:     return True
  365: 
  366: def test_03():
  367:     (doc, err) = axl.parse ("<?xml version='1.0' ?>\n\
  368: <complex>\n\
  369:   <data>\n\
  370:     <row>10</row><row>20</row><row>30</row><row>40</row>\n\
  371:   </data>\n\
  372:   <data2>\n\
  373:     <td> 23  </td>\n\
  374:   </data2>\n\
  375: </complex>", -1)
  376:     
  377:     if err:
  378:         error ("Expected to find proper document load, but a failure was found: " + err.msg)
  379:         return False
  380: 
  381:     if doc.root.name != "complex":
  382:         error ("Expected to find complex node name but found: " + doc.root.name)
  383:         return False
  384:     
  385:     node = doc.get ("/complex/data2/td")
  386:     if not node:
  387:         error ("Expected to find node found at /complex/data2/td")
  388:         return False
  389: 
  390:     # check node name 
  391:     if node.name != "td":
  392:         error ("Expected to find node name td but found: " + node.name)
  393:         return False
  394: 
  395:     node = doc.get ("/complex/data3/td")
  396:     if node:
  397:         error ("Expected to not find node in wrong path but found: " + node.name)
  398:         return False
  399: 
  400:     (content, size) = doc.get ("/complex/data2/td").content
  401:     if content != " 23  ":
  402:         error ("Expected to find content ' 23  ' but found: " + content)
  403:         return False
  404: 
  405:     node = doc.get ("complex/data3/td")
  406:     if node:
  407:         error ("Expected to find no node but found: " + node.name)
  408:         return False
  409: 
  410:     return True
  411: 
  412: def test_04():
  413:     (doc, err) = axl.parse ("<?xml version='1.0' ?>" +
  414:                      "  <?test \"my content\" ?>" + 
  415:                      "  <complex>" + 
  416:                      "    <data>" + 
  417:                      "       <row>" + 
  418:                      "         <!-- A comment inside the middle of the document " + 
  419:                      " more comments ... " + 
  420:                      " more comments \n \r <td>..</td> -->" + 
  421:                      "          <td>10</td>" + 
  422:                      "          <test />" + 
  423:                      " \n \n \r     <?test \"my content\" ?>     \n    \n" + 
  424:                      "  <?test \"my content\" ?>" + 
  425:                      "          <more>" + 
  426:                      "              <test3 attr='2.0' />" + 
  427:                      "          </more>" + 
  428:                      "       </row>" + 
  429:                      "       <test2 />" + 
  430:                      "       <non-xml-document>" + 
  431:                      "                             \n \r \n \t" + 
  432:                      "         <![CDATA[<xml><<<<<<>>>>>><<<>>>><<<<<<>>>]]>"
  433:                      "          \r \n \r \t" + 
  434:                      "       </non-xml-document>" + 
  435:                      "    </data>" + 
  436:                      " <!--   <data>" + 
  437:                      "       <row>" + 
  438:                      "         A comment inside the middle of the document " + 
  439:                      " more comments ... " + 
  440:                      " more comments \n \r <td>..</td> " + 
  441:                      "          <td>10</td>" + 
  442:                      "          <test />" + 
  443:                      "          <more>" + 
  444:                      "              <test2 attr='2.0' attr2='3.0' attr4='4.0'/>" + 
  445:                      "          </more>" + 
  446:                      "       </row>" + 
  447:                      "       <test2 />" + 
  448:                      "    </data> -->" + 
  449:                      "  </complex>", -1)
  450:     
  451:     if err:
  452:         error ("Expected to find proper parse result but found a failure: " + err.msg)
  453:         return False
  454:     
  455:     if doc.get ("/complex/data/row/td").content[0] != "10":
  456:         error ("Expected to find content 10 but found: " + doc.get ("/complex/data/row/td").content[0])
  457:         return False
  458: 
  459:     node = doc.get ("/complex/data/row/more/test3")
  460: 
  461:     if not node.has_attr ("attr"):
  462:         error ("Expected to find attribute attr but not found")
  463:         return False
  464: 
  465:     # now check attr content
  466:     if node.attr ("attr") != "2.0":
  467:         error ("Expected to find attribute value 2.0 but found: " + node.attr ("attr"))
  468:         return False
  469:     
  470:     # check pi instructions support
  471:     if not doc.has_pi ("test"):
  472:         error ("Expected to find pi instruction test but not found")
  473:         return False
  474: 
  475:     if doc.pi ("test") != "\"my content\"":
  476:         error ("Expected to find 'my content' but found: " + doc.pi ("test"))
  477:         return False
  478: 
  479:     # check node content
  480:     if doc.get ("/complex/data/non-xml-document").content[0] != "<xml><<<<<<>>>>>><<<>>>><<<<<<>>>":
  481:         error ("Expected to find <xml><<<<<<>>>>>><<<>>>><<<<<<>>> but found: " + doc.get ("/complex/data/non-xml-document").content[0])
  482:         return False
  483: 
  484:     return True
  485: 
  486: def test_05():
  487:     
  488:     (doc, err) = axl.file_parse ("test.xml")
  489:     
  490:     if doc.get ("/complex/data/row/td").content[0] != "10":
  491:         error ("Expected to find 10 but found: " + doc.get ("/complex/data/row/td").content[0])
  492:         return False
  493: 
  494:     (doc, err) = axl.file_parse ("test2.xml")
  495:     if err:
  496:         error ("Expected to find proper document parsing, but error was found: " + err.msg)
  497:         return False
  498: 
  499:     (dtd, err) = axl.dtd_file_parse ("test.dtd")
  500:     if err:
  501:         error ("Expected to find proper dtd parsing, but error was found: " + err.msg)
  502:         return False
  503: 
  504:     # validate content
  505:     err = dtd.validate (doc)
  506:     if err:
  507:         error ("Expected to find proper DTD validation, but a failure was found: " + err.msg)
  508:         return False
  509: 
  510:     return True
  511: 
  512: def test_22():
  513: 
  514:     # create a document
  515:     doc = axl.Doc ()
  516: 
  517:     # set root node
  518:     doc.root = axl.Node ("root-node")
  519: 
  520:     # check if the node has an attribute not available
  521:     if doc.root.has_attr ("attribute-not-found"):
  522:         error ("Expected to not find attribute: attribute-not-found, but found it")
  523:         return False
  524: 
  525:     # check none value
  526:     if doc.root.attr ("attribute-not-found"):
  527:         error ("Expected to find None value associated to missing attribute, but found something defined")
  528:         return False
  529: 
  530:     # configure attribute
  531:     doc.root.attr ("attribute1", "value1")
  532: 
  533:     # check if the node has an attribute available
  534:     if not doc.root.has_attr ("attribute1"):
  535:         error ("Expected to find attribute: attribute1, but it wasn't found")
  536:         return False
  537: 
  538:     if not doc.root.attr ("attribute1") == "value1":
  539:         error ("Expected to find value1 as value associated to attribute1 but found: " + doc.root.attr ("attribute1"))
  540:         return False
  541: 
  542:     # set more attributes
  543:     doc.root.attr ("attribute2", "value2")
  544:     doc.root.attr ("attribute3", "value3")
  545:     doc.root.attr ("attribute4", "value4")
  546:     doc.root.attr ("attribute5", "value5")
  547:     doc.root.attr ("attribute6", "value6")
  548: 
  549:     # check attr iterator
  550:     cursor = doc.root.attr_cursor_new ()
  551:     while cursor.has_item ():
  552:         if cursor.key == "attribute2" and cursor.value != "value2":
  553:             error ("Expected to find value2 for attribute2 but found: " + cursor.value)
  554:             return False
  555:         if cursor.key == "attribute3" and cursor.value != "value3":
  556:             error ("Expected to find value3 for attribute3 but found: " + cursor.value)
  557:             return False
  558:         if cursor.key == "attribute4" and cursor.value != "value4":
  559:             error ("Expected to find value4 for attribute4 but found: " + cursor.value)
  560:             return False
  561:         if cursor.key == "attribute5" and cursor.value != "value5":
  562:             error ("Expected to find value5 for attribute5 but found: " + cursor.value)
  563:             return False
  564:         if cursor.key == "attribute6" and cursor.value != "value6":
  565:             error ("Expected to find value6 for attribute6 but found: " + cursor.value)
  566:             return False
  567: 
  568:         # next cursor
  569:         cursor.next ()
  570: 
  571:     return True
  572: 
  573: def test_33():
  574: 
  575:     # creates a document with default version, default encoding and standalone = true
  576:     doc  = axl.Doc ()
  577: 
  578:     # create a node
  579:     node = axl.Node ("test")
  580: 
  581:     # set as root
  582:     doc.root = node
  583: 
  584:     iterator = 0
  585:     while iterator < 2:
  586:         # get a temp reference to the current node
  587:         temp = doc.root
  588: 
  589:         # create a new root
  590:         node = axl.Node ("test")
  591: 
  592:         # set new root
  593:         doc.root = node
  594: 
  595:         # set new child
  596:         node.set_child (temp)
  597: 
  598:         # next position
  599:         iterator += 1
  600: 
  601:     # now create empty nodes
  602:     node = axl.Node ("test")
  603: 
  604:     return True
  605: 
  606: def py_test_01():
  607: 
  608:     # parse content
  609:     (doc, err) = axl.parse ("<content />")
  610:     if err:
  611:         error ("Expected to find proper parse operation but found an error: " + err.msg)
  612:         return False
  613: 
  614:     # get the node
  615:     node = doc.root
  616: 
  617:     # get document containing node
  618:     doc2 = node.doc
  619: 
  620:     if doc2.root.name != "content":
  621:         error ("Expected to find node name: content but found: " + doc2.root.name)
  622:         return False
  623: 
  624:     return True
  625: 
  626: ###########################
  627: # intraestructure support #
  628: ###########################
  629: 
  630: def info (msg):
  631:     print "[ INFO  ] : " + msg
  632: 
  633: def error (msg):
  634:     print "[ ERROR ] : " + msg
  635: 
  636: def ok (msg):
  637:     print "[  OK   ] : " + msg
  638: 
  639: def run_all_tests ():
  640:     test_count = 0
  641:     for test in tests:
  642:         
  643:          # print log
  644:         info ("TEST-" + str(test_count) + ": Running " + test[1])
  645:         
  646:         # call test
  647:         if not test[0]():
  648:             error ("detected test failure at: " + test[1])
  649:             return False
  650: 
  651:         # next test
  652:         test_count += 1
  653:     
  654:     ok ("All tests ok!")
  655:     return True
  656: 
  657: # declare list of tests available
  658: tests = [
  659:     # note test functions starting with test_ are using the same reg test
  660:     # as defined by test_01.c (axl reg test). Tests that are specific to
  661:     # py-axl must start with py_test_.
  662:     (test_01,    "Check PyVortex context initialization"),
  663:     (test_01b,   "Check Basic XML parsing, XML document position"),
  664:     (test_01c,   "Check Basic XML parsing, XML document traversing"),
  665:     (test_01d,   "Check Basic XML parsing, node nth access"),
  666:     (test_01f,   "Check Basic XML parsing, white space node content"),
  667:     (test_03,    "Check complex xml error detection"),
  668:     (test_04,    "Check complex xml parsing"),
  669:     (test_05,    "Check DTD basic parsing"),
  670:     (test_22,    "Check Axl node attributes"),
  671:     (test_33,    "Check Recursive root node replace"),
  672:     (py_test_01, "Check PyNode type attributes"),
  673: ]
  674: 
  675: info (" LibAxl: Another XML library (regression test).")
  676: info (" Copyright (C) 2008 Advanced Software Production Line, S.L.")
  677: info (" Axl regression tests: version=" + axl.VERSION)
  678: info (" To gather information about time performance you can use:")
  679: info ("")
  680: info ("     >> time ./test_01.py")
  681: info ("")
  682: info (" To gather information about memory consumed (and leaks) use:")
  683: info ("")
  684: info ("     >> valgrind --leak-check=yes --show-reachable=yes --suppressions=suppressions.valgrind --gen-suppressions=yes ./test_01.py ")
  685: info ("")
  686: info (" Report bugs to:")
  687: info ("")
  688: info ("     <axl@lists.aspl.es> Axl mailing list")
  689: info ("")
  690: 
  691: if __name__ == '__main__':
  692:     iterator = 0
  693:     for arg in sys.argv:
  694:         # according to the argument position, take the value 
  695:         if iterator == 1:
  696:             host = arg
  697:         elif iterator == 2:
  698:             port = arg
  699:             
  700:         # next iterator
  701:         iterator += 1
  702: 
  703:     # call to run all tests
  704:     run_all_tests ()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>