OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "xfa/fde/xml/fde_xml_imp.h" | 5 #include "xfa/fde/xml/fde_xml_imp.h" |
6 | 6 |
7 #include "xfa/fgas/crt/fgas_stream.h" | 7 #include "xfa/fgas/crt/fgas_stream.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 TEST(CFDE_XMLSyntaxParser, CData) { | 10 TEST(CFDE_XMLSyntaxParser, CData) { |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 parser.GetAttributeValue(data); | 513 parser.GetAttributeValue(data); |
514 EXPECT_EQ(L"application/x-javascript", data); | 514 EXPECT_EQ(L"application/x-javascript", data); |
515 | 515 |
516 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse()); | 516 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse()); |
517 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse()); | 517 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse()); |
518 parser.GetTextData(data); | 518 parser.GetTextData(data); |
519 EXPECT_EQ(L"\n ", data); | 519 EXPECT_EQ(L"\n ", data); |
520 | 520 |
521 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse()); | 521 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse()); |
522 } | 522 } |
| 523 |
| 524 TEST(CFDE_XMLSyntaxParser, Entities) { |
| 525 const FX_WCHAR* input = |
| 526 L"<script contentType=\"application/x-javascript\">" |
| 527 L"B" |
| 528 L"T" |
| 529 L"H" |
| 530 L"ꭈ" |
| 531 L"�" |
| 532 L"</script>"; |
| 533 |
| 534 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR. |
| 535 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR); |
| 536 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream( |
| 537 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0)); |
| 538 CFDE_XMLSyntaxParser parser; |
| 539 parser.Init(stream.get(), 256); |
| 540 |
| 541 CFX_WideString data; |
| 542 |
| 543 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse()); |
| 544 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse()); |
| 545 parser.GetTagName(data); |
| 546 EXPECT_EQ(L"script", data); |
| 547 |
| 548 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse()); |
| 549 parser.GetAttributeName(data); |
| 550 EXPECT_EQ(L"contentType", data); |
| 551 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse()); |
| 552 parser.GetAttributeValue(data); |
| 553 EXPECT_EQ(L"application/x-javascript", data); |
| 554 |
| 555 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse()); |
| 556 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse()); |
| 557 parser.GetTextData(data); |
| 558 EXPECT_EQ(L"BTH\xab48", data); |
| 559 |
| 560 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse()); |
| 561 parser.GetTagName(data); |
| 562 EXPECT_EQ(L"script", data); |
| 563 |
| 564 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse()); |
| 565 } |
| 566 |
| 567 TEST(CFDE_XMLSyntaxParser, EntityOverflowHex) { |
| 568 const FX_WCHAR* input = |
| 569 L"<script contentType=\"application/x-javascript\">" |
| 570 L"�" |
| 571 L"</script>"; |
| 572 |
| 573 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR. |
| 574 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR); |
| 575 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream( |
| 576 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0)); |
| 577 CFDE_XMLSyntaxParser parser; |
| 578 parser.Init(stream.get(), 256); |
| 579 |
| 580 CFX_WideString data; |
| 581 |
| 582 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse()); |
| 583 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse()); |
| 584 parser.GetTagName(data); |
| 585 EXPECT_EQ(L"script", data); |
| 586 |
| 587 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse()); |
| 588 parser.GetAttributeName(data); |
| 589 EXPECT_EQ(L"contentType", data); |
| 590 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse()); |
| 591 parser.GetAttributeValue(data); |
| 592 EXPECT_EQ(L"application/x-javascript", data); |
| 593 |
| 594 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse()); |
| 595 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse()); |
| 596 parser.GetTextData(data); |
| 597 EXPECT_EQ(L" ", data); |
| 598 |
| 599 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse()); |
| 600 parser.GetTagName(data); |
| 601 EXPECT_EQ(L"script", data); |
| 602 |
| 603 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse()); |
| 604 } |
| 605 |
| 606 TEST(CFDE_XMLSyntaxParser, EntityOverflowDecimal) { |
| 607 const FX_WCHAR* input = |
| 608 L"<script contentType=\"application/x-javascript\">" |
| 609 L"�" |
| 610 L"</script>"; |
| 611 |
| 612 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR. |
| 613 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR); |
| 614 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream( |
| 615 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0)); |
| 616 CFDE_XMLSyntaxParser parser; |
| 617 parser.Init(stream.get(), 256); |
| 618 |
| 619 CFX_WideString data; |
| 620 |
| 621 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse()); |
| 622 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse()); |
| 623 parser.GetTagName(data); |
| 624 EXPECT_EQ(L"script", data); |
| 625 |
| 626 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse()); |
| 627 parser.GetAttributeName(data); |
| 628 EXPECT_EQ(L"contentType", data); |
| 629 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse()); |
| 630 parser.GetAttributeValue(data); |
| 631 EXPECT_EQ(L"application/x-javascript", data); |
| 632 |
| 633 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse()); |
| 634 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse()); |
| 635 parser.GetTextData(data); |
| 636 |
| 637 // The Windows wchar_t is unsigned so this doesn't end up overflowing to |
| 638 // zero and has a different output value. |
| 639 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
| 640 EXPECT_EQ(L"\xfffd", data); |
| 641 #else |
| 642 EXPECT_EQ(L" ", data); |
| 643 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
| 644 |
| 645 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse()); |
| 646 parser.GetTagName(data); |
| 647 EXPECT_EQ(L"script", data); |
| 648 |
| 649 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse()); |
| 650 } |
OLD | NEW |