Index: chrome/test/webdriver/webdriver_capabilities_parser_unittest.cc |
diff --git a/chrome/test/webdriver/webdriver_capabilities_parser_unittest.cc b/chrome/test/webdriver/webdriver_capabilities_parser_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f3123c3a1bdd8c0ec115a2c2b546a243107a8dde |
--- /dev/null |
+++ b/chrome/test/webdriver/webdriver_capabilities_parser_unittest.cc |
@@ -0,0 +1,141 @@ |
+// Copyright (c) 2011 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 "base/base64.h" |
+#include "base/file_path.h" |
+#include "base/file_util.h" |
+#include "base/scoped_temp_dir.h" |
+#include "base/values.h" |
+#include "chrome/common/zip.h" |
+#include "chrome/test/webdriver/webdriver_capabilities_parser.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+using base::DictionaryValue; |
+using base::ListValue; |
+using base::Value; |
+ |
+namespace webdriver { |
+ |
+TEST(CapabilitiesParser, NoCaps) { |
+ Capabilities caps; |
+ DictionaryValue dict; |
+ CapabilitiesParser parser(&dict, FilePath(), &caps); |
+ ASSERT_FALSE(parser.Parse()); |
+} |
+ |
+TEST(CapabilitiesParser, SimpleCaps) { |
+ DictionaryValue dict; |
+ DictionaryValue* options = new DictionaryValue(); |
+ dict.Set("chromeOptions", options); |
+ |
+ options->SetString("binary", "binary"); |
+ options->SetString("channel", "channel"); |
+ options->SetBoolean("detach", true); |
+ options->SetBoolean("loadAsync", true); |
+ options->SetBoolean("nativeEvents", true); |
+ options->SetBoolean("verbose", true); |
+ |
+ Capabilities caps; |
+ ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ CapabilitiesParser parser(&dict, temp_dir.path(), &caps); |
+ ASSERT_FALSE(parser.Parse()); |
+ EXPECT_EQ(FILE_PATH_LITERAL("binary"), caps.command.GetProgram().value()); |
+ EXPECT_STREQ("channel", caps.channel.c_str()); |
+ EXPECT_TRUE(caps.detach); |
+ EXPECT_TRUE(caps.load_async); |
+ EXPECT_TRUE(caps.native_events); |
+ EXPECT_TRUE(caps.verbose); |
+} |
+ |
+TEST(CapabilitiesParser, Args) { |
+ DictionaryValue dict; |
+ DictionaryValue* options = new DictionaryValue(); |
+ dict.Set("chromeOptions", options); |
+ |
+ ListValue* args = new ListValue(); |
+ args->Append(Value::CreateStringValue("arg1")); |
+ args->Append(Value::CreateStringValue("arg2=val")); |
+ args->Append(Value::CreateStringValue("arg3='a space'")); |
+ options->Set("args", args); |
+ |
+ Capabilities caps; |
+ ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ CapabilitiesParser parser(&dict, temp_dir.path(), &caps); |
+ ASSERT_FALSE(parser.Parse()); |
+ EXPECT_TRUE(caps.command.HasSwitch("arg1")); |
+ EXPECT_STREQ("val", caps.command.GetSwitchValueASCII("arg2").c_str()); |
+ EXPECT_STREQ("'a space'", caps.command.GetSwitchValueASCII("arg3").c_str()); |
+} |
+ |
+TEST(CapabilitiesParser, Extensions) { |
+ DictionaryValue dict; |
+ DictionaryValue* options = new DictionaryValue(); |
+ dict.Set("chromeOptions", options); |
+ |
+ ListValue* extensions = new ListValue(); |
+ extensions->Append(Value::CreateStringValue("TWFu")); |
+ extensions->Append(Value::CreateStringValue("TWFuTWFu")); |
+ options->Set("extensions", extensions); |
+ |
+ Capabilities caps; |
+ ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ CapabilitiesParser parser(&dict, temp_dir.path(), &caps); |
+ ASSERT_FALSE(parser.Parse()); |
+ ASSERT_EQ(2u, caps.extensions.size()); |
+ std::string contents; |
+ ASSERT_TRUE(file_util::ReadFileToString(caps.extensions[0], &contents)); |
+ EXPECT_STREQ("Man", contents.c_str()); |
+ contents.clear(); |
+ ASSERT_TRUE(file_util::ReadFileToString(caps.extensions[1], &contents)); |
+ EXPECT_STREQ("ManMan", contents.c_str()); |
+} |
+ |
+TEST(CapabilitiesParser, Profile) { |
+ DictionaryValue dict; |
+ DictionaryValue* options = new DictionaryValue(); |
+ dict.Set("chromeOptions", options); |
+ |
+ ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ FilePath folder = temp_dir.path().AppendASCII("folder"); |
+ ASSERT_TRUE(file_util::CreateDirectory(folder)); |
+ ASSERT_EQ(4, file_util::WriteFile( |
+ folder.AppendASCII("data"), "data", 4)); |
+ FilePath zip = temp_dir.path().AppendASCII("data.zip"); |
+ ASSERT_TRUE(zip::Zip(folder, zip, false /* include_hidden_files */)); |
+ std::string contents; |
+ ASSERT_TRUE(file_util::ReadFileToString(zip, &contents)); |
+ std::string base64; |
+ ASSERT_TRUE(base::Base64Encode(contents, &base64)); |
+ options->SetString("profile", base64); |
+ |
+ Capabilities caps; |
+ CapabilitiesParser parser(&dict, temp_dir.path(), &caps); |
+ ASSERT_FALSE(parser.Parse()); |
+ std::string new_contents; |
+ ASSERT_TRUE(file_util::ReadFileToString( |
+ caps.profile.AppendASCII("data"), &new_contents)); |
+ EXPECT_STREQ("data", new_contents.c_str()); |
+} |
+ |
+TEST(CapabilitiesParser, UnknownCap) { |
+ Capabilities caps; |
+ DictionaryValue dict; |
+ dict.SetString("chromeOptions.nosuchcap", "none"); |
+ CapabilitiesParser parser(&dict, FilePath(), &caps); |
+ ASSERT_FALSE(parser.Parse()); |
+} |
+ |
+TEST(CapabilitiesParser, BadInput) { |
+ Capabilities caps; |
+ DictionaryValue dict; |
+ dict.SetString("chromeOptions.verbose", "false"); |
+ CapabilitiesParser parser(&dict, FilePath(), &caps); |
+ ASSERT_TRUE(parser.Parse()); |
+} |
+ |
+} // namespace webdriver |