forked from Mirrors/privacore-open-source-search-engine
58 lines
1.5 KiB
C++
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);
|
|
}
|
|
}
|
|
|