Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(443)

Unified Diff: components/drive/search_metadata_unittest.cc

Issue 1321553003: Files.app: split query into AND conditioned keywords in metadata search. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Empty query matches with anything. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/drive/search_metadata.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/drive/search_metadata_unittest.cc
diff --git a/components/drive/search_metadata_unittest.cc b/components/drive/search_metadata_unittest.cc
index c37ec23b562f047229798d615c1093ad3fa09b19..538d154c3fb9dc43608244ecfdfc0aa334877dd3 100644
--- a/components/drive/search_metadata_unittest.cc
+++ b/components/drive/search_metadata_unittest.cc
@@ -7,6 +7,7 @@
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/i18n/string_search.h"
+#include "base/memory/scoped_vector.h"
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/utf_string_conversions.h"
@@ -32,9 +33,12 @@ bool FindAndHighlightWrapper(
const std::string& text,
const std::string& query_text,
std::string* highlighted_text) {
- base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents query(
- base::UTF8ToUTF16(query_text));
- return FindAndHighlight(text, &query, highlighted_text);
+ ScopedVector<base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents>
+ queries;
+ queries.push_back(
+ new base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents(
+ base::UTF8ToUTF16(query_text)));
+ return FindAndHighlight(text, queries, highlighted_text);
}
} // namespace
@@ -77,18 +81,20 @@ class SearchMetadataTest : public testing::Test {
util::GetDriveMyDriveRootPath(), &local_id));
const std::string root_local_id = local_id;
- // drive/root/Directory 1
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry(GetDirectoryEntry(
- "Directory 1", "dir1", 1, root_local_id), &local_id));
+ // drive/root/Directory-1
+ EXPECT_EQ(FILE_ERROR_OK,
+ resource_metadata_->AddEntry(
+ GetDirectoryEntry("Directory-1", "dir1", 1, root_local_id),
+ &local_id));
const std::string dir1_local_id = local_id;
- // drive/root/Directory 1/SubDirectory File 1.txt
+ // drive/root/Directory-1/SubDirectory File 1.txt
EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry(GetFileEntry(
"SubDirectory File 1.txt", "file1a", 2, dir1_local_id), &local_id));
EXPECT_EQ(FILE_ERROR_OK, cache_->Store(
local_id, temp_file_md5, temp_file, FileCache::FILE_OPERATION_COPY));
- // drive/root/Directory 1/Shared To The Account Owner.txt
+ // drive/root/Directory-1/Shared To The Account Owner.txt
entry = GetFileEntry(
"Shared To The Account Owner.txt", "file1b", 3, dir1_local_id);
entry.set_shared_with_me(true);
@@ -187,7 +193,7 @@ TEST_F(SearchMetadataTest, SearchMetadata_RegularFile) {
EXPECT_EQ(FILE_ERROR_OK, error);
ASSERT_TRUE(result);
ASSERT_EQ(1U, result->size());
- EXPECT_EQ("drive/root/Directory 1/SubDirectory File 1.txt",
+ EXPECT_EQ("drive/root/Directory-1/SubDirectory File 1.txt",
result->at(0).path.AsUTF8Unsafe());
}
@@ -207,7 +213,7 @@ TEST_F(SearchMetadataTest, SearchMetadata_CaseInsensitiveSearch) {
EXPECT_EQ(FILE_ERROR_OK, error);
ASSERT_TRUE(result);
ASSERT_EQ(1U, result->size());
- EXPECT_EQ("drive/root/Directory 1/SubDirectory File 1.txt",
+ EXPECT_EQ("drive/root/Directory-1/SubDirectory File 1.txt",
result->at(0).path.AsUTF8Unsafe());
}
@@ -228,7 +234,7 @@ TEST_F(SearchMetadataTest, SearchMetadata_RegularFiles) {
// last accessed time in descending order.
EXPECT_EQ("drive/root/Slash \xE2\x88\x95 in directory/Slash SubDir File.txt",
result->at(0).path.AsUTF8Unsafe());
- EXPECT_EQ("drive/root/Directory 1/SubDirectory File 1.txt",
+ EXPECT_EQ("drive/root/Directory-1/SubDirectory File 1.txt",
result->at(1).path.AsUTF8Unsafe());
}
@@ -257,14 +263,14 @@ TEST_F(SearchMetadataTest, SearchMetadata_Directory) {
SearchMetadata(
base::ThreadTaskRunnerHandle::Get(), resource_metadata_.get(),
- "Directory 1", base::Bind(&MatchesType, SEARCH_METADATA_ALL),
+ "Directory-1", base::Bind(&MatchesType, SEARCH_METADATA_ALL),
kDefaultAtMostNumMatches,
google_apis::test_util::CreateCopyResultCallback(&error, &result));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, error);
ASSERT_TRUE(result);
ASSERT_EQ(1U, result->size());
- EXPECT_EQ("drive/root/Directory 1", result->at(0).path.AsUTF8Unsafe());
+ EXPECT_EQ("drive/root/Directory-1", result->at(0).path.AsUTF8Unsafe());
}
TEST_F(SearchMetadataTest, SearchMetadata_HostedDocument) {
@@ -312,7 +318,7 @@ TEST_F(SearchMetadataTest, SearchMetadata_SharedWithMe) {
EXPECT_EQ(FILE_ERROR_OK, error);
ASSERT_TRUE(result);
ASSERT_EQ(1U, result->size());
- EXPECT_EQ("drive/root/Directory 1/Shared To The Account Owner.txt",
+ EXPECT_EQ("drive/root/Directory-1/Shared To The Account Owner.txt",
result->at(0).path.AsUTF8Unsafe());
}
@@ -396,10 +402,53 @@ TEST_F(SearchMetadataTest, SearchMetadata_Offline) {
EXPECT_EQ("drive/root/File 2.txt",
result->at(1).path.AsUTF8Unsafe());
- EXPECT_EQ("drive/root/Directory 1/SubDirectory File 1.txt",
+ EXPECT_EQ("drive/root/Directory-1/SubDirectory File 1.txt",
result->at(2).path.AsUTF8Unsafe());
}
+TEST_F(SearchMetadataTest, SearchMetadata_MultipleKeywords) {
+ FileError error = FILE_ERROR_FAILED;
+ scoped_ptr<MetadataSearchResultVector> result;
+
+ SearchMetadata(
+ base::ThreadTaskRunnerHandle::Get(), resource_metadata_.get(),
+ "Directory 1", base::Bind(&MatchesType, SEARCH_METADATA_ALL),
+ kDefaultAtMostNumMatches,
+ google_apis::test_util::CreateCopyResultCallback(&error, &result));
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(FILE_ERROR_OK, error);
+ ASSERT_TRUE(result);
+ ASSERT_EQ(2U, result->size());
+
+ EXPECT_EQ("drive/root/Directory-1/SubDirectory File 1.txt",
+ result->at(0).path.AsUTF8Unsafe());
+ EXPECT_EQ("drive/root/Directory-1", result->at(1).path.AsUTF8Unsafe());
+}
+
+TEST_F(SearchMetadataTest,
+ SearchMetadata_KeywordsSeparatedWithIdeographicSpace) {
+ FileError error = FILE_ERROR_FAILED;
+ scoped_ptr<MetadataSearchResultVector> result;
+
+ // \xE3\x80\x80 is ideographic space.
+ SearchMetadata(
+ base::ThreadTaskRunnerHandle::Get(), resource_metadata_.get(),
+ "Directory\xE3\x80\x80"
+ "1",
+ base::Bind(&MatchesType, SEARCH_METADATA_ALL), kDefaultAtMostNumMatches,
+ google_apis::test_util::CreateCopyResultCallback(&error, &result));
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(FILE_ERROR_OK, error);
+ ASSERT_TRUE(result);
+ ASSERT_EQ(2U, result->size());
+
+ EXPECT_EQ("drive/root/Directory-1/SubDirectory File 1.txt",
+ result->at(0).path.AsUTF8Unsafe());
+ EXPECT_EQ("drive/root/Directory-1", result->at(1).path.AsUTF8Unsafe());
+}
+
TEST(SearchMetadataSimpleTest, FindAndHighlight_ZeroMatches) {
std::string highlighted_text;
EXPECT_FALSE(FindAndHighlightWrapper("text", "query", &highlighted_text));
@@ -410,6 +459,15 @@ TEST(SearchMetadataSimpleTest, FindAndHighlight_EmptyText) {
EXPECT_FALSE(FindAndHighlightWrapper("", "query", &highlighted_text));
}
+TEST(SearchMetadataSimpleTest, FindAndHighlight_EmptyQuery) {
+ ScopedVector<base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents>
+ queries;
+
+ std::string highlighted_text;
+ EXPECT_TRUE(FindAndHighlight("hello", queries, &highlighted_text));
+ EXPECT_EQ("hello", highlighted_text);
+}
+
TEST(SearchMetadataSimpleTest, FindAndHighlight_FullMatch) {
std::string highlighted_text;
EXPECT_TRUE(FindAndHighlightWrapper("hello", "hello", &highlighted_text));
@@ -473,14 +531,17 @@ TEST(SearchMetadataSimpleTest, FindAndHighlight_IgnoreCaseNonASCII) {
}
TEST(SearchMetadataSimpleTest, MultiTextBySingleQuery) {
- base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents query(
- base::UTF8ToUTF16("hello"));
+ ScopedVector<base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents>
+ queries;
+ queries.push_back(
+ new base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents(
+ base::UTF8ToUTF16("hello")));
std::string highlighted_text;
- EXPECT_TRUE(FindAndHighlight("hello", &query, &highlighted_text));
+ EXPECT_TRUE(FindAndHighlight("hello", queries, &highlighted_text));
EXPECT_EQ("<b>hello</b>", highlighted_text);
- EXPECT_FALSE(FindAndHighlight("goodbye", &query, &highlighted_text));
- EXPECT_TRUE(FindAndHighlight("1hello2", &query, &highlighted_text));
+ EXPECT_FALSE(FindAndHighlight("goodbye", queries, &highlighted_text));
+ EXPECT_TRUE(FindAndHighlight("1hello2", queries, &highlighted_text));
EXPECT_EQ("1<b>hello</b>2", highlighted_text);
}
@@ -496,5 +557,45 @@ TEST(SearchMetadataSimpleTest, FindAndHighlight_MoreMetaChars) {
EXPECT_EQ("a&amp;<b>b&amp;c</b>&amp;d", highlighted_text);
}
+TEST(SearchMetadataSimpleTest, FindAndHighlight_SurrogatePair) {
+ std::string highlighted_text;
+ // \xF0\x9F\x98\x81 (U+1F601) is a surrogate pair for smile icon of emoji.
+ EXPECT_TRUE(FindAndHighlightWrapper("hi\xF0\x9F\x98\x81hello",
+ "i\xF0\x9F\x98\x81", &highlighted_text));
+ EXPECT_EQ("h<b>i\xF0\x9F\x98\x81</b>hello", highlighted_text);
+}
+
+TEST(SearchMetadataSimpleTest, FindAndHighlight_MultipleQueries) {
+ ScopedVector<base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents>
+ queries;
+ queries.push_back(
+ new base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents(
+ base::UTF8ToUTF16("hello")));
+ queries.push_back(
+ new base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents(
+ base::UTF8ToUTF16("good")));
+
+ std::string highlighted_text;
+ EXPECT_TRUE(
+ FindAndHighlight("good morning, hello", queries, &highlighted_text));
+ EXPECT_EQ("<b>good</b> morning, <b>hello</b>", highlighted_text);
+}
+
+TEST(SearchMetadataSimpleTest, FindAndHighlight_OverlappingHighlights) {
+ ScopedVector<base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents>
+ queries;
+ queries.push_back(
+ new base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents(
+ base::UTF8ToUTF16("morning")));
+ queries.push_back(
+ new base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents(
+ base::UTF8ToUTF16("ing,")));
+
+ std::string highlighted_text;
+ EXPECT_TRUE(
+ FindAndHighlight("good morning, hello", queries, &highlighted_text));
+ EXPECT_EQ("good <b>morning,</b> hello", highlighted_text);
+}
+
} // namespace internal
} // namespace drive
« no previous file with comments | « components/drive/search_metadata.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698