picker: add source to text results
This is required for logging metrics of the category of inserted results. Bug: b:322927522 Change-Id: I49846c0f5d6f372e27c707bf3f09ab2a86f9e665 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5467907 Reviewed-by: Darren Shen <shend@chromium.org> Commit-Queue: Jing Wang <jiwan@chromium.org> Cr-Commit-Position: refs/heads/main@{#1291005}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
eb2d2b1029
commit
c60118c6c8
@ -398,8 +398,9 @@ void PickerController::TransformSelectedText(PickerCategory category) {
|
||||
return;
|
||||
}
|
||||
std::u16string_view selected_text = model_->selected_text();
|
||||
InsertResultOnNextFocus(
|
||||
PickerSearchResult::Text(TransformText(selected_text, category)));
|
||||
InsertResultOnNextFocus(PickerSearchResult::Text(
|
||||
TransformText(selected_text, category),
|
||||
PickerSearchResult::TextData::Source::kCaseTransform));
|
||||
}
|
||||
|
||||
void PickerController::StartSearch(const std::u16string& query,
|
||||
|
@ -74,14 +74,16 @@ PickerSearchResult MakeResult(const base::Time time,
|
||||
return PickerSearchResult::Text(
|
||||
base::LocalizedTimeFormatWithPattern(time, "LLLd"), secondary_text,
|
||||
ui::ImageModel::FromVectorIcon(kPickerCalendarIcon,
|
||||
cros_tokens::kCrosSysOnSurface));
|
||||
cros_tokens::kCrosSysOnSurface),
|
||||
PickerSearchResult::TextData::Source::kDate);
|
||||
}
|
||||
|
||||
PickerSearchResult OverrideSecondaryText(PickerSearchResult result,
|
||||
std::u16string_view secondary_text) {
|
||||
const PickerSearchResult::TextData& data =
|
||||
std::get<PickerSearchResult::TextData>(result.data());
|
||||
return PickerSearchResult::Text(data.primary_text, secondary_text, data.icon);
|
||||
return PickerSearchResult::Text(data.primary_text, secondary_text, data.icon,
|
||||
data.source);
|
||||
}
|
||||
|
||||
void HandleSpecificDayQueries(const base::Time& now,
|
||||
|
@ -44,7 +44,11 @@ MATCHER(ResultMatchesDate, "") {
|
||||
Property("data", &PickerSearchResult::data,
|
||||
VariantWith<PickerSearchResult::TextData>(Field(
|
||||
"text", &PickerSearchResult::TextData::secondary_text,
|
||||
expected_result.secondary_text)))),
|
||||
expected_result.secondary_text))),
|
||||
Property("data", &PickerSearchResult::data,
|
||||
VariantWith<PickerSearchResult::TextData>(
|
||||
Field("source", &PickerSearchResult::TextData::source,
|
||||
expected_result.source)))),
|
||||
actual_result, result_listener);
|
||||
}
|
||||
|
||||
@ -54,6 +58,13 @@ struct TestCase {
|
||||
std::vector<PickerSearchResult::TextData> expected_results;
|
||||
};
|
||||
|
||||
PickerSearchResult::TextData MakeResult(std::u16string primary_text,
|
||||
std::u16string secondary_text = u"") {
|
||||
return PickerSearchResult::TextData(
|
||||
primary_text, secondary_text, ui::ImageModel(),
|
||||
PickerSearchResult::TextData::Source::kDate);
|
||||
}
|
||||
|
||||
class PickerDateSearchTest
|
||||
: public ::testing::TestWithParam<std::tuple<std::string_view, TestCase>> {
|
||||
};
|
||||
@ -61,141 +72,136 @@ class PickerDateSearchTest
|
||||
INSTANTIATE_TEST_SUITE_P(
|
||||
,
|
||||
PickerDateSearchTest,
|
||||
Combine(
|
||||
Values("00:00", "12:00", "23:59"),
|
||||
Values(
|
||||
// No result
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"abc",
|
||||
.expected_results = {},
|
||||
},
|
||||
// Today
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"today",
|
||||
.expected_results = {{.primary_text = u"Jan 23"}},
|
||||
},
|
||||
// Yesterday
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"yesterday",
|
||||
.expected_results = {{.primary_text = u"Jan 22"}},
|
||||
},
|
||||
// Tomorrow
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"tomorrow",
|
||||
.expected_results = {{.primary_text = u"Jan 24"}},
|
||||
},
|
||||
// X days from now
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"10 days from now",
|
||||
.expected_results = {{.primary_text = u"Feb 2"}},
|
||||
},
|
||||
// X days ago
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"five days ago",
|
||||
.expected_results = {{.primary_text = u"Jan 18"}},
|
||||
},
|
||||
// X weeks from now
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"three weeks from now",
|
||||
.expected_results = {{.primary_text = u"Feb 13"}},
|
||||
},
|
||||
// X weeks ago
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"2 weeks ago",
|
||||
.expected_results = {{.primary_text = u"Jan 9"}},
|
||||
},
|
||||
// search for Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"Friday",
|
||||
.expected_results = {{.primary_text = u"Mar 22"}},
|
||||
},
|
||||
// search for this Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"this Friday",
|
||||
.expected_results = {{.primary_text = u"Mar 22"}},
|
||||
},
|
||||
// search for next Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"next Friday",
|
||||
.expected_results = {{.primary_text = u"Mar 29",
|
||||
.secondary_text = u"Friday next week"},
|
||||
{.primary_text = u"Mar 22",
|
||||
.secondary_text = u"this coming Friday"}},
|
||||
},
|
||||
// search for last Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"last Friday",
|
||||
.expected_results = {{.primary_text = u"Mar 15"}},
|
||||
},
|
||||
// search for Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"Tuesday",
|
||||
.expected_results = {{.primary_text = u"Mar 26",
|
||||
.secondary_text = u"this coming Tuesday"},
|
||||
{.primary_text = u"Mar 19",
|
||||
.secondary_text = u"this past Tuesday"}},
|
||||
},
|
||||
// search for this Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"this Tuesday",
|
||||
.expected_results = {{.primary_text = u"Mar 26",
|
||||
.secondary_text = u"this coming Tuesday"},
|
||||
{.primary_text = u"Mar 19",
|
||||
.secondary_text = u"this past Tuesday"}},
|
||||
},
|
||||
// search for next Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"next Tuesday",
|
||||
.expected_results = {{.primary_text = u"Mar 26"}},
|
||||
},
|
||||
// search for last Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"last Tuesday",
|
||||
.expected_results = {{.primary_text = u"Mar 12",
|
||||
.secondary_text = u"Tuesday last week"},
|
||||
{.primary_text = u"Mar 19",
|
||||
.secondary_text = u"this past Tuesday"}},
|
||||
},
|
||||
// search for Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"Monday",
|
||||
.expected_results = {{.primary_text = u"Mar 18"}},
|
||||
},
|
||||
// search for this Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"this Monday",
|
||||
.expected_results = {{.primary_text = u"Mar 18"}},
|
||||
},
|
||||
// search for next Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"next Monday",
|
||||
.expected_results = {{.primary_text = u"Mar 25"}},
|
||||
},
|
||||
// search for last Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"last Monday",
|
||||
.expected_results = {{.primary_text = u"Mar 11"}},
|
||||
})));
|
||||
Combine(Values("00:00", "12:00", "23:59"),
|
||||
Values(
|
||||
// No result
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"abc",
|
||||
.expected_results = {},
|
||||
},
|
||||
// Today
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"today",
|
||||
.expected_results = {MakeResult(u"Jan 23")},
|
||||
},
|
||||
// Yesterday
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"yesterday",
|
||||
.expected_results = {MakeResult(u"Jan 22")},
|
||||
},
|
||||
// Tomorrow
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"tomorrow",
|
||||
.expected_results = {MakeResult(u"Jan 24")},
|
||||
},
|
||||
// X days from now
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"10 days from now",
|
||||
.expected_results = {MakeResult(u"Feb 2")},
|
||||
},
|
||||
// X days ago
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"five days ago",
|
||||
.expected_results = {MakeResult(u"Jan 18")},
|
||||
},
|
||||
// X weeks from now
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"three weeks from now",
|
||||
.expected_results = {MakeResult(u"Feb 13")},
|
||||
},
|
||||
// X weeks ago
|
||||
TestCase{
|
||||
.date = "23 Jan 2000",
|
||||
.query = u"2 weeks ago",
|
||||
.expected_results = {MakeResult(u"Jan 9")},
|
||||
},
|
||||
// search for Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"Friday",
|
||||
.expected_results = {MakeResult(u"Mar 22")},
|
||||
},
|
||||
// search for this Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"this Friday",
|
||||
.expected_results = {MakeResult(u"Mar 22")},
|
||||
},
|
||||
// search for next Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"next Friday",
|
||||
.expected_results =
|
||||
{MakeResult(u"Mar 29", u"Friday next week"),
|
||||
MakeResult(u"Mar 22", u"this coming Friday")},
|
||||
},
|
||||
// search for last Friday on Tuesday
|
||||
TestCase{
|
||||
.date = "19 Mar 2024",
|
||||
.query = u"last Friday",
|
||||
.expected_results = {MakeResult(u"Mar 15")},
|
||||
},
|
||||
// search for Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"Tuesday",
|
||||
.expected_results =
|
||||
{MakeResult(u"Mar 26", u"this coming Tuesday"),
|
||||
MakeResult(u"Mar 19", u"this past Tuesday")},
|
||||
},
|
||||
// search for this Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"this Tuesday",
|
||||
.expected_results =
|
||||
{MakeResult(u"Mar 26", u"this coming Tuesday"),
|
||||
MakeResult(u"Mar 19", u"this past Tuesday")},
|
||||
},
|
||||
// search for next Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"next Tuesday",
|
||||
.expected_results = {MakeResult(u"Mar 26")},
|
||||
},
|
||||
// search for last Tuesday on Friday
|
||||
TestCase{
|
||||
.date = "22 Mar 2024",
|
||||
.query = u"last Tuesday",
|
||||
.expected_results =
|
||||
{MakeResult(u"Mar 12", u"Tuesday last week"),
|
||||
MakeResult(u"Mar 19", u"this past Tuesday")},
|
||||
},
|
||||
// search for Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"Monday",
|
||||
.expected_results = {MakeResult(u"Mar 18")},
|
||||
},
|
||||
// search for this Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"this Monday",
|
||||
.expected_results = {MakeResult(u"Mar 18")},
|
||||
},
|
||||
// search for next Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"next Monday",
|
||||
.expected_results = {MakeResult(u"Mar 25")},
|
||||
},
|
||||
// search for last Monday on Monday
|
||||
TestCase{
|
||||
.date = "18 Mar 2024",
|
||||
.query = u"last Monday",
|
||||
.expected_results = {MakeResult(u"Mar 11")},
|
||||
})));
|
||||
|
||||
TEST_P(PickerDateSearchTest, ReturnsExpectedDates) {
|
||||
std::string_view time = std::get<0>(GetParam());
|
||||
|
@ -25,7 +25,9 @@ std::optional<PickerSearchResult> PickerMathSearch(std::u16string_view query) {
|
||||
std::optional<std::string> result =
|
||||
fend_core::evaluate(base::UTF16ToUTF8(query));
|
||||
if (result.has_value()) {
|
||||
return PickerSearchResult::Text(base::UTF8ToUTF16(*result));
|
||||
return PickerSearchResult::Text(
|
||||
base::UTF8ToUTF16(*result),
|
||||
PickerSearchResult::TextData::Source::kMath);
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
namespace ash {
|
||||
namespace {
|
||||
|
||||
using ::testing::AllOf;
|
||||
using ::testing::Field;
|
||||
using ::testing::IsEmpty;
|
||||
using ::testing::Not;
|
||||
@ -34,10 +35,15 @@ TEST(MAYBE_PickerMathSearchTest, NoResult) {
|
||||
TEST(MAYBE_PickerMathSearchTest, OnePlusOneEqualsTwo) {
|
||||
EXPECT_THAT(
|
||||
PickerMathSearch(u"1 + 1"),
|
||||
Optional(Property(
|
||||
"data", &PickerSearchResult::data,
|
||||
VariantWith<PickerSearchResult::TextData>(Field(
|
||||
"text", &PickerSearchResult::TextData::primary_text, u"2")))));
|
||||
Optional(AllOf(
|
||||
Property(
|
||||
"data", &PickerSearchResult::data,
|
||||
VariantWith<PickerSearchResult::TextData>(Field(
|
||||
"text", &PickerSearchResult::TextData::primary_text, u"2"))),
|
||||
Property("data", &PickerSearchResult::data,
|
||||
VariantWith<PickerSearchResult::TextData>(
|
||||
Field("source", &PickerSearchResult::TextData::source,
|
||||
PickerSearchResult::TextData::Source::kMath))))));
|
||||
}
|
||||
|
||||
TEST(PickerMathSearchTest, ReturnsExamples) {
|
||||
|
@ -14,6 +14,23 @@
|
||||
|
||||
namespace ash {
|
||||
|
||||
PickerSearchResult::TextData::TextData(std::u16string primary_text,
|
||||
std::u16string secondary_text,
|
||||
ui::ImageModel icon,
|
||||
Source source)
|
||||
: primary_text(std::move(primary_text)),
|
||||
secondary_text(std::move(secondary_text)),
|
||||
icon(std::move(icon)),
|
||||
source(source) {}
|
||||
|
||||
PickerSearchResult::TextData::TextData(const PickerSearchResult::TextData&) =
|
||||
default;
|
||||
|
||||
PickerSearchResult::TextData& PickerSearchResult::TextData::operator=(
|
||||
const PickerSearchResult::TextData&) = default;
|
||||
|
||||
PickerSearchResult::TextData::~TextData() = default;
|
||||
|
||||
bool PickerSearchResult::TextData::operator==(
|
||||
const PickerSearchResult::TextData&) const = default;
|
||||
|
||||
@ -114,19 +131,19 @@ PickerSearchResult::PickerSearchResult(PickerSearchResult&&) = default;
|
||||
PickerSearchResult& PickerSearchResult::operator=(PickerSearchResult&&) =
|
||||
default;
|
||||
|
||||
PickerSearchResult PickerSearchResult::Text(std::u16string_view text) {
|
||||
return PickerSearchResult(TextData{.primary_text = std::u16string(text),
|
||||
.secondary_text = u"",
|
||||
.icon = ui::ImageModel()});
|
||||
PickerSearchResult PickerSearchResult::Text(std::u16string_view text,
|
||||
TextData::Source source) {
|
||||
return PickerSearchResult(
|
||||
TextData(std::u16string(text), u"", ui::ImageModel(), source));
|
||||
}
|
||||
|
||||
PickerSearchResult PickerSearchResult::Text(std::u16string_view primary_text,
|
||||
std::u16string_view secondary_text,
|
||||
ui::ImageModel icon) {
|
||||
return PickerSearchResult(
|
||||
TextData{.primary_text = std::u16string(primary_text),
|
||||
.secondary_text = std::u16string(secondary_text),
|
||||
.icon = std::move(icon)});
|
||||
ui::ImageModel icon,
|
||||
TextData::Source source) {
|
||||
return PickerSearchResult(TextData(std::u16string(primary_text),
|
||||
std::u16string(secondary_text),
|
||||
std::move(icon), source));
|
||||
}
|
||||
|
||||
PickerSearchResult PickerSearchResult::SearchRequest(std::u16string_view text,
|
||||
|
@ -25,9 +25,27 @@ namespace ash {
|
||||
class ASH_PUBLIC_EXPORT PickerSearchResult {
|
||||
public:
|
||||
struct TextData {
|
||||
enum class Source {
|
||||
kUnknown, // This should only be used for tests.
|
||||
kDate,
|
||||
kMath,
|
||||
kCaseTransform,
|
||||
kOmnibox,
|
||||
};
|
||||
|
||||
std::u16string primary_text;
|
||||
std::u16string secondary_text;
|
||||
ui::ImageModel icon;
|
||||
Source source;
|
||||
|
||||
TextData(std::u16string primary_text,
|
||||
std::u16string secondary_text,
|
||||
ui::ImageModel icon,
|
||||
Source source);
|
||||
|
||||
TextData(const TextData&);
|
||||
TextData& operator=(const TextData&);
|
||||
~TextData();
|
||||
|
||||
bool operator==(const TextData&) const;
|
||||
};
|
||||
@ -179,10 +197,14 @@ class ASH_PUBLIC_EXPORT PickerSearchResult {
|
||||
static PickerSearchResult BrowsingHistory(const GURL& url,
|
||||
std::u16string title,
|
||||
ui::ImageModel icon);
|
||||
static PickerSearchResult Text(std::u16string_view text);
|
||||
static PickerSearchResult Text(std::u16string_view primary_text,
|
||||
std::u16string_view secondary_text,
|
||||
ui::ImageModel icon);
|
||||
static PickerSearchResult Text(
|
||||
std::u16string_view text,
|
||||
TextData::Source source = TextData::Source::kUnknown);
|
||||
static PickerSearchResult Text(
|
||||
std::u16string_view primary_text,
|
||||
std::u16string_view secondary_text,
|
||||
ui::ImageModel icon,
|
||||
TextData::Source source = TextData::Source::kUnknown);
|
||||
static PickerSearchResult SearchRequest(std::u16string_view text,
|
||||
ui::ImageModel icon);
|
||||
static PickerSearchResult Emoji(std::u16string_view emoji);
|
||||
|
@ -128,8 +128,9 @@ std::vector<ash::PickerSearchResult> ConvertSearchResults(
|
||||
picker_results.push_back(ash::PickerSearchResult::BrowsingHistory(
|
||||
*result_url, result->title(), result->icon().icon));
|
||||
} else {
|
||||
picker_results.push_back(
|
||||
ash::PickerSearchResult::Text(result->title()));
|
||||
picker_results.push_back(ash::PickerSearchResult::Text(
|
||||
result->title(),
|
||||
ash::PickerSearchResult::TextData::Source::kOmnibox));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user