148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org/* 248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * 448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * Use of this source code is governed by a BSD-style license 548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * in the file PATENTS. All contributing project authors may 848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org */ 1048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 1148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include <iostream> 1248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include <sstream> 1348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include <string> 1448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlbuilder.h" 1548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlelement.h" 1648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlparser.h" 1748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/base/common.h" 1848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/base/gunit.h" 1948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgusing buzz::XmlBuilder; 2148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgusing buzz::XmlElement; 2248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgusing buzz::XmlParser; 2348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestTrivial) { 2548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 2648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing/>"); 2748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing/>", builder.BuiltElement()->Str()); 2848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 2948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 3048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestAttributes1) { 3148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 3248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing a='b'/>"); 3348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing a=\"b\"/>", builder.BuiltElement()->Str()); 3448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 3548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 3648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestAttributes2) { 3748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 3848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing e='' long='some text'/>"); 3948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing e=\"\" long=\"some text\"/>", 4048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 4148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 4248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 4348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestNesting1) { 4448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 4548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, 4648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "<top><first/><second><third></third></second></top>"); 4748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<top><first/><second><third/></second></top>", 4848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 4948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 5048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 5148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestNesting2) { 5248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 5348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, 5448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "<top><fifth><deeper><and><deeper/></and><sibling><leaf/>" 5548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "</sibling></deeper></fifth><first/><second><third></third>" 5648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "</second></top>"); 5748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<top><fifth><deeper><and><deeper/></and><sibling><leaf/>" 5848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "</sibling></deeper></fifth><first/><second><third/>" 5948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "</second></top>", builder.BuiltElement()->Str()); 6048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 6148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 6248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestQuoting1) { 6348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 6448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing a='>'/>"); 6548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing a=\">\"/>", builder.BuiltElement()->Str()); 6648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 6748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 6848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestQuoting2) { 6948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 7048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing a='<>&"'/>"); 7148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing a=\"<>&"\"/>", 7248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 7348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 7448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 7548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestQuoting3) { 7648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 7748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing a='so "important"'/>"); 7848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing a=\"so "important"\"/>", 7948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 8048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 8148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 8248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestQuoting4) { 8348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 8448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing a='"important", yes'/>"); 8548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing a=\""important", yes\"/>", 8648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 8748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 8848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 8948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestQuoting5) { 9048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 9148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, 9248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "<testing a='<what is "important">'/>"); 9348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing a=\"<what is "important">\"/>", 9448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 9548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 9648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 9748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestText1) { 9848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 9948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing>></testing>"); 10048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing>></testing>", builder.BuiltElement()->Str()); 10148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 10248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 10348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestText2) { 10448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 10548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing><>&"</testing>"); 10648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing><>&\"</testing>", 10748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 10848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 10948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 11048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestText3) { 11148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 11248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing>so <important></testing>"); 11348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing>so <important></testing>", 11448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 11548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 11648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 11748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestText4) { 11848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 11948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing><important>, yes</testing>"); 12048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing><important>, yes</testing>", 12148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 12248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 12348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 12448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestText5) { 12548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 12648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, 12748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "<testing>importance &<important>&</testing>"); 12848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing>importance &<important>&</testing>", 12948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 13048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 13148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 13248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestNamespace1) { 13348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 13448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing xmlns='foo'/>"); 13548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing xmlns=\"foo\"/>", builder.BuiltElement()->Str()); 13648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 13748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 13848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestNamespace2) { 13948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 14048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing xmlns:a='foo' a:b='c'/>"); 14148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_EQ("<testing xmlns:a=\"foo\" a:b=\"c\"/>", 14248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org builder.BuiltElement()->Str()); 14348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 14448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 14548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestNamespace3) { 14648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 14748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing xmlns:a=''/>"); 14848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_TRUE(NULL == builder.BuiltElement()); 14948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 15048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 15148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestNamespace4) { 15248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 15348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing a:b='c'/>"); 15448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_TRUE(NULL == builder.BuiltElement()); 15548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 15648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 15748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestAttrCollision1) { 15848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 15948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, "<testing a='first' a='second'/>"); 16048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_TRUE(NULL == builder.BuiltElement()); 16148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 16248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 16348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestAttrCollision2) { 16448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 16548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, 16648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "<testing xmlns:a='foo' xmlns:b='foo' a:x='c' b:x='d'/>"); 16748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_TRUE(NULL == builder.BuiltElement()); 16848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 16948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 17048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgTEST(XmlBuilderTest, TestAttrCollision3) { 17148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlBuilder builder; 17248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlParser::ParseXml(&builder, 17348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "<testing xmlns:a='foo'><nested xmlns:b='foo' a:x='c' b:x='d'/>" 17448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org "</testing>"); 17548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org EXPECT_TRUE(NULL == builder.BuiltElement()); 17648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} 17748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 178