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