chromium/ash/webui/common/backend/plural_string_handler_unittest.cc

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/webui/common/backend/plural_string_handler.h"

#include <memory>
#include <string>
#include <utility>
#include <vector>

#include "base/logging.h"
#include "base/run_loop.h"
#include "base/test/task_environment.h"
#include "base/values.h"
#include "chromeos/strings/grit/chromeos_strings.h"
#include "content/public/test/test_web_ui.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace ash {
namespace {
constexpr char kHandlerFunctionName[] = "handlerFunctionName";

}  // namespace

class PluralStringHandlerTest : public testing::Test {
 public:
  PluralStringHandlerTest()
      : plural_string_handler_(std::make_unique<PluralStringHandler>()) {
    plural_string_handler_->SetWebUIForTest(&web_ui_);
    plural_string_handler_->RegisterMessages();
    // Add edit button label to plural map for testing purposes.
    plural_string_handler_->AddStringToPluralMap(
        "editButtonLabel", IDS_SCANNING_APP_EDIT_BUTTON_LABEL);
  }

  const content::TestWebUI::CallData& CallDataAtIndex(size_t index) {
    return *web_ui_.call_data()[index];
  }

  ~PluralStringHandlerTest() override = default;

 protected:
  base::test::TaskEnvironment task_environment_;
  content::TestWebUI web_ui_;
  const std::unique_ptr<PluralStringHandler> plural_string_handler_;
};

TEST_F(PluralStringHandlerTest, PluralString) {
  const size_t call_data_count_before_call = web_ui_.call_data().size();
  base::Value::List args;
  args.Append(kHandlerFunctionName);
  args.Append("editButtonLabel");
  args.Append(/*count=*/2);
  web_ui_.HandleReceivedMessage("getPluralString", args);
  base::RunLoop().RunUntilIdle();

  ASSERT_EQ(call_data_count_before_call + 1, web_ui_.call_data().size());
  const content::TestWebUI::CallData& call_data =
      CallDataAtIndex(call_data_count_before_call);
  EXPECT_EQ("cr.webUIResponse", call_data.function_name());
  EXPECT_EQ("handlerFunctionName", call_data.arg1()->GetString());
  EXPECT_TRUE(/*success=*/call_data.arg2()->GetBool());
  EXPECT_EQ("Edit files", call_data.arg3()->GetString());
}

TEST_F(PluralStringHandlerTest, SingularString) {
  const size_t call_data_count_before_call = web_ui_.call_data().size();
  base::Value::List args;
  args.Append(kHandlerFunctionName);
  args.Append("editButtonLabel");
  args.Append(/*count=*/1);
  web_ui_.HandleReceivedMessage("getPluralString", args);
  base::RunLoop().RunUntilIdle();

  ASSERT_EQ(call_data_count_before_call + 1, web_ui_.call_data().size());
  const content::TestWebUI::CallData& call_data =
      CallDataAtIndex(call_data_count_before_call);
  EXPECT_EQ("cr.webUIResponse", call_data.function_name());
  EXPECT_EQ("handlerFunctionName", call_data.arg1()->GetString());
  EXPECT_TRUE(/*success=*/call_data.arg2()->GetBool());
  EXPECT_EQ("Edit file", call_data.arg3()->GetString());
}

TEST_F(PluralStringHandlerTest, InvalidPluralStringRequest) {
  base::Value::List args;
  args.Append(kHandlerFunctionName);
  args.Append(/*name=*/"invalidKey");
  args.Append(/*count=*/2);
  web_ui_.HandleReceivedMessage("getPluralString", args);
  base::RunLoop().RunUntilIdle();

  EXPECT_EQ(0u, web_ui_.call_data().size());
}

}  // namespace ash