Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(894)

Unified Diff: xfa/fde/xml/fde_xml_imp_unittest.cpp

Issue 1842633004: Fix CData parsing in CFDE_XMLSyntaxParser. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: xfa/fde/xml/fde_xml_imp_unittest.cpp
diff --git a/xfa/fde/xml/fde_xml_imp_unittest.cpp b/xfa/fde/xml/fde_xml_imp_unittest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..75dc4dd4bf7476bd45ea818d1196bb43d2c7b3a4
--- /dev/null
+++ b/xfa/fde/xml/fde_xml_imp_unittest.cpp
@@ -0,0 +1,64 @@
+// Copyright 2016 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 "xfa/fde/xml/fde_xml_imp.h"
+
+#include "xfa/fgas/crt/fgas_stream.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+TEST(CFDE_XMLSyntaxParser, CData) {
+ const FX_WCHAR* input =
+ L"<script contentType=\"application/x-javascript\">\n"
+ " <![CDATA[\n"
Tom Sepez 2016/03/30 16:55:30 I'd like to see some variations on this as in <!>
dsinclair 2016/03/30 17:32:13 Added a bunch of tests. Any more? (And a bunch of
+ " if (a[1] < 3)\n"
+ " app.alert(\"Tclams\");\n"
Tom Sepez 2016/03/30 16:55:30 Since were'e in cdata, we should test having an em
dsinclair 2016/03/30 17:32:13 Done.
+ " ]]>\n"
+ "</script>";
+
+ const FX_WCHAR* cdata =
+ L"\n"
+ " if (a[1] < 3)\n"
+ " app.alert(\"Tclams\");\n"
+ " ";
+
+ // We *2 because we pass in the uint8_t, not the FX_WCHAR.
+ size_t len = FXSYS_wcslen(input) * 2;
Tom Sepez 2016/03/30 16:55:30 Needs to be sizeof(FX_WCHAR) (2 vs. 4 depending on
dsinclair 2016/03/30 17:32:13 Done.
+ std::unique_ptr<IFX_Stream> stream = std::unique_ptr<IFX_Stream>(
Tom Sepez 2016/03/30 16:55:30 Just std::unique_ptr<IFX_Stream> stream(FX_Stream:
dsinclair 2016/03/30 17:32:13 Done.
+ IFX_Stream::CreateStream((uint8_t*)input, len, 0));
+ CFDE_XMLSyntaxParser parser;
+ parser.Init(stream.get(), 256);
Tom Sepez 2016/03/30 16:55:30 why 256?
dsinclair 2016/03/30 17:32:13 No particular reason. Has to be > 0, and at 256 it
+
+ CFX_WideString data;
+
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_ElementOpen, parser.DoSyntaxParse());
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_TagName, parser.DoSyntaxParse());
+ parser.GetTagName(data);
+ EXPECT_EQ(L"script", data);
+
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_AttriName, parser.DoSyntaxParse());
+ parser.GetAttributeName(data);
+ EXPECT_EQ(L"contentType", data);
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_AttriValue, parser.DoSyntaxParse());
+ parser.GetAttributeValue(data);
+ EXPECT_EQ(L"application/x-javascript", data);
+
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_ElementBreak, parser.DoSyntaxParse());
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_Text, parser.DoSyntaxParse());
+ parser.GetTextData(data);
+ EXPECT_EQ(L"\n ", data);
+
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_CData, parser.DoSyntaxParse());
+ parser.GetTextData(data);
+ EXPECT_EQ(cdata, data);
+
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_Text, parser.DoSyntaxParse());
+ parser.GetTextData(data);
+ EXPECT_EQ(L"\n", data);
+
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_ElementClose, parser.DoSyntaxParse());
+ parser.GetTagName(data);
+ EXPECT_EQ(L"script", data);
+
+ EXPECT_EQ(FDE_XMLSYNTAXSTATUS_EOS, parser.DoSyntaxParse());
+}

Powered by Google App Engine
This is Rietveld 408576698