1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/file_path.h" 6 #include "base/file_util.h" 7 #include "base/i18n/file_util_icu.h" 8 #include "base/message_loop.h" 9 #include "base/path_service.h" 10 #include "net/base/directory_lister.h" 11 #include "net/base/net_errors.h" 12 #include "testing/gtest/include/gtest/gtest.h" 13 14 namespace { 15 class DirectoryListerTest : public testing::Test {}; 16 } 17 18 class ListerDelegate : public net::DirectoryLister::DirectoryListerDelegate { 19 public: 20 ListerDelegate() : error_(-1) { 21 } 22 void OnListFile(const file_util::FileEnumerator::FindInfo& data) { 23 file_list_.push_back(data); 24 } 25 void OnListDone(int error) { 26 error_ = error; 27 MessageLoop::current()->Quit(); 28 // Check that we got files in the right order. 29 if (!file_list_.empty()) { 30 for (size_t previous = 0, current = 1; 31 current < file_list_.size(); 32 previous++, current++) { 33 // Directories should come before files. 34 if (file_util::FileEnumerator::IsDirectory(file_list_[previous]) && 35 !file_util::FileEnumerator::IsDirectory(file_list_[current])) { 36 continue; 37 } 38 EXPECT_EQ(file_util::FileEnumerator::IsDirectory(file_list_[previous]), 39 file_util::FileEnumerator::IsDirectory(file_list_[current])); 40 #if defined(OS_WIN) 41 EXPECT_TRUE(file_util::LocaleAwareCompareFilenames( 42 FilePath(file_list_[previous].cFileName), 43 FilePath(file_list_[current].cFileName))); 44 #elif defined(OS_POSIX) 45 EXPECT_TRUE(file_util::LocaleAwareCompareFilenames( 46 FilePath(file_list_[previous].filename), 47 FilePath(file_list_[current].filename))); 48 #endif 49 } 50 } 51 } 52 int error() const { return error_; } 53 private: 54 int error_; 55 std::vector<file_util::FileEnumerator::FindInfo> file_list_; 56 }; 57 58 TEST(DirectoryListerTest, BigDirTest) { 59 FilePath path; 60 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &path)); 61 62 ListerDelegate delegate; 63 scoped_refptr<net::DirectoryLister> lister = 64 new net::DirectoryLister(path, &delegate); 65 66 lister->Start(); 67 68 MessageLoop::current()->Run(); 69 70 EXPECT_EQ(delegate.error(), net::OK); 71 } 72 73 TEST(DirectoryListerTest, CancelTest) { 74 FilePath path; 75 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &path)); 76 77 ListerDelegate delegate; 78 scoped_refptr<net::DirectoryLister> lister = 79 new net::DirectoryLister(path, &delegate); 80 81 lister->Start(); 82 lister->Cancel(); 83 84 MessageLoop::current()->Run(); 85 86 EXPECT_EQ(delegate.error(), net::ERR_ABORTED); 87 } 88