1/*
2 *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include <string>
12#include "webrtc/libjingle/xmllite/qname.h"
13#include "webrtc/base/gunit.h"
14
15using buzz::StaticQName;
16using buzz::QName;
17
18TEST(QNameTest, TestTrivial) {
19  QName name("test");
20  EXPECT_EQ(name.LocalPart(), "test");
21  EXPECT_EQ(name.Namespace(), "");
22}
23
24TEST(QNameTest, TestSplit) {
25  QName name("a:test");
26  EXPECT_EQ(name.LocalPart(), "test");
27  EXPECT_EQ(name.Namespace(), "a");
28  QName name2("a-very:long:namespace:test-this");
29  EXPECT_EQ(name2.LocalPart(), "test-this");
30  EXPECT_EQ(name2.Namespace(), "a-very:long:namespace");
31}
32
33TEST(QNameTest, TestMerge) {
34  QName name("a", "test");
35  EXPECT_EQ(name.LocalPart(), "test");
36  EXPECT_EQ(name.Namespace(), "a");
37  EXPECT_EQ(name.Merged(), "a:test");
38  QName name2("a-very:long:namespace", "test-this");
39  EXPECT_EQ(name2.LocalPart(), "test-this");
40  EXPECT_EQ(name2.Namespace(), "a-very:long:namespace");
41  EXPECT_EQ(name2.Merged(), "a-very:long:namespace:test-this");
42}
43
44TEST(QNameTest, TestAssignment) {
45  QName name("a", "test");
46  // copy constructor
47  QName namecopy(name);
48  EXPECT_EQ(namecopy.LocalPart(), "test");
49  EXPECT_EQ(namecopy.Namespace(), "a");
50  QName nameassigned("");
51  nameassigned = name;
52  EXPECT_EQ(nameassigned.LocalPart(), "test");
53  EXPECT_EQ(nameassigned.Namespace(), "a");
54}
55
56TEST(QNameTest, TestConstAssignment) {
57  StaticQName name = { "a", "test" };
58  QName namecopy(name);
59  EXPECT_EQ(namecopy.LocalPart(), "test");
60  EXPECT_EQ(namecopy.Namespace(), "a");
61  QName nameassigned("");
62  nameassigned = name;
63  EXPECT_EQ(nameassigned.LocalPart(), "test");
64  EXPECT_EQ(nameassigned.Namespace(), "a");
65}
66
67TEST(QNameTest, TestEquality) {
68  QName name("a-very:long:namespace:test-this");
69  QName name2("a-very:long:namespace", "test-this");
70  QName name3("a-very:long:namespaxe", "test-this");
71  EXPECT_TRUE(name == name2);
72  EXPECT_FALSE(name == name3);
73}
74
75TEST(QNameTest, TestCompare) {
76  QName name("a");
77  QName name2("nsa", "a");
78  QName name3("nsa", "b");
79  QName name4("nsb", "b");
80
81  EXPECT_TRUE(name < name2);
82  EXPECT_FALSE(name2 < name);
83
84  EXPECT_FALSE(name2 < name2);
85
86  EXPECT_TRUE(name2 < name3);
87  EXPECT_FALSE(name3 < name2);
88
89  EXPECT_TRUE(name3 < name4);
90  EXPECT_FALSE(name4 < name3);
91}
92
93TEST(QNameTest, TestStaticQName) {
94  const StaticQName const_name1 = { "namespace", "local-name1" };
95  const StaticQName const_name2 = { "namespace", "local-name2" };
96  const QName name("namespace", "local-name1");
97  const QName name1 = const_name1;
98  const QName name2 = const_name2;
99
100  EXPECT_TRUE(name == const_name1);
101  EXPECT_TRUE(const_name1 == name);
102  EXPECT_FALSE(name != const_name1);
103  EXPECT_FALSE(const_name1 != name);
104
105  EXPECT_TRUE(name == name1);
106  EXPECT_TRUE(name1 == name);
107  EXPECT_FALSE(name != name1);
108  EXPECT_FALSE(name1 != name);
109
110  EXPECT_FALSE(name == name2);
111  EXPECT_FALSE(name2 == name);
112  EXPECT_TRUE(name != name2);
113  EXPECT_TRUE(name2 != name);
114}
115