1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/chromedriver/capabilities.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 8c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/test/chromedriver/chrome/log.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/chromedriver/chrome/status.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/test/chromedriver/logging.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Empty) { 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(0u, cmd.GetSwitches().size()); 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", switches.ToString()); 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, NoValue) { 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello"); 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(switches.HasSwitch("hello")); 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", switches.GetSwitchValue("hello")); 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("hello")); 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(FILE_PATH_LITERAL(""), cmd.GetSwitchValueNative("hello")); 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello", switches.ToString()); 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Value) { 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello", "there"); 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(switches.HasSwitch("hello")); 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("there", switches.GetSwitchValue("hello")); 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("hello")); 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(FILE_PATH_LITERAL("there"), cmd.GetSwitchValueNative("hello")); 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello=there", switches.ToString()); 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, FromOther) { 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("a", "1"); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("b", "1"); 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches2; 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches2.SetSwitch("b", "2"); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches2.SetSwitch("c", "2"); 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetFromSwitches(switches2); 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--a=1 --b=2 --c=2", switches.ToString()); 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Remove) { 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("a", "1"); 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.RemoveSwitch("a"); 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_FALSE(switches.HasSwitch("a")); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Quoting) { 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello", "a b"); 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello2", " '\" "); 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello=\"a b\" --hello2=\" '\\\" \"", switches.ToString()); 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Multiple) { 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("switch"); 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello", "there"); 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("switch")); 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("hello")); 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(FILE_PATH_LITERAL("there"), cmd.GetSwitchValueNative("hello")); 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello=there --switch", switches.ToString()); 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Unparsed) { 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("a"); 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("--b"); 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("--c=1"); 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("d=1"); 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("-e=--1=1"); 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("---e=--1=1 --a --b --c=1 --d=1", switches.ToString()); 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, WithAndroidPackage) { 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("chromeOptions.androidPackage", "abc"); 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(capabilities.IsAndroid()); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("abc", capabilities.android_package); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, EmptyAndroidPackage) { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("chromeOptions.androidPackage", std::string()); 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, IllegalAndroidPackage) { 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetInteger("chromeOptions.androidPackage", 123); 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LogPath) { 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("chromeOptions.logPath", "path/to/logfile"); 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_STREQ("path/to/logfile", capabilities.log_path.c_str()); 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(ParseCapabilities, Args) { 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue args; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) args.AppendString("arg1"); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) args.AppendString("arg2=val"); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.args", args.DeepCopy()); 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(2u, capabilities.switches.GetSize()); 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("arg1")); 14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("arg2")); 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", capabilities.switches.GetSwitchValue("arg1")); 15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("val", capabilities.switches.GetSwitchValue("arg2")); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, Prefs) { 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue prefs; 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.SetString("key1", "value1"); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.SetString("key2.k", "value2"); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.prefs", prefs.DeepCopy()); 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(capabilities.prefs->Equals(&prefs)); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LocalState) { 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue local_state; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) local_state.SetString("s1", "v1"); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) local_state.SetString("s2.s", "v2"); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.localState", local_state.DeepCopy()); 17358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(capabilities.local_state->Equals(&local_state)); 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, Extensions) { 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue extensions; 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions.AppendString("ext1"); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions.AppendString("ext2"); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.extensions", extensions.DeepCopy()); 18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(2u, capabilities.extensions.size()); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("ext1", capabilities.extensions[0]); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("ext2", capabilities.extensions[1]); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, UnrecognizedProxyType) { 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "unknown proxy type"); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, IllegalProxyType) { 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetInteger("proxyType", 123); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, DirectProxy) { 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "DIRECT"); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("no-proxy-server")); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, SystemProxy) { 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "system"); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 23258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(0u, capabilities.switches.GetSize()); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, PacProxy) { 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "PAC"); 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyAutoconfigUrl", "test.wpad"); 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 24258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 24558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("test.wpad", capabilities.switches.GetSwitchValue("proxy-pac-url")); 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, MissingProxyAutoconfigUrl) { 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "PAC"); 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("httpProxy", "http://localhost:8001"); 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, AutodetectProxy) { 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "autodetect"); 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 26558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("proxy-auto-detect")); 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, ManualProxy) { 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "manual"); 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("ftpProxy", "localhost:9001"); 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("httpProxy", "localhost:8001"); 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("sslProxy", "localhost:10001"); 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("noProxy", "google.com, youtube.com"); 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 28158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(2u, capabilities.switches.GetSize()); 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ( 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ftp=localhost:9001;http=localhost:8001;https=localhost:10001", 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) capabilities.switches.GetSwitchValue("proxy-server")); 28758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ( 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "google.com, youtube.com", 28958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) capabilities.switches.GetSwitchValue("proxy-bypass-list")); 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, MissingSettingForManualProxy) { 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "manual"); 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, IgnoreNullValueForManualProxy) { 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "manual"); 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("ftpProxy", "localhost:9001"); 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.Set("sslProxy", base::Value::CreateNullValue()); 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.Set("noProxy", base::Value::CreateNullValue()); 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 31158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 31358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 31458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("proxy-server")); 31558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ( 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ftp=localhost:9001", 31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) capabilities.switches.GetSwitchValue("proxy-server")); 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LoggingPrefsOk) { 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue logging_prefs; 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) logging_prefs.SetString("Network", "INFO"); 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("loggingPrefs", logging_prefs.DeepCopy()); 32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 32858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.logging_prefs.size()); 32958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(Log::kInfo, capabilities.logging_prefs["Network"]); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LoggingPrefsNotDict) { 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("loggingPrefs", "INFO"); 33658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 3393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(ParseCapabilities, PerfLoggingPrefsInspectorDomainStatus) { 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Capabilities capabilities; 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Perf log must be enabled if performance log preferences are specified. 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue logging_prefs; 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) logging_prefs.SetString(WebDriverLog::kPerformanceType, "INFO"); 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue desired_caps; 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("loggingPrefs", logging_prefs.DeepCopy()); 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kDefaultEnabled, 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capabilities.perf_logging_prefs.network); 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kDefaultEnabled, 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capabilities.perf_logging_prefs.page); 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kDefaultEnabled, 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capabilities.perf_logging_prefs.timeline); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue perf_logging_prefs; 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.SetBoolean("enableNetwork", true); 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.SetBoolean("enablePage", false); 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("chromeOptions.perfLoggingPrefs", 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.DeepCopy()); 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Status status = capabilities.Parse(desired_caps); 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyEnabled, 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capabilities.perf_logging_prefs.network); 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyDisabled, 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capabilities.perf_logging_prefs.page); 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kDefaultEnabled, 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capabilities.perf_logging_prefs.timeline); 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 36803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(ParseCapabilities, PerfLoggingPrefsTracing) { 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Capabilities capabilities; 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Perf log must be enabled if performance log preferences are specified. 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue logging_prefs; 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) logging_prefs.SetString(WebDriverLog::kPerformanceType, "INFO"); 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue desired_caps; 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("loggingPrefs", logging_prefs.DeepCopy()); 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ("", capabilities.perf_logging_prefs.trace_categories); 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue perf_logging_prefs; 37703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) perf_logging_prefs.SetString("traceCategories", "benchmark,blink.console"); 37803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) perf_logging_prefs.SetInteger("bufferUsageReportingInterval", 1234); 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("chromeOptions.perfLoggingPrefs", 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.DeepCopy()); 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Status status = capabilities.Parse(desired_caps); 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 38303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_EQ("benchmark,blink.console", 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capabilities.perf_logging_prefs.trace_categories); 38503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_EQ(1234, 38603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) capabilities.perf_logging_prefs.buffer_usage_reporting_interval); 38703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 38803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 38903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(ParseCapabilities, PerfLoggingPrefsInvalidInterval) { 39003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) Capabilities capabilities; 39103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Perf log must be enabled if performance log preferences are specified. 39203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::DictionaryValue logging_prefs; 39303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) logging_prefs.SetString(WebDriverLog::kPerformanceType, "INFO"); 39403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::DictionaryValue desired_caps; 39503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) desired_caps.Set("loggingPrefs", logging_prefs.DeepCopy()); 39603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::DictionaryValue perf_logging_prefs; 39703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // A bufferUsageReportingInterval interval <= 0 will cause DevTools errors. 39803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) perf_logging_prefs.SetInteger("bufferUsageReportingInterval", 0); 39903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) desired_caps.Set("chromeOptions.perfLoggingPrefs", 40003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) perf_logging_prefs.DeepCopy()); 40103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) Status status = capabilities.Parse(desired_caps); 40203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_FALSE(status.IsOk()); 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(ParseCapabilities, PerfLoggingPrefsNotDict) { 4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Capabilities capabilities; 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Perf log must be enabled if performance log preferences are specified. 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue logging_prefs; 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) logging_prefs.SetString(WebDriverLog::kPerformanceType, "INFO"); 4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue desired_caps; 4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("loggingPrefs", logging_prefs.DeepCopy()); 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.SetString("chromeOptions.perfLoggingPrefs", "traceCategories"); 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Status status = capabilities.Parse(desired_caps); 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(ParseCapabilities, PerfLoggingPrefsNoPerfLogLevel) { 4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Capabilities capabilities; 4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue desired_caps; 4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue perf_logging_prefs; 4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.SetBoolean("enableNetwork", true); 4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("chromeOptions.perfLoggingPrefs", 4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.DeepCopy()); 4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Should fail because perf log must be enabled if perf log prefs specified. 4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Status status = capabilities.Parse(desired_caps); 4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(ParseCapabilities, PerfLoggingPrefsPerfLogOff) { 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Capabilities capabilities; 4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue logging_prefs; 4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Disable performance log by setting logging level to OFF. 4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) logging_prefs.SetString(WebDriverLog::kPerformanceType, "OFF"); 4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue desired_caps; 4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("loggingPrefs", logging_prefs.DeepCopy()); 4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::DictionaryValue perf_logging_prefs; 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.SetBoolean("enableNetwork", true); 4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) desired_caps.Set("chromeOptions.perfLoggingPrefs", 4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) perf_logging_prefs.DeepCopy()); 4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Should fail because perf log must be enabled if perf log prefs specified. 4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Status status = capabilities.Parse(desired_caps); 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(ParseCapabilities, ExcludeSwitches) { 4463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Capabilities capabilities; 4473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::ListValue exclude_switches; 4483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) exclude_switches.AppendString("switch1"); 4493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) exclude_switches.AppendString("switch2"); 4503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::DictionaryValue caps; 4513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) caps.Set("chromeOptions.excludeSwitches", exclude_switches.DeepCopy()); 45258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 4533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(status.IsOk()); 4543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_EQ(2u, capabilities.exclude_switches.size()); 4553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::set<std::string>& switches = capabilities.exclude_switches; 4563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(switches.find("switch1") != switches.end()); 4573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(switches.find("switch2") != switches.end()); 4583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 459424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 460cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, UseRemoteBrowser) { 461424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Capabilities capabilities; 462424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::DictionaryValue caps; 46358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) caps.SetString("chromeOptions.debuggerAddress", "abc:123"); 46458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 465424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(status.IsOk()); 466cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(capabilities.IsRemoteBrowser()); 46758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("abc", capabilities.debugger_address.host()); 46858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(123, capabilities.debugger_address.port()); 469424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 470cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 471cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, MobileEmulationUserAgent) { 472cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Capabilities capabilities; 473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue mobile_emulation; 474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetString("userAgent", "Agent Smith"); 475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue caps; 476cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps.Set("chromeOptions.mobileEmulation", mobile_emulation.DeepCopy()); 477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Status status = capabilities.Parse(caps); 478cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(status.IsOk()); 479cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 480cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 481cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("user-agent")); 482cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ("Agent Smith", capabilities.switches.GetSwitchValue("user-agent")); 483cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 484cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 485cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, MobileEmulationDeviceMetrics) { 486cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Capabilities capabilities; 487cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue mobile_emulation; 488cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetInteger("deviceMetrics.width", 360); 489cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetInteger("deviceMetrics.height", 640); 490cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetDouble("deviceMetrics.pixelRatio", 3.0); 491cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue caps; 492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps.Set("chromeOptions.mobileEmulation", mobile_emulation.DeepCopy()); 493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Status status = capabilities.Parse(caps); 494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(status.IsOk()); 495cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(360, capabilities.device_metrics->width); 497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(640, capabilities.device_metrics->height); 498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(3.0, capabilities.device_metrics->device_scale_factor); 499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 501cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, MobileEmulationDeviceName) { 502cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Capabilities capabilities; 503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue mobile_emulation; 504cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetString("deviceName", "Google Nexus 5"); 505cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue caps; 506cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps.Set("chromeOptions.mobileEmulation", mobile_emulation.DeepCopy()); 507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Status status = capabilities.Parse(caps); 508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(status.IsOk()); 509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("user-agent")); 512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ( 513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) " 514cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 " 515cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Mobile Safari/535.19", 516cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) capabilities.switches.GetSwitchValue("user-agent")); 517cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(360, capabilities.device_metrics->width); 519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(640, capabilities.device_metrics->height); 520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(3.0, capabilities.device_metrics->device_scale_factor); 521cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, MobileEmulationNotDict) { 524cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Capabilities capabilities; 525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue caps; 526cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps.SetString("chromeOptions.mobileEmulation", "Google Nexus 5"); 527cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Status status = capabilities.Parse(caps); 528cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_FALSE(status.IsOk()); 529cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 531cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, MobileEmulationDeviceMetricsNotDict) { 532cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Capabilities capabilities; 533cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue mobile_emulation; 534cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetInteger("deviceMetrics", 360); 535cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue caps; 536cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps.Set("chromeOptions.mobileEmulation", mobile_emulation.DeepCopy()); 537cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Status status = capabilities.Parse(caps); 538cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_FALSE(status.IsOk()); 539cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, MobileEmulationDeviceMetricsNotNumbers) { 542cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Capabilities capabilities; 543cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue mobile_emulation; 544cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetString("deviceMetrics.width", "360"); 545cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetString("deviceMetrics.height", "640"); 546cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetString("deviceMetrics.pixelRatio", "3.0"); 547cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue caps; 548cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps.Set("chromeOptions.mobileEmulation", mobile_emulation.DeepCopy()); 549cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Status status = capabilities.Parse(caps); 550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_FALSE(status.IsOk()); 551cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 553cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(ParseCapabilities, MobileEmulationBadDict) { 554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Capabilities capabilities; 555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue mobile_emulation; 556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetString("deviceName", "Google Nexus 5"); 557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetInteger("deviceMetrics.width", 360); 558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetInteger("deviceMetrics.height", 640); 559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mobile_emulation.SetDouble("deviceMetrics.pixelRatio", 3.0); 560cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue caps; 561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps.Set("chromeOptions.mobileEmulation", mobile_emulation.DeepCopy()); 562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Status status = capabilities.Parse(caps); 563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_FALSE(status.IsOk()); 564cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 565