15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2004, Google Inc. 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met: 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer. 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer in the documentation 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * and/or other materials provided with the distribution. 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * derived from this software without specific prior written permission. 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */ 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <sstream> 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <iostream> 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/common.h" 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/gunit.h" 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/qname.h" 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/xmlparser.h" 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgusing buzz::QName; 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgusing buzz::XmlParser; 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgusing buzz::XmlParseContext; 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgusing buzz::XmlParseHandler; 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass XmlParserTestHandler : public XmlParseHandler { 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void StartElement(XmlParseContext * pctx, 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const char * name, const char ** atts) { 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ss_ << "START (" << pctx->ResolveQName(name, false).Merged(); 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org while (*atts) { 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ss_ << ", " << pctx->ResolveQName(*atts, true).Merged() 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org << "='" << *(atts+1) << "'"; 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org atts += 2; 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ss_ << ") "; 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void EndElement(XmlParseContext * pctx, const char * name) { 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org UNUSED(pctx); 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org UNUSED(name); 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ss_ << "END "; 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void CharacterData(XmlParseContext * pctx, 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const char * text, int len) { 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org UNUSED(pctx); 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ss_ << "TEXT (" << std::string(text, len) << ") "; 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void Error(XmlParseContext * pctx, XML_Error code) { 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org UNUSED(pctx); 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ss_ << "ERROR (" << static_cast<int>(code) << ") "; 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual ~XmlParserTestHandler() { 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string Str() { 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return ss_.str(); 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string StrClear() { 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string result = ss_.str(); 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ss_.str(""); 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return result; 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private: 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::stringstream ss_; 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestTrivial) { 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<testing/>"); 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (testing) END ", handler.Str()); 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestAttributes) { 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<testing a='b'/>"); 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (testing, a='b') END ", handler.Str()); 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<testing e='' long='some text'/>"); 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (testing, e='', long='some text') END ", handler.Str()); 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestNesting) { 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<top><first/><second><third></third></second></top>"); 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (top) START (first) END START (second) START (third) " 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "END END END ", handler.Str()); 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<top><fifth><deeper><and><deeper/></and>" 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<sibling><leaf/></sibling></deeper></fifth><first/><second>" 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<third></third></second></top>"); 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (top) START (fifth) START (deeper) START (and) START " 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "(deeper) END END START (sibling) START (leaf) END END END " 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "END START (first) END START (second) START (third) END END END ", 1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handler.Str()); 1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestXmlDecl) { 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<?xml version=\"1.0\"?><testing/>"); 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (testing) END ", handler.Str()); 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<?xml version=\"1.0\" encoding=\"utf-8\"?><testing/>"); 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (testing) END ", handler.Str()); 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" 1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<testing/>"); 1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (testing) END ", handler.Str()); 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestNamespace) { 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<top xmlns='my-namespace' a='b'/>"); 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (my-namespace:top, xmlns='my-namespace', a='b') END ", 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handler.Str()); 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<foo:top xmlns:foo='my-namespace' " 1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "a='b' foo:c='d'/>"); 1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (my-namespace:top, " 1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "http://www.w3.org/2000/xmlns/:foo='my-namespace', " 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "a='b', my-namespace:c='d') END ", handler.Str()); 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<top><nested xmlns='my-namespace'><leaf/>" 1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</nested><sibling/></top>"); 1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (top) START (my-namespace:nested, xmlns='my-namespace') " 1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "START (my-namespace:leaf) END END START (sibling) END END ", 1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handler.Str()); 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestIncremental) { 1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser parser(&handler); 1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string fragment; 1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "<stream:stream"; 1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("", handler.StrClear()); 1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = " id=\"abcdefg\" xmlns=\""; 1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("", handler.StrClear()); 1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "j:c\" xmlns:stream='hm"; 1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("", handler.StrClear()); 1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "ph'><test"; 1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (hmph:stream, id='abcdefg', xmlns='j:c', " 1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "http://www.w3.org/2000/xmlns/:stream='hmph') ", handler.StrClear()); 1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "ing/><again/>abracad"; 1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (j:c:testing) END START (j:c:again) END TEXT (abracad) ", 1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handler.StrClear()); 1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "abra</stream:"; 1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("TEXT (abra) ", handler.StrClear()); 2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "stream>"; 2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("END ", handler.StrClear()); 2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestReset) { 2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser parser(&handler); 2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string fragment; 2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "<top><first/><second><third></third>"; 2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (top) START (first) END START (second) START (third) END ", 2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handler.StrClear()); 2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Reset(); 2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "<tip><first/><second><third></third>"; 2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (tip) START (first) END START (second) START (third) END ", 2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handler.StrClear()); 2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser parser(&handler); 2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string fragment; 2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "<top xmlns='m'>"; 2295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 2305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (m:top, xmlns='m') ", handler.StrClear()); 2315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "<testing/><frag"; 2335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (m:testing) END ", handler.StrClear()); 2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Reset(); 2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = "<testing><fragment/"; 2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (testing) ", handler.StrClear()); 2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fragment = ">"; 2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org parser.Parse(fragment.c_str(), fragment.length(), false); 2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (fragment) END ", handler.StrClear()); 2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(XmlParserTest, TestError) { 2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "junk"); 2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("ERROR (2) ", handler.Str()); 2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<top/> garbage "); 2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (top) END ERROR (9) ", handler.Str()); 2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<-hm->"); 2615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("ERROR (4) ", handler.Str()); 2625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, "<hello>&foobar;</hello>"); 2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("START (hello) ERROR (11) ", handler.Str()); 2675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<!DOCTYPE HTML PUBLIC \"foobar\" \"barfoo\">"); 2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("ERROR (3) ", handler.Str()); 2735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // XmlParser requires utf-8 2765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 2785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><test/>"); 2795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("ERROR (19) ", handler.Str()); 2805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // XmlParser requires version 1.0 2835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 2855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<?xml version=\"2.0\"?><test/>"); 2865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("ERROR (2) ", handler.Str()); 2875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // XmlParser requires standalone documents 2905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 2925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<?xml version=\"1.0\" standalone=\"no\"?><test/>"); 2935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("ERROR (2) ", handler.Str()); 2945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 2965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // XmlParser doesn't like empty namespace URIs 2975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParserTestHandler handler; 2985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&handler, 2995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<test xmlns:foo='' foo:bar='huh?'>"); 3005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("ERROR (2) ", handler.Str()); 3015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 303