summaryrefslogtreecommitdiff
path: root/core/fxcrt/xml/cfx_saxreader_unittest.cpp
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2017-04-17 09:07:48 -0700
committerChromium commit bot <commit-bot@chromium.org>2017-04-17 16:24:38 +0000
commit16b9d77ceb55e102260bc44cf1c8f519d11d6769 (patch)
tree41f8a63fa49f093a35f071bb38eda417d60ce94e /core/fxcrt/xml/cfx_saxreader_unittest.cpp
parentba91bed89a9fecfae3e175abcd4e333057e3f9c8 (diff)
downloadpdfium-16b9d77ceb55e102260bc44cf1c8f519d11d6769.tar.xz
Add unit test for CFX_SAXReader.
Make the pending re-write CL smaller, and back-fill some test. Virtualize the handler interface so that it can be mocked. Change-Id: Icbbc6b6789ba135b73c6fd1bbb90f5aae6ab7649 Reviewed-on: https://pdfium-review.googlesource.com/4250 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fxcrt/xml/cfx_saxreader_unittest.cpp')
-rw-r--r--core/fxcrt/xml/cfx_saxreader_unittest.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/core/fxcrt/xml/cfx_saxreader_unittest.cpp b/core/fxcrt/xml/cfx_saxreader_unittest.cpp
new file mode 100644
index 0000000000..f79b82c3cc
--- /dev/null
+++ b/core/fxcrt/xml/cfx_saxreader_unittest.cpp
@@ -0,0 +1,132 @@
+// Copyright 2017 The PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/fxcrt/xml/cfx_saxreader.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/test_support.h"
+
+using testing::_;
+using testing::Eq;
+using testing::Return;
+
+namespace {
+
+class MockHandler : public CFX_SAXReader::HandlerIface {
+ public:
+ MOCK_METHOD3(OnTagEnter,
+ CFX_SAXContext*(const CFX_ByteStringC& bsTagName,
+ CFX_SAXItem::Type eType,
+ uint32_t dwStartPos));
+ MOCK_METHOD3(OnTagAttribute,
+ void(CFX_SAXContext* pTag,
+ const CFX_ByteStringC& bsAttri,
+ const CFX_ByteStringC& bsValue));
+ MOCK_METHOD1(OnTagBreak, void(CFX_SAXContext* pTag));
+ MOCK_METHOD4(OnTagData,
+ void(CFX_SAXContext* pTag,
+ CFX_SAXItem::Type eType,
+ const CFX_ByteStringC& bsData,
+ uint32_t dwStartPos));
+ MOCK_METHOD2(OnTagClose, void(CFX_SAXContext* pTag, uint32_t dwEndPos));
+ MOCK_METHOD3(OnTagEnd,
+ void(CFX_SAXContext* pTag,
+ const CFX_ByteStringC& bsTagName,
+ uint32_t dwEndPos));
+ MOCK_METHOD4(OnTargetData,
+ void(CFX_SAXContext* pTag,
+ CFX_SAXItem::Type eType,
+ const CFX_ByteStringC& bsData,
+ uint32_t dwStartPos));
+};
+
+} // namespace
+
+class CFX_SAXReaderTest : public pdfium::FPDF_Test {
+ public:
+ void SetHandler(CFX_SAXReader::HandlerIface* handler) {
+ reader_.SetHandler(handler);
+ }
+
+ bool StartParse(char* str) {
+ return reader_.StartParse(IFX_MemoryStream::Create(
+ reinterpret_cast<uint8_t*>(str), strlen(str)),
+ 0, static_cast<uint32_t>(-1),
+ CFX_SaxParseMode_NotSkipSpace) >= 0;
+ }
+
+ int32_t ContinueParse() {
+ int32_t ret;
+ do {
+ ret = reader_.ContinueParse(nullptr);
+ } while (ret >= 0 && ret < 100);
+ return ret;
+ }
+
+ private:
+ CFX_SAXReader reader_;
+};
+
+TEST_F(CFX_SAXReaderTest, Null) {
+ char data[] = "";
+ ASSERT_FALSE(StartParse(data));
+}
+
+TEST_F(CFX_SAXReaderTest, SimpleText) {
+ MockHandler mock;
+ SetHandler(&mock);
+
+ char data[] = "clams";
+ ASSERT_TRUE(StartParse(data));
+ EXPECT_EQ(100, ContinueParse());
+}
+
+TEST_F(CFX_SAXReaderTest, SimpleTag) {
+ MockHandler mock;
+ EXPECT_CALL(mock, OnTagEnter(Eq("clams"), _, _));
+ EXPECT_CALL(mock, OnTagBreak(_));
+ SetHandler(&mock);
+
+ char data[] = "<clams>";
+ ASSERT_TRUE(StartParse(data));
+ EXPECT_EQ(100, ContinueParse());
+}
+
+TEST_F(CFX_SAXReaderTest, AttributeTag) {
+ MockHandler mock;
+ EXPECT_CALL(mock, OnTagEnter(Eq("clams"), _, _));
+ EXPECT_CALL(mock, OnTagAttribute(_, Eq("size"), Eq("small")));
+ EXPECT_CALL(mock, OnTagAttribute(_, Eq("color"), Eq("red")));
+ EXPECT_CALL(mock, OnTagBreak(_));
+ SetHandler(&mock);
+
+ char data[] = "<clams size='small' color='red'>";
+ ASSERT_TRUE(StartParse(data));
+ EXPECT_EQ(100, ContinueParse());
+}
+
+TEST_F(CFX_SAXReaderTest, AttributeEntityTag) {
+ MockHandler mock;
+ EXPECT_CALL(mock, OnTagEnter(Eq("clams"), _, _));
+ EXPECT_CALL(mock, OnTagAttribute(_, Eq("predicate"), Eq("1 < 2")));
+ EXPECT_CALL(mock, OnTagBreak(_));
+ SetHandler(&mock);
+
+ char data[] = "<clams predicate='1 &lt; 2'>";
+ ASSERT_TRUE(StartParse(data));
+ EXPECT_EQ(100, ContinueParse());
+}
+
+TEST_F(CFX_SAXReaderTest, TextWithinTag) {
+ MockHandler mock;
+ EXPECT_CALL(mock, OnTagEnter(Eq("b"), _, _));
+ EXPECT_CALL(mock, OnTagBreak(_));
+ EXPECT_CALL(mock, OnTagData(_, _, Eq("biff"), _));
+ EXPECT_CALL(mock, OnTagEnd(_, Eq("b"), _));
+ SetHandler(&mock);
+
+ char data[] = "<b>biff</b>";
+ ASSERT_TRUE(StartParse(data));
+ EXPECT_EQ(100, ContinueParse());
+}