File: txml.cc

package info (click to toggle)
dcmtk 3.6.9-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 95,648 kB
  • sloc: ansic: 426,874; cpp: 318,177; makefile: 6,401; sh: 4,341; yacc: 1,026; xml: 482; lex: 321; perl: 277
file content (90 lines) | stat: -rw-r--r-- 4,095 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 *
 *  Copyright (C) 2011-2020, OFFIS e.V.
 *  All rights reserved.  See COPYRIGHT file for details.
 *
 *  This software and supporting documentation were developed by
 *
 *    OFFIS e.V.
 *    R&D Division Health
 *    Escherweg 2
 *    D-26121 Oldenburg, Germany
 *
 *
 *  Module:  ofstd
 *
 *  Author:  Joerg Riesmeier
 *
 *  Purpose: test program for xmlParser
 *
 */

#include "dcmtk/config/osconfig.h"    /* make sure OS specific configuration is included first */

#define OFTEST_OFSTD_ONLY
#include "dcmtk/ofstd/oftest.h"
#include "dcmtk/ofstd/ofxml.h"

#define XML_TEST_DATA "<?xml version=\"1.0\"?>"                         \
    "<root>"                                                            \
      "<element attribute=\"value\">some text</element>"                \
      "<element attribute=\"other value\">some other text</element>"    \
      "<error>error message</error>"                                    \
      "<element>some totally different text</element>"                  \
      "<parent>"                                                        \
        "<child>no text</child>"                                        \
        "<child />"                                                     \
      "</parent>"                                                       \
    "</root>"

// we cannot run this test if the XML parser is configured for wide characters
// because the OFTest classes and macros do not support wide strings.
#ifndef _XMLWIDECHAR

OFTEST(ofstd_xmlParser)
{
    int i = 0;

    /* perform some very simple tests on the XML data */
    XMLNode rootNode = XMLNode::parseString(XML_TEST_DATA, "root");

    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNode("element").getAttribute("attribute"))), "value");
    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNode("element").getText())), "some text");
    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNode("element", 1).getText())), "some other text");
    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNode("element", 2).getText())), "some totally different text");
    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNode("element", -1).getText())), "some totally different text");

    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNodeWithAttribute("element", "attribute").getText())), "some text");
    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNodeWithAttribute("element", "attribute", "other value").getText())), "some other text");
    rootNode.getChildNodeWithAttribute("element", "attribute", NULL, &i);
    OFCHECK_EQUAL(i, 1);
    rootNode.getChildNodeWithAttribute("element", "attribute", "other value", &i);
    OFCHECK_EQUAL(i, 2);

    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNodeByPath("element").getText())), "some text");
    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNodeByPath("parent/child").getText())), "no text");

    OFCHECK_EQUAL(rootNode.nChildNode(), 5);
    OFCHECK_EQUAL(rootNode.nChildNode("element"), 3);
    OFCHECK_EQUAL(rootNode.nChildNode("parent"), 1);
    OFCHECK_EQUAL(rootNode.nChildNode("child"), 0);
    OFCHECK_EQUAL(rootNode.getChildNode("parent").nChildNode(), 2);

    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNode("element").getAttributeName(0))), "attribute");
    OFCHECK_EQUAL(OFString(OFSTRING_GUARD(rootNode.getChildNode("element").getAttributeValue(0))), "value");
    OFCHECK_EQUAL(rootNode.getChildNode("element").nAttribute(), 1);
    OFCHECK_EQUAL(rootNode.getChildNode("element", 1).nAttribute(), 1);
    OFCHECK_EQUAL(rootNode.getChildNode("element", 2).nAttribute(), 0);
    OFCHECK_EQUAL(rootNode.getChildNode("error").nAttribute(), 0);
    OFCHECK_EQUAL(rootNode.getChildNode("parent").nAttribute(), 0);

    OFCHECK(!rootNode.getChildNode("parent").getChildNode("child", 1).isEmpty());
    OFCHECK(rootNode.getChildNode("parent").getChildNode("child" ,2).isEmpty());
    OFCHECK(rootNode.getChildNode("element").isAttributeSet("attribute"));
}

#else

int ofstd_txml_cc_dummy_to_keep_linker_from_moaning = 0;

#endif