| Index: chrome/test/chromedriver/capabilities_unittest.cc
|
| diff --git a/chrome/test/chromedriver/capabilities_unittest.cc b/chrome/test/chromedriver/capabilities_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f6ac5ec052bb945d823327b6083af3aa350a55e9
|
| --- /dev/null
|
| +++ b/chrome/test/chromedriver/capabilities_unittest.cc
|
| @@ -0,0 +1,254 @@
|
| +// Copyright (c) 2013 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/test/chromedriver/capabilities.h"
|
| +
|
| +#include "base/values.h"
|
| +#include "chrome/test/chromedriver/chrome/status.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +TEST(ParseCapabilities, WithAndroidPackage) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue caps;
|
| + caps.SetString("chromeOptions.android_package", "abc");
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_TRUE(capabilities.IsAndroid());
|
| + ASSERT_EQ("abc", capabilities.android_package);
|
| +}
|
| +
|
| +TEST(ParseCapabilities, EmptyAndroidPackage) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue caps;
|
| + caps.SetString("chromeOptions.android_package", "");
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_FALSE(status.IsOk());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, IllegalAndroidPackage) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue caps;
|
| + caps.SetInteger("chromeOptions.android_package", 123);
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_FALSE(status.IsOk());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, LogPath) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue caps;
|
| + caps.SetString("chromeOptions.logPath", "path/to/logfile");
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_STREQ("path/to/logfile", capabilities.log_path.c_str());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, NoArgs) {
|
| + Capabilities capabilities;
|
| + base::ListValue args;
|
| + ASSERT_TRUE(args.empty());
|
| + base::DictionaryValue caps;
|
| + caps.Set("chromeOptions.args", args.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_TRUE(capabilities.command.GetSwitches().empty());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, SingleArgWithoutValue) {
|
| + Capabilities capabilities;
|
| + base::ListValue args;
|
| + args.AppendString("enable-nacl");
|
| + ASSERT_EQ(1u, args.GetSize());
|
| + base::DictionaryValue caps;
|
| + caps.Set("chromeOptions.args", args.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
|
| + ASSERT_TRUE(capabilities.command.HasSwitch("enable-nacl"));
|
| +}
|
| +
|
| +TEST(ParseCapabilities, SingleArgWithValue) {
|
| + Capabilities capabilities;
|
| + base::ListValue args;
|
| + args.AppendString("load-extension=/test/extension");
|
| + ASSERT_EQ(1u, args.GetSize());
|
| + base::DictionaryValue caps;
|
| + caps.Set("chromeOptions.args", args.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
|
| + ASSERT_TRUE(capabilities.command.HasSwitch("load-extension"));
|
| + ASSERT_STREQ(
|
| + "/test/extension",
|
| + capabilities.command.GetSwitchValueASCII("load-extension").c_str());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, MultipleArgs) {
|
| + Capabilities capabilities;
|
| + base::ListValue args;
|
| + args.AppendString("arg1");
|
| + args.AppendString("arg2=val");
|
| + args.AppendString("arg3='a space'");
|
| + ASSERT_EQ(3u, args.GetSize());
|
| + base::DictionaryValue caps;
|
| + caps.Set("chromeOptions.args", args.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(3u, capabilities.command.GetSwitches().size());
|
| + ASSERT_TRUE(capabilities.command.HasSwitch("arg1"));
|
| + ASSERT_TRUE(capabilities.command.HasSwitch("arg2"));
|
| + ASSERT_STREQ("val", capabilities.command.GetSwitchValueASCII("arg2").c_str());
|
| + ASSERT_TRUE(capabilities.command.HasSwitch("arg3"));
|
| + ASSERT_STREQ("'a space'",
|
| + capabilities.command.GetSwitchValueASCII("arg3").c_str());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, Prefs) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue prefs;
|
| + prefs.SetString("key1", "value1");
|
| + prefs.SetString("key2.k", "value2");
|
| + base::DictionaryValue caps;
|
| + caps.Set("chromeOptions.prefs", prefs.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_TRUE(capabilities.prefs->Equals(&prefs));
|
| +}
|
| +
|
| +TEST(ParseCapabilities, LocalState) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue local_state;
|
| + local_state.SetString("s1", "v1");
|
| + local_state.SetString("s2.s", "v2");
|
| + base::DictionaryValue caps;
|
| + caps.Set("chromeOptions.localState", local_state.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_TRUE(capabilities.local_state->Equals(&local_state));
|
| +}
|
| +
|
| +TEST(ParseCapabilities, Extensions) {
|
| + Capabilities capabilities;
|
| + base::ListValue extensions;
|
| + extensions.AppendString("ext1");
|
| + extensions.AppendString("ext2");
|
| + base::DictionaryValue caps;
|
| + caps.Set("chromeOptions.extensions", extensions.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(2u, capabilities.extensions.size());
|
| + ASSERT_EQ("ext1", capabilities.extensions[0]);
|
| + ASSERT_EQ("ext2", capabilities.extensions[1]);
|
| +}
|
| +
|
| +TEST(ParseCapabilities, UnrecognizedProxyType) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "unknown proxy type");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_FALSE(status.IsOk());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, IllegalProxyType) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetInteger("proxyType", 123);
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_FALSE(status.IsOk());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, DirectProxy) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "DIRECT");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
|
| + ASSERT_TRUE(capabilities.command.HasSwitch("no-proxy-server"));
|
| +}
|
| +
|
| +TEST(ParseCapabilities, SystemProxy) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "system");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_TRUE(capabilities.command.GetSwitches().empty());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, PacProxy) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "PAC");
|
| + proxy.SetString("proxyAutoconfigUrl", "test.wpad");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
|
| + ASSERT_STREQ(
|
| + "test.wpad",
|
| + capabilities.command.GetSwitchValueASCII("proxy-pac-url").c_str());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, MissingProxyAutoconfigUrl) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "PAC");
|
| + proxy.SetString("httpProxy", "http://localhost:8001");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_FALSE(status.IsOk());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, AutodetectProxy) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "autodetect");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
|
| + ASSERT_TRUE(capabilities.command.HasSwitch("proxy-auto-detect"));
|
| +}
|
| +
|
| +TEST(ParseCapabilities, ManualProxy) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "manual");
|
| + proxy.SetString("ftpProxy", "localhost:9001");
|
| + proxy.SetString("httpProxy", "localhost:8001");
|
| + proxy.SetString("sslProxy", "localhost:10001");
|
| + proxy.SetString("noProxy", "google.com, youtube.com");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_TRUE(status.IsOk());
|
| + ASSERT_EQ(2u, capabilities.command.GetSwitches().size());
|
| + ASSERT_STREQ(
|
| + "ftp=localhost:9001;http=localhost:8001;https=localhost:10001",
|
| + capabilities.command.GetSwitchValueASCII("proxy-server").c_str());
|
| + ASSERT_STREQ(
|
| + "google.com, youtube.com",
|
| + capabilities.command.GetSwitchValueASCII("proxy-bypass-list").c_str());
|
| +}
|
| +
|
| +TEST(ParseCapabilities, MissingSettingForManualProxy) {
|
| + Capabilities capabilities;
|
| + base::DictionaryValue proxy;
|
| + proxy.SetString("proxyType", "manual");
|
| + base::DictionaryValue caps;
|
| + caps.Set("proxy", proxy.DeepCopy());
|
| + Status status = capabilities.Parse(caps);
|
| + ASSERT_FALSE(status.IsOk());
|
| +}
|
|
|