Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: chrome/utility/media_router/dial_device_description_parser_impl_unittest.cc

Issue 2745653008: [Media Router] Parse device description xml in utility process (Closed)
Patch Set: resolve code review comments from jam Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 #include "chrome/utility/media_router/dial_device_description_parser_impl.h"
5
6 #include <string>
7
8 #include "base/logging.h"
9 #include "base/macros.h"
10 #include "base/strings/string_util.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace {
14
15 constexpr char kDeviceDescriptionWithService[] =
16 "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">\n"
17 "<specVersion>\n"
18 "<major>1</major>\n"
19 "<minor>0</minor>\n"
20 "</specVersion>\n"
21 "<URLBase>http://172.31.71.84:8008</URLBase>\n"
22 "<device>\n"
23 "<deviceType>urn:dial-multiscreen-org:device:dial:1</deviceType>\n"
24 "<friendlyName>eureka9019</friendlyName>\n"
25 "<manufacturer>Google Inc.</manufacturer>\n"
26 "<modelName>Eureka Dongle</modelName>\n"
27 "<serialNumber>123456789000</serialNumber>\n"
28 "<UDN>uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0e</UDN>\n"
29 "<serviceList>\n"
30 "<service>\n"
31 "<serviceType>urn:dial-multiscreen-org:service:dial:1</serviceType>\n"
32 "<serviceId>urn:dial-multiscreen-org:serviceId:dial</serviceId>\n"
33 "<controlURL>/ssdp/notfound</controlURL>\n"
34 "<eventSubURL>/ssdp/notfound</eventSubURL>\n"
35 "<SCPDURL>/ssdp/notfound</SCPDURL>\n"
36 "<servicedata xmlns=\"uri://cloudview.google.com/...\">\n"
37 "</servicedata>\n"
38 "</service>\n"
39 "</serviceList>\n"
40 "</device>\n"
41 "</root>\n";
42
43 constexpr char kDeviceDescriptionWithoutService[] =
44 "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">\n"
45 "<specVersion>\n"
46 "<major>1</major>\n"
47 "<minor>0</minor>\n"
48 "</specVersion>\n"
49 "<URLBase>http://172.31.71.84:8008</URLBase>\n"
50 "<device>\n"
51 "<deviceType>urn:dial-multiscreen-org:device:dial:1</deviceType>\n"
52 "<friendlyName>eureka9020</friendlyName>\n"
53 "<manufacturer>Google Inc.</manufacturer>\n"
54 "<modelName>Eureka Dongle</modelName>\n"
55 "<serialNumber>123456789000</serialNumber>\n"
56 "<UDN>uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0f</UDN>\n"
57 "</device>\n"
58 "</root>\n";
59
60 std::string& Replace(std::string& input,
61 const std::string& from,
62 const std::string& to) {
63 size_t pos = input.find(from);
64 if (pos == std::string::npos)
65 return input;
66
67 return input.replace(pos, from.size(), to);
68 }
69
70 } // namespace
71
72 namespace media_router {
73
74 class DialDeviceDescriptionParserImplTest : public testing::Test {
75 public:
76 DialDeviceDescriptionParserImplTest() {}
77 bool Parse(const std::string& xml,
78 chrome::mojom::DialDeviceDescriptionPtr& out) {
79 return parser_.Parse(xml, out);
80 }
81
82 private:
83 DialDeviceDescriptionParserImpl parser_;
84 DISALLOW_COPY_AND_ASSIGN(DialDeviceDescriptionParserImplTest);
85 };
86
87 TEST_F(DialDeviceDescriptionParserImplTest, TestInvalidXml) {
88 chrome::mojom::DialDeviceDescriptionPtr device_description =
89 chrome::mojom::DialDeviceDescription::New();
90 EXPECT_FALSE(Parse("", device_description));
91 }
92
93 TEST_F(DialDeviceDescriptionParserImplTest, TestParse) {
94 std::string xml_text(kDeviceDescriptionWithService);
95
96 chrome::mojom::DialDeviceDescriptionPtr device_description =
97 chrome::mojom::DialDeviceDescription::New();
98 EXPECT_TRUE(Parse(xml_text, device_description));
99
100 EXPECT_EQ("urn:dial-multiscreen-org:device:dial:1",
101 device_description->device_type);
102 EXPECT_EQ("eureka9019", device_description->friendly_name);
103 EXPECT_EQ("Eureka Dongle", device_description->model_name);
104 EXPECT_EQ("uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0e",
105 device_description->unique_id);
106 }
107
108 TEST_F(DialDeviceDescriptionParserImplTest, TestParseWithSpecialCharacter) {
109 std::string old_name = "<friendlyName>eureka9019</friendlyName>";
110 std::string new_name = "<friendlyName>Samsung LED40\'s</friendlyName>";
111
112 std::string xml_text(kDeviceDescriptionWithService);
113 xml_text = Replace(xml_text, old_name, new_name);
114
115 chrome::mojom::DialDeviceDescriptionPtr device_description =
116 chrome::mojom::DialDeviceDescription::New();
117 EXPECT_TRUE(Parse(xml_text, device_description));
118
119 EXPECT_EQ("urn:dial-multiscreen-org:device:dial:1",
120 device_description->device_type);
121 EXPECT_EQ("Samsung LED40\'s", device_description->friendly_name);
122 EXPECT_EQ("Eureka Dongle", device_description->model_name);
123 EXPECT_EQ("uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0e",
124 device_description->unique_id);
125 }
126
127 TEST_F(DialDeviceDescriptionParserImplTest,
128 TestParseWithoutFriendlyNameModelName) {
129 std::string friendly_name = "<friendlyName>eureka9020</friendlyName>";
130 std::string model_name = "<modelName>Eureka Dongle</modelName>";
131
132 std::string xml_text(kDeviceDescriptionWithoutService);
133 xml_text = Replace(xml_text, friendly_name, "");
134 xml_text = Replace(xml_text, model_name, "");
135
136 chrome::mojom::DialDeviceDescriptionPtr device_description =
137 chrome::mojom::DialDeviceDescription::New();
138 EXPECT_FALSE(Parse(xml_text, device_description));
139 }
140
141 TEST_F(DialDeviceDescriptionParserImplTest, TestParseWithoutFriendlyName) {
142 std::string friendly_name = "<friendlyName>eureka9020</friendlyName>";
143
144 std::string xml_text(kDeviceDescriptionWithoutService);
145 xml_text = Replace(xml_text, friendly_name, "");
146
147 chrome::mojom::DialDeviceDescriptionPtr device_description =
148 chrome::mojom::DialDeviceDescription::New();
149 EXPECT_TRUE(Parse(xml_text, device_description));
150
151 EXPECT_EQ("urn:dial-multiscreen-org:device:dial:1",
152 device_description->device_type);
153 EXPECT_EQ("Eureka Dongle [4b0f]", device_description->friendly_name);
154 EXPECT_EQ("Eureka Dongle", device_description->model_name);
155 EXPECT_EQ("uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0f",
156 device_description->unique_id);
157 }
158
159 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698