19 OUString
convert(xmlChar
const *
string) {
21 CPPUNIT_ASSERT_MESSAGE(
22 "xmlChar string is not UTF-8",
23 rtl_convertStringToUString(
24 &s.pData, reinterpret_cast<char const *>(
string), xmlStrlen(
string),
25 RTL_TEXTENCODING_UTF8,
26 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
27 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
28 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
32 OString oconvert(xmlChar
const *
string)
34 return reinterpret_cast<char const *
>(string);
54 std::unique_ptr<sal_uInt8[]> pBuffer(
new sal_uInt8[nSize + 1]);
57 auto pCharBuffer =
reinterpret_cast<xmlChar*
>(pBuffer.get());
58 SAL_INFO(
"test",
"XmlTestTools::parseXmlStream: pBuffer is '" << pCharBuffer <<
"'");
65 rDumper.
dump(rGDIMetaFile, aStream);
72 xmlXPathContextPtr pXmlXpathCtx = xmlXPathNewContext(pXmlDoc.get());
74 xmlXPathObjectPtr pXmlXpathObj = xmlXPathEvalExpression(BAD_CAST(rXPath.getStr()), pXmlXpathCtx);
75 xmlXPathFreeContext(pXmlXpathCtx);
85 CPPUNIT_ASSERT(pXmlDoc);
86 xmlXPathObjectPtr pXmlObj =
getXPathNode(pXmlDoc, rXPath);
87 xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
88 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' number of nodes is incorrect").getStr(),
89 1, xmlXPathNodeSetGetLength(pXmlNodes));
90 if (rAttribute.isEmpty())
92 xmlXPathFreeObject(pXmlObj);
95 xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0];
96 xmlChar * prop = xmlGetProp(pXmlNode, BAD_CAST(rAttribute.getStr()));
97 OString sAttAbsent = OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath
98 +
"' no attribute '" + rAttribute +
"' exist";
99 CPPUNIT_ASSERT_MESSAGE(sAttAbsent.getStr(), prop);
102 xmlXPathFreeObject(pXmlObj);
108 xmlXPathObjectPtr pXmlObj =
getXPathNode(pXmlDoc, rXPath);
109 switch (pXmlObj->type)
111 case XPATH_UNDEFINED:
112 CPPUNIT_FAIL(
"Undefined XPath type");
115 xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
117 CPPUNIT_ASSERT_MESSAGE(
118 OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' not found")
120 xmlXPathNodeSetGetLength(pXmlNodes) > 0);
122 xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0];
123 xmlNodePtr pXmlChild = pXmlNode->children;
125 while (pXmlChild && pXmlChild->type != XML_TEXT_NODE)
126 pXmlChild = pXmlChild->next;
127 if (pXmlChild && pXmlChild->type == XML_TEXT_NODE)
128 s =
convert(pXmlChild->content);
129 xmlXPathFreeObject(pXmlObj);
134 auto boolVal = pXmlObj->boolval;
135 xmlXPathFreeObject(pXmlObj);
136 return boolVal ? OUString(
"true") : OUString(
"false");
140 auto floatVal = pXmlObj->floatval;
141 xmlXPathFreeObject(pXmlObj);
142 return OUString::number(floatVal);
146 auto convertedVal =
convert(pXmlObj->stringval);
147 xmlXPathFreeObject(pXmlObj);
152 case XPATH_LOCATIONSET:
154 case XPATH_XSLT_TREE:
155 xmlXPathFreeObject(pXmlObj);
156 CPPUNIT_FAIL(
"Unsupported XPath type");
159 CPPUNIT_FAIL(
"Invalid XPath type");
169 OUString aValue =
getXPath(pXmlDoc, rXPath, rAttribute);
170 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, attribute '" + rAttribute +
"' of '" + rXPath +
"' incorrect value.").getStr(),
171 rExpectedValue, aValue);
175 const std::vector<std::pair<OString, OUString>>& aPairVector)
177 for (
auto& rPair : aPairVector)
179 assertXPath(pXmlDoc, rXPath, rPair.first, rPair.second);
185 xmlXPathObjectPtr pXmlObj =
getXPathNode(pXmlDoc, rXPath);
186 xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
187 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' number of nodes is incorrect").getStr(),
188 nNumberOfNodes, xmlXPathNodeSetGetLength(pXmlNodes));
189 xmlXPathFreeObject(pXmlObj);
194 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath contents of child does not match").getStr(), rContent,
getXPathContent(pXmlDoc, rXPath));
198 std::u16string_view rNSPrefix, std::u16string_view rNSHref)
200 xmlXPathObjectPtr pXmlObj =
getXPathNode(pXmlDoc, rXPath);
201 xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
202 CPPUNIT_ASSERT_MESSAGE(
203 OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' not found").getStr(),
204 xmlXPathNodeSetGetLength(pXmlNodes) > 0);
206 xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0];
208 for (xmlNsPtr pNamespace = pXmlNode->nsDef; pNamespace; pNamespace = pNamespace->next)
210 if (!pNamespace->prefix)
213 CPPUNIT_ASSERT(pNamespace->href);
214 if (rNSPrefix ==
convert(pNamespace->prefix) && rNSHref ==
convert(pNamespace->href))
220 xmlXPathFreeObject(pXmlObj);
221 CPPUNIT_ASSERT(bFound);
226 #if LIBXML_VERSION >= 20703
227 xmlXPathObjectPtr pXmlObj =
getXPathNode(pXmlDoc, rXPath);
228 xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
229 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' number of nodes is incorrect").getStr(),
230 1, xmlXPathNodeSetGetLength(pXmlNodes));
231 xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0];
232 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' number of child-nodes is incorrect").getStr(),
233 nNumberOfChildNodes,
static_cast<int>(xmlChildElementCount(pXmlNode)));
234 xmlXPathFreeObject(pXmlObj);
238 (
void)nNumberOfChildNodes;
244 xmlXPathObjectPtr pXmlObj =
getXPathNode(pXmlDoc, rXPath);
245 xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
246 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' number of nodes is incorrect").getStr(),
247 1, xmlXPathNodeSetGetLength(pXmlNodes));
248 xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0];
249 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' unexpected '" + rAttribute +
"' attribute").getStr(),
250 static_cast<xmlChar*
>(
nullptr), xmlGetProp(pXmlNode, BAD_CAST(rAttribute.getStr())));
251 xmlXPathFreeObject(pXmlObj);
256 xmlXPathObjectPtr pXmlObj =
getXPathNode(pXmlDoc, rXPath);
257 xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
258 CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath +
"' number of nodes is incorrect").getStr(),
260 xmlXPathNodeSetGetLength(pXmlNodes));
261 xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0];
264 for (xmlNodePtr pChild = pXmlNode->children; pChild; pChild = pChild->next)
266 if (oconvert(pChild->name) == rChildName)
273 xmlXPathFreeObject(pXmlObj);
274 CPPUNIT_ASSERT_MESSAGE(OString(OStringLiteral(
"In <") + pXmlDoc->name +
">, XPath '" + rXPath
275 +
"' child '" + rChildName +
"' not found")
std::unique_ptr< xmlDoc, xmlDocDeleter > xmlDocUniquePtr
sal_uInt64 Seek(sal_uInt64 nPos)
sal_uInt64 remainingSize()
OUString const & GetURL() const
#define STREAM_SEEK_TO_BEGIN
std::size_t ReadBytes(void *pData, std::size_t nSize)
#define SAL_INFO(area, stream)