TestFileSystemHandle.cpp (4591B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "FileSystemMocks.h" 8 #include "fs/FileSystemChildFactory.h" 9 #include "gtest/gtest.h" 10 #include "mozilla/dom/FileSystemDirectoryHandle.h" 11 #include "mozilla/dom/FileSystemFileHandle.h" 12 #include "mozilla/dom/FileSystemHandle.h" 13 #include "mozilla/dom/FileSystemHandleBinding.h" 14 #include "mozilla/dom/FileSystemManager.h" 15 #include "mozilla/dom/StorageManager.h" 16 #include "nsIGlobalObject.h" 17 18 namespace mozilla::dom::fs::test { 19 20 class TestFileSystemHandle : public ::testing::Test { 21 protected: 22 void SetUp() override { 23 // TODO: Fix the test to not depend on CreateFileSystemManagerParent 24 // failure because of the pref set to false. 25 nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); 26 prefs->SetBoolPref("dom.fs.enabled", false); 27 28 mDirMetadata = FileSystemEntryMetadata("dir"_ns, u"Directory"_ns, 29 /* directory */ true); 30 mFileMetadata = 31 FileSystemEntryMetadata("file"_ns, u"File"_ns, /* directory */ false); 32 mManager = MakeAndAddRef<FileSystemManager>(mGlobal, nullptr); 33 } 34 35 void TearDown() override { 36 nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); 37 prefs->SetBoolPref("dom.fs.enabled", true); 38 39 if (!mManager->IsShutdown()) { 40 mManager->Shutdown(); 41 } 42 } 43 44 nsIGlobalObject* mGlobal = GetGlobal(); 45 FileSystemEntryMetadata mDirMetadata; 46 FileSystemEntryMetadata mFileMetadata; 47 RefPtr<FileSystemManager> mManager; 48 }; 49 50 TEST_F(TestFileSystemHandle, createAndDestroyHandles) { 51 RefPtr<FileSystemHandle> dirHandle = 52 new FileSystemDirectoryHandle(mGlobal, mManager, mDirMetadata); 53 RefPtr<FileSystemHandle> fileHandle = 54 new FileSystemFileHandle(mGlobal, mManager, mFileMetadata); 55 56 EXPECT_TRUE(dirHandle); 57 EXPECT_TRUE(fileHandle); 58 } 59 60 TEST_F(TestFileSystemHandle, areFileNamesAsExpected) { 61 RefPtr<FileSystemHandle> dirHandle = 62 new FileSystemDirectoryHandle(mGlobal, mManager, mDirMetadata); 63 RefPtr<FileSystemHandle> fileHandle = 64 new FileSystemFileHandle(mGlobal, mManager, mFileMetadata); 65 66 auto GetEntryName = [](const RefPtr<FileSystemHandle>& aHandle) { 67 DOMString domName; 68 aHandle->GetName(domName); 69 nsString result; 70 domName.ToString(result); 71 return result; 72 }; 73 74 const nsString& dirName = GetEntryName(dirHandle); 75 EXPECT_TRUE(mDirMetadata.entryName().Equals(dirName)); 76 77 const nsString& fileName = GetEntryName(fileHandle); 78 EXPECT_TRUE(mFileMetadata.entryName().Equals(fileName)); 79 } 80 81 TEST_F(TestFileSystemHandle, isParentObjectReturned) { 82 ASSERT_TRUE(mGlobal); 83 RefPtr<FileSystemHandle> dirHandle = 84 new FileSystemDirectoryHandle(mGlobal, mManager, mDirMetadata); 85 86 ASSERT_EQ(mGlobal, dirHandle->GetParentObject()); 87 } 88 89 TEST_F(TestFileSystemHandle, areHandleKindsAsExpected) { 90 RefPtr<FileSystemHandle> dirHandle = 91 new FileSystemDirectoryHandle(mGlobal, mManager, mDirMetadata); 92 RefPtr<FileSystemHandle> fileHandle = 93 new FileSystemFileHandle(mGlobal, mManager, mFileMetadata); 94 95 EXPECT_EQ(FileSystemHandleKind::Directory, dirHandle->Kind()); 96 EXPECT_EQ(FileSystemHandleKind::File, fileHandle->Kind()); 97 } 98 99 TEST_F(TestFileSystemHandle, isDifferentEntry) { 100 RefPtr<FileSystemHandle> dirHandle = 101 new FileSystemDirectoryHandle(mGlobal, mManager, mDirMetadata); 102 RefPtr<FileSystemHandle> fileHandle = 103 new FileSystemFileHandle(mGlobal, mManager, mFileMetadata); 104 105 IgnoredErrorResult rv; 106 RefPtr<Promise> promise = dirHandle->IsSameEntry(*fileHandle, rv); 107 ASSERT_TRUE(rv.ErrorCodeIs(NS_OK)); 108 ASSERT_TRUE(promise); 109 ASSERT_EQ(Promise::PromiseState::Resolved, promise->State()); 110 111 nsString result; 112 ASSERT_NSEQ(NS_OK, GetAsString(promise, result)); 113 ASSERT_STREQ(u"false"_ns, result); 114 } 115 116 TEST_F(TestFileSystemHandle, isSameEntry) { 117 RefPtr<FileSystemHandle> fileHandle = 118 new FileSystemFileHandle(mGlobal, mManager, mFileMetadata); 119 120 IgnoredErrorResult rv; 121 RefPtr<Promise> promise = fileHandle->IsSameEntry(*fileHandle, rv); 122 ASSERT_TRUE(rv.ErrorCodeIs(NS_OK)); 123 ASSERT_TRUE(promise); 124 ASSERT_EQ(Promise::PromiseState::Resolved, promise->State()); 125 126 nsString result; 127 ASSERT_NSEQ(NS_OK, GetAsString(promise, result)); 128 ASSERT_STREQ(u"true"_ns, result); 129 } 130 131 } // namespace mozilla::dom::fs::test