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

Unified 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 Derek 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 side-by-side diff with in-line comments
Download patch
Index: chrome/utility/media_router/dial_device_description_parser_impl_unittest.cc
diff --git a/chrome/utility/media_router/dial_device_description_parser_impl_unittest.cc b/chrome/utility/media_router/dial_device_description_parser_impl_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..fb1ef031c64d18d390dea279ae6e855fc37e5f00
--- /dev/null
+++ b/chrome/utility/media_router/dial_device_description_parser_impl_unittest.cc
@@ -0,0 +1,147 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#include "chrome/utility/media_router/dial_device_description_parser_impl.h"
+
+#include <string>
+
+#include "base/logging.h"
+#include "base/macros.h"
+#include "base/strings/string_util.h"
+#include "chrome/common/media_router/dial_device_description.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+constexpr char kDeviceDescriptionWithService[] =
+ "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">\n"
+ "<specVersion>\n"
+ "<major>1</major>\n"
+ "<minor>0</minor>\n"
+ "</specVersion>\n"
+ "<URLBase>http://172.31.71.84:8008</URLBase>\n"
+ "<device>\n"
+ "<deviceType>urn:dial-multiscreen-org:device:dial:1</deviceType>\n"
+ "<friendlyName>eureka9019</friendlyName>\n"
+ "<manufacturer>Google Inc.</manufacturer>\n"
+ "<modelName>Eureka Dongle</modelName>\n"
+ "<serialNumber>123456789000</serialNumber>\n"
+ "<UDN>uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0e</UDN>\n"
+ "<serviceList>\n"
+ "<service>\n"
+ "<serviceType>urn:dial-multiscreen-org:service:dial:1</serviceType>\n"
+ "<serviceId>urn:dial-multiscreen-org:serviceId:dial</serviceId>\n"
+ "<controlURL>/ssdp/notfound</controlURL>\n"
+ "<eventSubURL>/ssdp/notfound</eventSubURL>\n"
+ "<SCPDURL>/ssdp/notfound</SCPDURL>\n"
+ "<servicedata xmlns=\"uri://cloudview.google.com/...\">\n"
+ "</servicedata>\n"
+ "</service>\n"
+ "</serviceList>\n"
+ "</device>\n"
+ "</root>\n";
+
+constexpr char kDeviceDescriptionWithoutService[] =
+ "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">\n"
+ "<specVersion>\n"
+ "<major>1</major>\n"
+ "<minor>0</minor>\n"
+ "</specVersion>\n"
+ "<URLBase>http://172.31.71.84:8008</URLBase>\n"
+ "<device>\n"
+ "<deviceType>urn:dial-multiscreen-org:device:dial:1</deviceType>\n"
+ "<friendlyName>eureka9020</friendlyName>\n"
+ "<manufacturer>Google Inc.</manufacturer>\n"
+ "<modelName>Eureka Dongle</modelName>\n"
+ "<serialNumber>123456789000</serialNumber>\n"
+ "<UDN>uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0f</UDN>\n"
+ "</device>\n"
+ "</root>\n";
+
+std::string& Replace(std::string& input,
+ const std::string& from,
+ const std::string& to) {
+ size_t pos = input.find(from);
+ if (pos == std::string::npos)
+ return input;
+
+ return input.replace(pos, from.size(), to);
+}
+
+} // namespace
+
+namespace media_router {
+
+TEST(DialDeviceDescriptionParserImplTest, TestInvalidXml) {
+ DialDeviceDescriptionParserImpl parser;
+ DialDeviceDescription device_description;
+ EXPECT_FALSE(parser.Parse("", &device_description));
+}
+
+TEST(DialDeviceDescriptionParserImplTest, TestParse) {
+ std::string xml_text(kDeviceDescriptionWithService);
+
+ DialDeviceDescriptionParserImpl parser;
+ DialDeviceDescription device_description;
+ EXPECT_TRUE(parser.Parse(xml_text, &device_description));
+
+ EXPECT_EQ("urn:dial-multiscreen-org:device:dial:1",
+ device_description.device_type);
+ EXPECT_EQ("eureka9019", device_description.friendly_name);
+ EXPECT_EQ("Eureka Dongle", device_description.model_name);
+ EXPECT_EQ("uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0e",
+ device_description.unique_id);
+}
+
+TEST(DialDeviceDescriptionParserImplTest, TestParseWithSpecialCharacter) {
+ std::string old_name = "<friendlyName>eureka9019</friendlyName>";
+ std::string new_name = "<friendlyName>Samsung LED40\'s</friendlyName>";
+
+ std::string xml_text(kDeviceDescriptionWithService);
+ xml_text = Replace(xml_text, old_name, new_name);
+
+ DialDeviceDescriptionParserImpl parser;
+ DialDeviceDescription device_description;
+ EXPECT_TRUE(parser.Parse(xml_text, &device_description));
+
+ EXPECT_EQ("urn:dial-multiscreen-org:device:dial:1",
+ device_description.device_type);
+ EXPECT_EQ("Samsung LED40\'s", device_description.friendly_name);
+ EXPECT_EQ("Eureka Dongle", device_description.model_name);
+ EXPECT_EQ("uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0e",
+ device_description.unique_id);
+}
+
+TEST(DialDeviceDescriptionParserImplTest,
+ TestParseWithoutFriendlyNameModelName) {
+ std::string friendly_name = "<friendlyName>eureka9020</friendlyName>";
+ std::string model_name = "<modelName>Eureka Dongle</modelName>";
+
+ std::string xml_text(kDeviceDescriptionWithoutService);
+ xml_text = Replace(xml_text, friendly_name, "");
+ xml_text = Replace(xml_text, model_name, "");
+
+ DialDeviceDescriptionParserImpl parser;
+ DialDeviceDescription device_description;
+ EXPECT_FALSE(parser.Parse(xml_text, &device_description));
+}
+
+TEST(DialDeviceDescriptionParserImplTest, TestParseWithoutFriendlyName) {
+ std::string friendly_name = "<friendlyName>eureka9020</friendlyName>";
+
+ std::string xml_text(kDeviceDescriptionWithoutService);
+ xml_text = Replace(xml_text, friendly_name, "");
+
+ DialDeviceDescriptionParserImpl parser;
+ DialDeviceDescription device_description;
+ EXPECT_TRUE(parser.Parse(xml_text, &device_description));
+
+ EXPECT_EQ("urn:dial-multiscreen-org:device:dial:1",
+ device_description.device_type);
+ EXPECT_EQ("Eureka Dongle [4b0f]", device_description.friendly_name);
+ EXPECT_EQ("Eureka Dongle", device_description.model_name);
+ EXPECT_EQ("uuid:d90dda41-8fa0-61ac-0567-f949d3e34b0f",
+ device_description.unique_id);
+}
+
+} // namespace media_router

Powered by Google App Engine
This is Rietveld 408576698