1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96

ash / webui / common / backend / plural_string_handler_unittest.cc [blame]

// 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