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

Unified Diff: ui/base/win/open_file_name_win_unittest.cc

Issue 419523006: Experimentally isolate GetOpenFileName in a utility process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 6 years, 5 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
Index: ui/base/win/open_file_name_win_unittest.cc
diff --git a/ui/base/win/open_file_name_win_unittest.cc b/ui/base/win/open_file_name_win_unittest.cc
index 5c9fefb3406d12174501e71dfaeaa58c861abf39..b280f05f86b070b2b7528430a06ceb97032864a6 100644
--- a/ui/base/win/open_file_name_win_unittest.cc
+++ b/ui/base/win/open_file_name_win_unittest.cc
@@ -12,16 +12,64 @@ const HWND kHwnd = reinterpret_cast<HWND>(0xDEADBEEF);
const DWORD kFlags = OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ENABLESIZING;
void SetResult(const base::string16& result, ui::win::OpenFileName* ofn) {
- EXPECT_GT(ofn->Get()->nMaxFile, result.size());
- if (ofn->Get()->nMaxFile > result.size()) {
- if (!result.size()) {
- ofn->Get()->lpstrFile[0] = 0;
- } else {
- // Because the result has embedded nulls, we must memcpy.
- memcpy(ofn->Get()->lpstrFile,
- result.c_str(),
- (result.size() + 1) * sizeof(result[0]));
- }
+ if (ofn->Get()->nMaxFile <= result.size()) {
+ ADD_FAILURE() << "filename buffer insufficient.";
+ return;
+ }
+ if (!result.size()) {
+ ofn->Get()->lpstrFile[0] = 0;
+ } else {
+ // Because the result has embedded nulls, we must memcpy.
+ memcpy(ofn->Get()->lpstrFile,
+ result.c_str(),
+ (result.size() + 1) * sizeof(result[0]));
+ }
+}
+
+void CheckFilters(
+ const std::vector<Tuple2<base::string16, base::string16> >& expected,
+ const std::vector<Tuple2<base::string16, base::string16> >& actual) {
+ if (expected.size() != actual.size()) {
+ ADD_FAILURE() << "filter count mismatch. Got " << actual.size()
+ << " expected " << expected.size() << ".";
+ return;
+ }
+
+ for (size_t i = 0; i < expected.size(); ++i) {
+ EXPECT_EQ(expected[i].a, actual[i].a) << "Mismatch at index " << i;
+ EXPECT_EQ(expected[i].b, actual[i].b) << "Mismatch at index " << i;
+ }
+}
+
+void CheckFilterString(const base::string16& expected,
+ const ui::win::OpenFileName& ofn) {
+ if (!ofn.Get()->lpstrFilter) {
+ ADD_FAILURE() << "Filter string is NULL.";
+ return;
+ }
+ if (expected.size() == 0) {
+ EXPECT_EQ(0, ofn.Get()->lpstrFilter[0]);
+ } else {
+ EXPECT_EQ(0,
+ memcmp(expected.c_str(),
+ ofn.Get()->lpstrFilter,
+ expected.size() + 1 * sizeof(expected[0])));
+ }
+}
+
+void CheckResult(const base::string16& expected,
+ const ui::win::OpenFileName& ofn) {
+ if (!ofn.Get()->lpstrFile) {
+ ADD_FAILURE() << "File string is NULL.";
+ return;
+ }
+ if (expected.size() == 0) {
+ EXPECT_EQ(0, ofn.Get()->lpstrFile[0]);
+ } else {
+ EXPECT_EQ(0,
+ memcmp(expected.c_str(),
+ ofn.Get()->lpstrFile,
+ expected.size() + 1 * sizeof(expected[0])));
}
}
@@ -135,3 +183,44 @@ TEST(OpenFileNameTest, GetResult) {
EXPECT_EQ(base::FilePath(), directory);
ASSERT_EQ(0u, filenames.size());
}
+
+TEST(OpenFileNameTest, SetAndGetFilters) {
+ const base::string16 kNull(L"\0", 1);
+
+ ui::win::OpenFileName ofn(kHwnd, kFlags);
+ std::vector<Tuple2<base::string16, base::string16> > filters;
+ ofn.SetFilters(filters);
+ EXPECT_FALSE(ofn.Get()->lpstrFilter);
+ CheckFilters(filters, ui::win::OpenFileName::GetFilters(ofn.Get()));
+
+ filters.push_back(MakeTuple(base::string16(L"a"), base::string16(L"b")));
+ ofn.SetFilters(filters);
+ CheckFilterString(L"a" + kNull + L"b" + kNull, ofn);
+ CheckFilters(filters, ui::win::OpenFileName::GetFilters(ofn.Get()));
+
+ filters.push_back(MakeTuple(base::string16(L"X"), base::string16(L"Y")));
+ ofn.SetFilters(filters);
+ CheckFilterString(L"a" + kNull + L"b" + kNull + L"X" + kNull + L"Y" + kNull,
+ ofn);
+ CheckFilters(filters, ui::win::OpenFileName::GetFilters(ofn.Get()));
+}
+
+TEST(OpenFileNameTest, SetResult) {
+ const base::string16 kNull(L"\0", 1);
+
+ ui::win::OpenFileName ofn(kHwnd, kFlags);
+ base::FilePath directory;
+ std::vector<base::FilePath> filenames;
+
+ ui::win::OpenFileName::SetResult(directory, filenames, ofn.Get());
+ CheckResult(L"", ofn);
+
+ directory = base::FilePath(L"C:\\dir");
+ filenames.push_back(base::FilePath(L"file"));
+ ui::win::OpenFileName::SetResult(directory, filenames, ofn.Get());
+ CheckResult(L"C:\\dir\\file" + kNull, ofn);
+
+ filenames.push_back(base::FilePath(L"otherfile"));
+ ui::win::OpenFileName::SetResult(directory, filenames, ofn.Get());
+ CheckResult(L"C:\\dir" + kNull + L"file" + kNull + L"otherfile" + kNull, ofn);
+}

Powered by Google App Engine
This is Rietveld 408576698