i18n_apitest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// found in the LICENSE file.
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "base/file_util.h"
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "base/files/file_path.h"
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "base/files/scoped_temp_dir.h"
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "base/strings/utf_string_conversions.h"
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "chrome/browser/extensions/extension_apitest.h"
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "chrome/browser/ui/browser.h"
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "chrome/common/extensions/extension.h"
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "chrome/test/base/ui_test_utils.h"
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "net/test/embedded_test_server/embedded_test_server.h"
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottIN_PROC_BROWSER_TEST_F(ExtensionApiTest, I18N) {
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ASSERT_TRUE(StartEmbeddedTestServer());
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ASSERT_TRUE(RunExtensionTest("i18n")) << message_;
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottIN_PROC_BROWSER_TEST_F(ExtensionApiTest, I18NUpdate) {
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Create an Extension whose messages.json file will be updated.
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  base::ScopedTempDir extension_dir;
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ASSERT_TRUE(extension_dir.CreateUniqueTempDir());
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  base::CopyFile(
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      test_data_dir_.AppendASCII("i18nUpdate")
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    .AppendASCII("manifest.json"),
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      extension_dir.path().AppendASCII("manifest.json"));
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  base::CopyFile(
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      test_data_dir_.AppendASCII("i18nUpdate")
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    .AppendASCII("contentscript.js"),
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      extension_dir.path().AppendASCII("contentscript.js"));
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  base::CopyDirectory(
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      test_data_dir_.AppendASCII("i18nUpdate")
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    .AppendASCII("_locales"),
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      extension_dir.path().AppendASCII("_locales"),
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      true);
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const extensions::Extension* extension = LoadExtension(extension_dir.path());
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ResultCatcher catcher;
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Test that the messages.json file is loaded and the i18n message is loaded.
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ui_test_utils::NavigateToURL(
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      browser(),
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      embedded_test_server()->GetURL("/extensions/test_file.html"));
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  EXPECT_TRUE(catcher.GetNextResult());
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  string16 title;
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ui_test_utils::GetCurrentTabTitle(browser(), &title);
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  EXPECT_EQ(std::string("FIRSTMESSAGE"), UTF16ToUTF8(title));
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Change messages.json file and reload extension.
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  base::CopyFile(
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      test_data_dir_.AppendASCII("i18nUpdate")
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    .AppendASCII("messages2.json"),
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      extension_dir.path().AppendASCII("_locales/en/messages.json"));
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ReloadExtension(extension->id());
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Check that the i18n message is also changed.
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ui_test_utils::NavigateToURL(
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      browser(),
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      embedded_test_server()->GetURL("/extensions/test_file.html"));
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  EXPECT_TRUE(catcher.GetNextResult());
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ui_test_utils::GetCurrentTabTitle(browser(), &title);
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  EXPECT_EQ(std::string("SECONDMESSAGE"), UTF16ToUTF8(title));
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott