| Index: chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
|
| diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
|
| index e5a677d47cebfbb129a6ff6a2b9848bacb2d4ae3..7919b209628077cfda042bde3083475fb682a633 100644
|
| --- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
|
| +++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
|
| @@ -13,23 +13,28 @@
|
| #include "base/run_loop.h"
|
| #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h"
|
| #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h"
|
| +#include "chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h"
|
| #include "components/arc/arc_bridge_service.h"
|
| #include "components/arc/arc_service_manager.h"
|
| -#include "components/arc/file_system/test/fake_arc_file_system_operation_runner.h"
|
| +#include "components/arc/test/fake_file_system_instance.h"
|
| #include "content/public/test/test_browser_thread_bundle.h"
|
| #include "storage/common/fileapi/directory_entry.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "url/gurl.h"
|
|
|
| using storage::DirectoryEntry;
|
| +using Document = arc::FakeFileSystemInstance::Document;
|
| using EntryList = storage::AsyncFileUtil::EntryList;
|
|
|
| namespace arc {
|
|
|
| namespace {
|
|
|
| +// Simliar as FakeFileSystemInstance::Document, but all fields are primitives
|
| +// so that values can be constexpr.
|
| struct DocumentSpec {
|
| const char* document_id;
|
| + const char* parent_document_id;
|
| const char* display_name;
|
| const char* mime_type;
|
| int64_t size;
|
| @@ -49,86 +54,42 @@ struct DocumentSpec {
|
| // dup.mp4 video/mp4 dup3-id
|
| // dup.mp4 video/mp4 dup4-id
|
| constexpr char kAuthority[] = "org.chromium.test";
|
| -// NOTE: ArcDocumentsProviderRoot::GetFileInfo() returns hard-coded info
|
| -// for root documents.
|
| -constexpr DocumentSpec kRootSpec = {"root-id", nullptr /* not used */,
|
| - kAndroidDirectoryMimeType, -1, 0};
|
| -constexpr DocumentSpec kDirSpec = {"dir-id", "dir", kAndroidDirectoryMimeType,
|
| - -1, 22};
|
| -constexpr DocumentSpec kPhotoSpec = {"photo-id", "photo.jpg", "image/jpeg", 3,
|
| - 33};
|
| -constexpr DocumentSpec kMusicSpec = {"music-id", "music.bin", "audio/mp3", 4,
|
| - 44};
|
| -constexpr DocumentSpec kDupsSpec = {"dups-id", "dups",
|
| - kAndroidDirectoryMimeType, -1, 55};
|
| -constexpr DocumentSpec kDup1Spec = {"dup1-id", "dup.mp4", "video/mp4", 6, 66};
|
| -constexpr DocumentSpec kDup2Spec = {"dup2-id", "dup.mp4", "video/mp4", 7, 77};
|
| -constexpr DocumentSpec kDup3Spec = {"dup3-id", "dup.mp4", "video/mp4", 8, 88};
|
| -constexpr DocumentSpec kDup4Spec = {"dup4-id", "dup.mp4", "video/mp4", 9, 99};
|
| +constexpr DocumentSpec kRootSpec{"root-id", "", "", kAndroidDirectoryMimeType,
|
| + -1, 0};
|
| +constexpr DocumentSpec kDirSpec{
|
| + "dir-id", kRootSpec.document_id, "dir", kAndroidDirectoryMimeType, -1, 22};
|
| +constexpr DocumentSpec kPhotoSpec{
|
| + "photo-id", kDirSpec.document_id, "photo.jpg", "image/jpeg", 3, 33};
|
| +constexpr DocumentSpec kMusicSpec{
|
| + "music-id", kDirSpec.document_id, "music.bin", "audio/mp3", 4, 44};
|
| +constexpr DocumentSpec kDupsSpec{"dups-id", kRootSpec.document_id,
|
| + "dups", kAndroidDirectoryMimeType,
|
| + -1, 55};
|
| +constexpr DocumentSpec kDup1Spec{
|
| + "dup1-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 6, 66};
|
| +constexpr DocumentSpec kDup2Spec{
|
| + "dup2-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 7, 77};
|
| +constexpr DocumentSpec kDup3Spec{
|
| + "dup3-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 8, 88};
|
| +constexpr DocumentSpec kDup4Spec{
|
| + "dup4-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 9, 99};
|
| +
|
| +// The order is intentionally shuffled here so that
|
| +// FileSystemInstance::GetChildDocuments() returns documents in shuffled order.
|
| +// See ResolveToContentUrlDups test below.
|
| constexpr DocumentSpec kAllSpecs[] = {kRootSpec, kDirSpec, kPhotoSpec,
|
| - kMusicSpec, kDupsSpec, kDup1Spec,
|
| - kDup2Spec, kDup3Spec, kDup4Spec};
|
| -
|
| -mojom::DocumentPtr MakeDocument(const DocumentSpec& spec) {
|
| - mojom::DocumentPtr document = mojom::Document::New();
|
| - document->document_id = spec.document_id;
|
| - document->display_name = spec.display_name;
|
| - document->mime_type = spec.mime_type;
|
| - document->size = spec.size;
|
| - document->last_modified = spec.last_modified;
|
| - return document;
|
| -}
|
| -
|
| -// TODO(crbug.com/683049): Use a generic FakeArcFileSystemOperationRunner.
|
| -class ArcFileSystemOperationRunnerForTest
|
| - : public FakeArcFileSystemOperationRunner {
|
| - public:
|
| - explicit ArcFileSystemOperationRunnerForTest(ArcBridgeService* bridge_service)
|
| - : FakeArcFileSystemOperationRunner(bridge_service) {}
|
| - ~ArcFileSystemOperationRunnerForTest() override = default;
|
| -
|
| - void GetChildDocuments(const std::string& authority,
|
| - const std::string& document_id,
|
| - const GetChildDocumentsCallback& callback) override {
|
| - EXPECT_EQ(kAuthority, authority);
|
| - base::Optional<std::vector<mojom::DocumentPtr>> result;
|
| - if (document_id == kRootSpec.document_id) {
|
| - result.emplace();
|
| - result.value().emplace_back(MakeDocument(kDirSpec));
|
| - result.value().emplace_back(MakeDocument(kDupsSpec));
|
| - } else if (document_id == kDirSpec.document_id) {
|
| - result.emplace();
|
| - result.value().emplace_back(MakeDocument(kPhotoSpec));
|
| - result.value().emplace_back(MakeDocument(kMusicSpec));
|
| - } else if (document_id == kDupsSpec.document_id) {
|
| - result.emplace();
|
| - // The order is intentionally shuffled.
|
| - result.value().emplace_back(MakeDocument(kDup2Spec));
|
| - result.value().emplace_back(MakeDocument(kDup1Spec));
|
| - result.value().emplace_back(MakeDocument(kDup4Spec));
|
| - result.value().emplace_back(MakeDocument(kDup3Spec));
|
| - }
|
| - callback.Run(std::move(result));
|
| - }
|
| + kMusicSpec, kDupsSpec, kDup2Spec,
|
| + kDup1Spec, kDup4Spec, kDup3Spec};
|
|
|
| - void GetDocument(const std::string& authority,
|
| - const std::string& document_id,
|
| - const GetDocumentCallback& callback) override {
|
| - EXPECT_EQ(kAuthority, authority);
|
| - mojom::DocumentPtr result;
|
| - for (const auto& spec : kAllSpecs) {
|
| - if (document_id == spec.document_id) {
|
| - result = MakeDocument(spec);
|
| - break;
|
| - }
|
| - }
|
| - callback.Run(std::move(result));
|
| - }
|
| -};
|
| +Document ToDocument(const DocumentSpec& spec) {
|
| + return Document(kAuthority, spec.document_id, spec.parent_document_id,
|
| + spec.display_name, spec.mime_type, spec.size,
|
| + spec.last_modified);
|
| +}
|
|
|
| void ExpectMatchesSpec(const base::File::Info& info, const DocumentSpec& spec) {
|
| EXPECT_EQ(spec.size, info.size);
|
| - if (strcmp(spec.mime_type, kAndroidDirectoryMimeType) == 0) {
|
| + if (spec.mime_type == kAndroidDirectoryMimeType) {
|
| EXPECT_TRUE(info.is_directory);
|
| } else {
|
| EXPECT_FALSE(info.is_directory);
|
| @@ -144,20 +105,28 @@ void ExpectMatchesSpec(const base::File::Info& info, const DocumentSpec& spec) {
|
|
|
| class ArcDocumentsProviderRootTest : public testing::Test {
|
| public:
|
| - ArcDocumentsProviderRootTest()
|
| - : arc_service_manager_(base::MakeUnique<ArcServiceManager>(nullptr)),
|
| - root_(
|
| - base::MakeUnique<ArcDocumentsProviderRoot>(kAuthority,
|
| - kRootSpec.document_id)) {
|
| + ArcDocumentsProviderRootTest() = default;
|
| + ~ArcDocumentsProviderRootTest() override = default;
|
| +
|
| + void SetUp() override {
|
| + for (auto spec : kAllSpecs) {
|
| + fake_file_system_.AddDocument(ToDocument(spec));
|
| + }
|
| +
|
| + arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr);
|
| arc_service_manager_->AddService(
|
| - base::MakeUnique<ArcFileSystemOperationRunnerForTest>(
|
| + ArcFileSystemOperationRunner::CreateForTesting(
|
| arc_service_manager_->arc_bridge_service()));
|
| - }
|
| + arc_service_manager_->arc_bridge_service()->file_system()->SetInstance(
|
| + &fake_file_system_);
|
|
|
| - ~ArcDocumentsProviderRootTest() override = default;
|
| + root_ = base::MakeUnique<ArcDocumentsProviderRoot>(kAuthority,
|
| + kRootSpec.document_id);
|
| + }
|
|
|
| protected:
|
| content::TestBrowserThreadBundle thread_bundle_;
|
| + FakeFileSystemInstance fake_file_system_;
|
| std::unique_ptr<ArcServiceManager> arc_service_manager_;
|
| std::unique_ptr<ArcDocumentsProviderRoot> root_;
|
|
|
| @@ -302,7 +271,7 @@ TEST_F(ArcDocumentsProviderRootTest, ReadDirectoryDups) {
|
| const EntryList& file_list, bool has_more) {
|
| EXPECT_EQ(base::File::FILE_OK, error);
|
| ASSERT_EQ(4u, file_list.size());
|
| - // FiIles are sorted lexicographically.
|
| + // Files are sorted lexicographically.
|
| EXPECT_EQ(FILE_PATH_LITERAL("dup (1).mp4"), file_list[0].name);
|
| EXPECT_FALSE(file_list[0].is_directory);
|
| EXPECT_EQ(FILE_PATH_LITERAL("dup (2).mp4"), file_list[1].name);
|
|
|