// Copyright 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/common/importer/firefox_importer_utils.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/values.h" #include "chrome/grit/generated_resources.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h" namespace { struct GetPrefsJsValueCase { std::string prefs_content; std::string pref_name; std::string pref_value; } GetPrefsJsValueCases[] = { // Basic case. Single pref, unquoted value. { "user_pref(\"foo.bar\", 1);", "foo.bar", "1" }, // Value is quoted. Quotes should be stripped. { "user_pref(\"foo.bar\", \"1\");", "foo.bar", "1" }, // Value has parens. { "user_pref(\"foo.bar\", \"Value (detail)\");", "foo.bar", "Value (detail)" }, // Multi-line case. { "user_pref(\"foo.bar\", 1);\n" "user_pref(\"foo.baz\", 2);\n" "user_pref(\"foo.bag\", 3);", "foo.baz", "2" }, // Malformed content. { "user_pref(\"foo.bar\", 1);\n" "user_pref(\"foo.baz\", 2;\n" "user_pref(\"foo.bag\", 3);", "foo.baz", "" }, // Malformed content. { "uesr_pref(\"foo.bar\", 1);", "foo.bar", "" }, }; struct GetFirefoxImporterNameCase { std::string app_ini_content; int resource_id; } GetFirefoxImporterNameCases[] = { // Basic case { "[App]\n" "Vendor=Mozilla\n" "Name=iceweasel\n" "Version=10.0.6\n" "BuildID=20120717115048\n" "ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384}", IDS_IMPORT_FROM_ICEWEASEL }, // Whitespace { " \t[App] \n" "Vendor=Mozilla\n" " Name=Firefox\t \r\n" "Version=10.0.6\n", IDS_IMPORT_FROM_FIREFOX }, // No Name setting { "[App]\n" "Vendor=Mozilla\n" "Version=10.0.6\n" "BuildID=20120717115048\n" "ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384}", IDS_IMPORT_FROM_FIREFOX }, // No [App] section { "[Foo]\n" "Vendor=Mozilla\n" "Name=Foo\n", IDS_IMPORT_FROM_FIREFOX }, // Multiple Name settings in different sections { "[Foo]\n" "Vendor=Mozilla\n" "Name=Firefox\n" "[App]\n" "Profile=mozilla/firefox\n" "Name=iceweasel\n" "[Bar]\n" "Name=Bar\n" "ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384}", IDS_IMPORT_FROM_ICEWEASEL }, // Case-insensitivity { "[App]\n" "Vendor=Mozilla\n" "Name=IceWeasel\n" "Version=10.0.6\n", IDS_IMPORT_FROM_ICEWEASEL }, // Empty file { "", IDS_IMPORT_FROM_FIREFOX } }; } // anonymous namespace TEST(FirefoxImporterUtilsTest, GetPrefsJsValue) { for (size_t i = 0; i < arraysize(GetPrefsJsValueCases); ++i) { EXPECT_EQ( GetPrefsJsValueCases[i].pref_value, GetPrefsJsValue(GetPrefsJsValueCases[i].prefs_content, GetPrefsJsValueCases[i].pref_name)); } } TEST(FirefoxImporterUtilsTest, GetFirefoxImporterName) { base::ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); const base::FilePath app_ini_file( temp_dir.path().AppendASCII("application.ini")); for (size_t i = 0; i < arraysize(GetFirefoxImporterNameCases); ++i) { base::WriteFile(app_ini_file, GetFirefoxImporterNameCases[i].app_ini_content.c_str(), GetFirefoxImporterNameCases[i].app_ini_content.size()); EXPECT_EQ(GetFirefoxImporterName(temp_dir.path()), l10n_util::GetStringUTF16(GetFirefoxImporterNameCases[i].resource_id)); } EXPECT_EQ(l10n_util::GetStringUTF16( IDS_IMPORT_FROM_FIREFOX), GetFirefoxImporterName(base::FilePath( FILE_PATH_LITERAL("/invalid/path")))); } TEST(FirefoxImporterUtilsTest, GetFirefoxProfilePath) { base::DictionaryValue no_profiles; EXPECT_EQ("", GetFirefoxProfilePathFromDictionary(no_profiles).MaybeAsASCII()); base::DictionaryValue single_profile; single_profile.SetString("Profile0.Path", "first"); single_profile.SetString("Profile0.IsRelative", "0"); single_profile.SetString("Profile0.Default", "1"); EXPECT_EQ("first", GetFirefoxProfilePathFromDictionary(single_profile).MaybeAsASCII()); base::DictionaryValue no_default; no_default.SetString("Profile0.Path", "first"); no_default.SetString("Profile0.IsRelative", "0"); no_default.SetString("Profile1.Path", "second"); no_default.SetString("Profile1.IsRelative", "0"); EXPECT_EQ("first", GetFirefoxProfilePathFromDictionary(no_default).MaybeAsASCII()); base::DictionaryValue default_first; default_first.SetString("Profile0.Path", "first"); default_first.SetString("Profile0.IsRelative", "0"); default_first.SetString("Profile0.Default", "1"); default_first.SetString("Profile1.Path", "second"); default_first.SetString("Profile1.IsRelative", "0"); EXPECT_EQ("first", GetFirefoxProfilePathFromDictionary(default_first).MaybeAsASCII()); base::DictionaryValue default_second; default_second.SetString("Profile0.Path", "first"); default_second.SetString("Profile0.IsRelative", "0"); default_second.SetString("Profile1.Path", "second"); default_second.SetString("Profile1.IsRelative", "0"); default_second.SetString("Profile1.Default", "1"); EXPECT_EQ("second", GetFirefoxProfilePathFromDictionary(default_second).MaybeAsASCII()); }