blob: f518472d7af93c2dc9c3ec7f31ae5e72c959d4c3 [file] [log] [blame]
// 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 "ui/base/accelerators/menu_label_accelerator_util.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace ui {
TEST(MenuLabelAcceleratorTest, GetMnemonic) {
static const struct {
const std::u16string label;
const char16_t mneumonic;
} cases[] = {
{u"", 0}, {u"Exit", 0}, {u"E&xit", 'x'},
{u"E&&xit", 0}, {u"E&xi&t", 'x'}, {u"Exit&", 0},
};
for (const auto& test : cases)
EXPECT_EQ(GetMnemonic(test.label), test.mneumonic);
}
TEST(MenuLabelAcceleratorTest, EscapeMenuLabelAmpersands) {
static const struct {
const char* input;
const char* output;
} cases[] = {
{"nothing", "nothing"},
{"foo &bar", "foo &&bar"},
{"foo &&bar", "foo &&&&bar"},
{"foo &&&bar", "foo &&&&&&bar"},
{"&foo bar", "&&foo bar"},
{"&&foo bar", "&&&&foo bar"},
{"&&&foo bar", "&&&&&&foo bar"},
{"&foo &bar", "&&foo &&bar"},
{"&&foo &&bar", "&&&&foo &&&&bar"},
{"f&o&o ba&r", "f&&o&&o ba&&r"},
{"foo_&_bar", "foo_&&_bar"},
{"&_foo_bar_&", "&&_foo_bar_&&"},
};
for (const auto& test : cases) {
std::u16string in = base::ASCIIToUTF16(test.input);
std::u16string out = base::ASCIIToUTF16(test.output);
EXPECT_EQ(out, EscapeMenuLabelAmpersands(in));
}
}
} // namespace ui