1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/shell_dialogs.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST(ShellDialogsWin, AppendExtensionIfNeeded) { 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick struct AppendExtensionTestCase { 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick wchar_t* filename; 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick wchar_t* filter_selected; 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick wchar_t* suggested_ext; 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick wchar_t* expected_filename; 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } test_cases[] = { 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Known extensions, with or without associated MIME types, should not get 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // an extension appended. 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"sample.html", L"*.txt", L"txt", L"sample.html" }, 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"sample.reg", L"*.txt", L"txt", L"sample.reg" }, 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // An unknown extension, or no extension, should get the default extension 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // appended. 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"sample.unknown", L"*.txt", L"txt", L"sample.unknown.txt" }, 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"sample", L"*.txt", L"txt", L"sample.txt" }, 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // ...unless the unknown and default extensions match. 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"sample.unknown", L"*.unknown", L"unknown", L"sample.unknown" }, 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The extension alone should be treated like a filename with no extension. 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"txt", L"*.txt", L"txt", L"txt.txt" }, 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Trailing dots should cause us to append an extension. 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"sample.txt.", L"*.txt", L"txt", L"sample.txt.txt" }, 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"...", L"*.txt", L"txt", L"...txt" }, 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // If the filter is changed to "All files", we allow any filename. 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { L"sample.unknown", L"*.*", L"", L"sample.unknown" }, 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick }; 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (size_t i = 0; i < arraysize(test_cases); ++i) { 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(std::wstring(test_cases[i].expected_filename), 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AppendExtensionIfNeeded(test_cases[i].filename, 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick test_cases[i].filter_selected, 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick test_cases[i].suggested_ext)); 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 45