Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2009 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/callback.h"
      6 #include "base/file_path.h"
      7 #include "base/file_util.h"
      8 #include "base/message_loop.h"
      9 #include "base/path_service.h"
     10 #include "chrome/browser/extensions/file_reader.h"
     11 #include "chrome/common/chrome_paths.h"
     12 #include "chrome/common/extensions/extension.h"
     13 #include "chrome/common/extensions/extension_resource.h"
     14 #include "content/browser/browser_thread.h"
     15 #include "testing/gtest/include/gtest/gtest.h"
     16 
     17 namespace {
     18 
     19 class FileReaderTest : public testing::Test {
     20  public:
     21   FileReaderTest() : file_thread_(BrowserThread::FILE) {
     22     file_thread_.Start();
     23   }
     24  private:
     25   MessageLoop message_loop_;
     26   BrowserThread file_thread_;
     27 };
     28 
     29 class Receiver {
     30  public:
     31   Receiver() : succeeded_(false) {
     32   }
     33 
     34   FileReader::Callback* NewCallback() {
     35     return ::NewCallback(this, &Receiver::DidReadFile);
     36   }
     37 
     38   bool succeeded() const { return succeeded_; }
     39   const std::string& data() const { return data_; }
     40 
     41  private:
     42   void DidReadFile(bool success, const std::string& data) {
     43     succeeded_ = success;
     44     data_ = data;
     45     MessageLoop::current()->Quit();
     46   }
     47 
     48   bool succeeded_;
     49   std::string data_;
     50 };
     51 
     52 void RunBasicTest(const char* filename) {
     53   FilePath path;
     54   PathService::Get(chrome::DIR_TEST_DATA, &path);
     55   std::string extension_id;
     56   Extension::GenerateId("test", &extension_id);
     57   ExtensionResource resource(extension_id, path,
     58                              FilePath().AppendASCII(filename));
     59   path = path.AppendASCII(filename);
     60 
     61   std::string file_contents;
     62   bool file_exists = file_util::ReadFileToString(path, &file_contents);
     63 
     64   Receiver receiver;
     65 
     66   scoped_refptr<FileReader> file_reader(
     67       new FileReader(resource, receiver.NewCallback()));
     68   file_reader->Start();
     69 
     70   MessageLoop::current()->Run();
     71 
     72   EXPECT_EQ(file_exists, receiver.succeeded());
     73   EXPECT_EQ(file_contents, receiver.data());
     74 }
     75 
     76 TEST_F(FileReaderTest, SmallFile) {
     77   RunBasicTest("title1.html");
     78 }
     79 
     80 TEST_F(FileReaderTest, BiggerFile) {
     81   RunBasicTest("download-test1.lib");
     82 }
     83 
     84 TEST_F(FileReaderTest, NonExistantFile) {
     85   FilePath path;
     86   PathService::Get(chrome::DIR_TEST_DATA, &path);
     87   std::string extension_id;
     88   Extension::GenerateId("test", &extension_id);
     89   ExtensionResource resource(extension_id, path, FilePath(
     90       FILE_PATH_LITERAL("file_that_does_not_exist")));
     91   path = path.AppendASCII("file_that_does_not_exist");
     92 
     93   Receiver receiver;
     94 
     95   scoped_refptr<FileReader> file_reader(
     96       new FileReader(resource, receiver.NewCallback()));
     97   file_reader->Start();
     98 
     99   MessageLoop::current()->Run();
    100 
    101   EXPECT_FALSE(receiver.succeeded());
    102 }
    103 
    104 }  // namespace
    105