1 // Copyright (c) 2011 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.
6 #include "base/bind_helpers.h"
7 #include "base/file_util.h"
8 #include "base/files/file_path.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/path_service.h"
11 #include "components/crx_file/id_util.h"
12 #include "content/public/test/test_browser_thread.h"
13 #include "extensions/browser/file_reader.h"
14 #include "extensions/common/extension_paths.h"
15 #include "extensions/common/extension_resource.h"
16 #include "testing/gtest/include/gtest/gtest.h"
18 using content::BrowserThread
;
20 namespace extensions
{
22 class FileReaderTest
: public testing::Test
{
24 FileReaderTest() : file_thread_(BrowserThread::FILE) {
28 base::MessageLoop message_loop_
;
29 content::TestBrowserThread file_thread_
;
34 Receiver() : succeeded_(false) {
37 FileReader::Callback
NewCallback() {
38 return base::Bind(&Receiver::DidReadFile
, base::Unretained(this));
41 bool succeeded() const { return succeeded_
; }
42 const std::string
& data() const { return data_
; }
45 void DidReadFile(bool success
, const std::string
& data
) {
48 base::MessageLoop::current()->Quit();
55 void RunBasicTest(const char* filename
) {
57 PathService::Get(DIR_TEST_DATA
, &path
);
58 std::string extension_id
= crx_file::id_util::GenerateId("test");
59 ExtensionResource
resource(
60 extension_id
, path
, base::FilePath().AppendASCII(filename
));
61 path
= path
.AppendASCII(filename
);
63 std::string file_contents
;
64 ASSERT_TRUE(base::ReadFileToString(path
, &file_contents
));
68 scoped_refptr
<FileReader
> file_reader(
69 new FileReader(resource
, receiver
.NewCallback()));
72 base::MessageLoop::current()->Run();
74 EXPECT_TRUE(receiver
.succeeded());
75 EXPECT_EQ(file_contents
, receiver
.data());
78 TEST_F(FileReaderTest
, SmallFile
) {
79 RunBasicTest("smallfile");
82 TEST_F(FileReaderTest
, BiggerFile
) {
83 RunBasicTest("bigfile");
86 TEST_F(FileReaderTest
, NonExistantFile
) {
88 PathService::Get(DIR_TEST_DATA
, &path
);
89 std::string extension_id
= crx_file::id_util::GenerateId("test");
90 ExtensionResource
resource(extension_id
, path
, base::FilePath(
91 FILE_PATH_LITERAL("file_that_does_not_exist")));
92 path
= path
.AppendASCII("file_that_does_not_exist");
96 scoped_refptr
<FileReader
> file_reader(
97 new FileReader(resource
, receiver
.NewCallback()));
100 base::MessageLoop::current()->Run();
102 EXPECT_FALSE(receiver
.succeeded());
105 } // namespace extensions