1 // Copyright 2008, Google Inc. All rights reserved.
2 //
3 // Redistribution and use in source and binary forms, with or without
4 // modification, are permitted provided that the following conditions are met:
5 //
6 // 1. Redistributions of source code must retain the above copyright notice,
7 // this list of conditions and the following disclaimer.
8 // 2. Redistributions in binary form must reproduce the above copyright notice,
9 // this list of conditions and the following disclaimer in the documentation
10 // and/or other materials provided with the distribution.
11 // 3. Neither the name of Google Inc. nor the names of its contributors may be
12 // used to endorse or promote products derived from this software without
13 // specific prior written permission.
14 //
15 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
16 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
18 // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26 // This file contains the unit test for the NetworkLink element.
27
28 #include "kml/dom/networklink.h"
29 #include "kml/dom/kml_funcs.h"
30 #include "kml/dom/kml_cast.h"
31 #include "kml/dom/kml_factory.h"
32 #include "gtest/gtest.h"
33
34 namespace kmldom {
35
36 class NetworkLinkTest : public testing::Test {
37 protected:
SetUp()38 virtual void SetUp() {
39 networklink_ = KmlFactory::GetFactory()->CreateNetworkLink();
40 }
41
42 NetworkLinkPtr networklink_;
43 };
44
TEST_F(NetworkLinkTest,TestType)45 TEST_F(NetworkLinkTest, TestType) {
46 ASSERT_EQ(Type_NetworkLink, networklink_->Type());
47 ASSERT_TRUE(networklink_->IsA(Type_NetworkLink));
48 ASSERT_TRUE(networklink_->IsA(Type_Feature));
49 ASSERT_TRUE(networklink_->IsA(Type_Object));
50 }
51
52 // Verify proper defaults:
TEST_F(NetworkLinkTest,TestDefaults)53 TEST_F(NetworkLinkTest, TestDefaults) {
54 ASSERT_FALSE(networklink_->has_refreshvisibility());
55 ASSERT_FALSE(networklink_->get_refreshvisibility());
56 ASSERT_FALSE(networklink_->has_flytoview());
57 ASSERT_FALSE(networklink_->get_flytoview());
58 ASSERT_FALSE(networklink_->has_link());
59 ASSERT_TRUE(NULL == networklink_->get_link());
60 }
61
62 // Verify setting default makes has_xxx() true:
TEST_F(NetworkLinkTest,TestSetToDefaultValues)63 TEST_F(NetworkLinkTest, TestSetToDefaultValues) {
64 networklink_->set_refreshvisibility(networklink_->get_refreshvisibility());
65 ASSERT_TRUE(networklink_->has_refreshvisibility());
66 networklink_->set_flytoview(networklink_->get_flytoview());
67 ASSERT_TRUE(networklink_->has_flytoview());
68 networklink_->set_link(NULL);
69 ASSERT_FALSE(networklink_->has_link()); // ptr still null
70 }
71
72 // Verify set, get, has, clear:
TEST_F(NetworkLinkTest,TestSetGetHasClear)73 TEST_F(NetworkLinkTest, TestSetGetHasClear) {
74 // Non-default values:
75 bool refreshvisibility = true;
76 bool flytoview = true;
77 LinkPtr link = KmlFactory::GetFactory()->CreateLink();
78
79 // Set all fields:
80 networklink_->set_refreshvisibility(refreshvisibility);
81 networklink_->set_flytoview(flytoview);
82 networklink_->set_link(link);
83
84 // Verify getter and has_xxx():
85 ASSERT_TRUE(networklink_->has_refreshvisibility());
86 ASSERT_EQ(refreshvisibility, networklink_->get_refreshvisibility());
87 ASSERT_TRUE(networklink_->has_flytoview());
88 ASSERT_EQ(flytoview, networklink_->get_flytoview());
89 ASSERT_TRUE(networklink_->has_link());
90 ASSERT_TRUE(link == networklink_->get_link());
91
92 // Clear all fields:
93 networklink_->clear_refreshvisibility();
94 networklink_->clear_flytoview();
95 networklink_->clear_link();
96 }
97
98 // NetworkLink accepts Url as Link.
TEST_F(NetworkLinkTest,TestParseUrl)99 TEST_F(NetworkLinkTest, TestParseUrl) {
100 const string kHref("foo.kml");
101 const string kNetworkLinkUrl("<NetworkLink><Url><href>");
102 const string kUrlNetworkLink("</href></Url></NetworkLink>");
103 string errors;
104 ElementPtr root = Parse(kNetworkLinkUrl + kHref + kUrlNetworkLink, &errors);
105 ASSERT_TRUE(errors.empty());
106 const NetworkLinkPtr networklink = AsNetworkLink(root);
107 ASSERT_TRUE(networklink);
108 // Verify that the Url was set as the Link.
109 ASSERT_TRUE(networklink->has_link());
110 ASSERT_EQ(Type_Url, networklink->get_link()->Type());
111 ASSERT_TRUE(networklink->get_link()->has_href());
112 ASSERT_EQ(kHref, networklink->get_link()->get_href());
113 }
114
TEST_F(NetworkLinkTest,TestSerialize)115 TEST_F(NetworkLinkTest, TestSerialize) {
116 const string expect_empty("<NetworkLink/>");
117 ASSERT_EQ(expect_empty, SerializeRaw(networklink_));
118 KmlFactory* factory = KmlFactory::GetFactory();
119 networklink_->set_link(factory->CreateLink());
120 const string expect_link("<NetworkLink><Link/></NetworkLink>");
121 ASSERT_EQ(expect_link, SerializeRaw(networklink_));
122 networklink_->set_refreshvisibility(false);
123 networklink_->set_flytoview(false);
124 const string expect_all_false(
125 "<NetworkLink>"
126 "<refreshVisibility>0</refreshVisibility>"
127 "<flyToView>0</flyToView>"
128 "<Link/>"
129 "</NetworkLink>");
130 ASSERT_EQ(expect_all_false, SerializeRaw(networklink_));
131 networklink_->set_refreshvisibility(true);
132 networklink_->set_flytoview(true);
133 const string expect_all_true(
134 "<NetworkLink>"
135 "<refreshVisibility>1</refreshVisibility>"
136 "<flyToView>1</flyToView>"
137 "<Link/>"
138 "</NetworkLink>");
139 ASSERT_EQ(expect_all_true, SerializeRaw(networklink_));
140 networklink_->set_name("networklink");
141 const string expect_feature(
142 "<NetworkLink>"
143 "<name>networklink</name>"
144 "<refreshVisibility>1</refreshVisibility>"
145 "<flyToView>1</flyToView>"
146 "<Link/>"
147 "</NetworkLink>");
148 }
149
TEST_F(NetworkLinkTest,TestSerializeWithId)150 TEST_F(NetworkLinkTest, TestSerializeWithId) {
151 const string kId("networklink-id");
152 networklink_->set_id(kId);
153 ASSERT_EQ(string("<NetworkLink id=\"" + kId + "\"/>"),
154 SerializeRaw(networklink_));
155 networklink_->clear_id();
156 networklink_->set_targetid(kId);
157 ASSERT_EQ(string("<NetworkLink targetId=\"" + kId + "\"/>"),
158 SerializeRaw(networklink_));
159 }
160
161 } // end namespace kmldom
162