Files
privacore-open-source-searc…/test/unit/XmlXPathTest.cpp
2016-09-01 13:43:07 +02:00

58 lines
1.5 KiB
C++

#include "gtest/gtest.h"
#include "XmlXPath.h"
#include "Xml.h"
#include "HttpMime.h" // CT_HTML
#include <cstdio>
#define MAX_BUF_SIZE 1024
#define HTML_HEAD_FORMAT "<html><head>%s</head><body></body></html>"
TEST ( XmlXPathTest, Xpath ) {
char* input_strs[] = {
"<meta property='og:site_name' content='my site' />\n"
"<title>my title content</title>",
"<meta property='og:site_name' content='my site' />\n"
"<meta property='og:title' content='my meta title content' />"
};
const char* input_xpaths[] = {
"title/text()",
"meta[@property='og:title']/@content"
};
char* expected_outputs[] = {
"my title content",
"my meta title content"
};
size_t len = sizeof( input_strs ) / sizeof( input_strs[0] );
ASSERT_EQ(sizeof(input_strs)/sizeof(input_strs[0]), sizeof(input_xpaths)/sizeof(input_xpaths[0]));
ASSERT_EQ(sizeof(input_strs)/sizeof(input_strs[0]), sizeof(expected_outputs)/sizeof(expected_outputs[0]));
for ( size_t i = 0; i < len; i++ ) {
char *input_str = input_strs[i];
const char *input_xpath = input_xpaths[i];
char *output_str = expected_outputs[i];
char input[MAX_BUF_SIZE];
std::sprintf(input, HTML_HEAD_FORMAT, input_str);
Xml xml;
ASSERT_TRUE(xml.set(input, strlen(input), 0, 0, CT_HTML));
char buf[MAX_BUF_SIZE] = {};
int32_t bufLen = MAX_BUF_SIZE;
int32_t contentLen = 0;
XmlXPath xmlXPath(input_xpath);
ASSERT_TRUE(xmlXPath.getContent(&xml, buf, 180, &contentLen));
EXPECT_EQ(strlen(output_str), contentLen);
EXPECT_STREQ(output_str, buf);
}
}