Home | History | Annotate | Download | only in base
      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