TestFileSystemFileHandle.cpp (4784B)
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/UniquePtr.h" 11 #include "mozilla/dom/FileSystemFileHandle.h" 12 #include "mozilla/dom/FileSystemFileHandleBinding.h" 13 #include "mozilla/dom/FileSystemHandle.h" 14 #include "mozilla/dom/FileSystemHandleBinding.h" 15 #include "mozilla/dom/FileSystemManager.h" 16 #include "mozilla/dom/Promise.h" 17 #include "mozilla/dom/StorageManager.h" 18 #include "nsIGlobalObject.h" 19 20 namespace mozilla::dom::fs::test { 21 22 class TestFileSystemFileHandle : public ::testing::Test { 23 protected: 24 void SetUp() override { 25 // TODO: Fix the test to not depend on CreateFileSystemManagerParent 26 // failure because of the pref set to false. 27 nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); 28 prefs->SetBoolPref("dom.fs.enabled", false); 29 30 mRequestHandler = MakeUnique<MockFileSystemRequestHandler>(); 31 mMetadata = 32 FileSystemEntryMetadata("file"_ns, u"File"_ns, /* directory */ false); 33 mManager = MakeAndAddRef<FileSystemManager>(mGlobal, nullptr); 34 } 35 36 void TearDown() override { 37 nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); 38 prefs->SetBoolPref("dom.fs.enabled", true); 39 40 if (!mManager->IsShutdown()) { 41 mManager->Shutdown(); 42 } 43 } 44 45 nsIGlobalObject* mGlobal = GetGlobal(); 46 UniquePtr<MockFileSystemRequestHandler> mRequestHandler; 47 FileSystemEntryMetadata mMetadata; 48 RefPtr<FileSystemManager> mManager; 49 }; 50 51 TEST_F(TestFileSystemFileHandle, constructFileHandleRefPointer) { 52 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 53 mGlobal, mManager, mMetadata, mRequestHandler.release()); 54 55 ASSERT_TRUE(fileHandle); 56 } 57 58 TEST_F(TestFileSystemFileHandle, isHandleKindFile) { 59 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 60 mGlobal, mManager, mMetadata, mRequestHandler.release()); 61 62 ASSERT_TRUE(fileHandle); 63 64 ASSERT_EQ(FileSystemHandleKind::File, fileHandle->Kind()); 65 } 66 67 TEST_F(TestFileSystemFileHandle, isFileReturned) { 68 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 69 mGlobal, mManager, mMetadata, mRequestHandler.release()); 70 71 ASSERT_TRUE(fileHandle); 72 73 IgnoredErrorResult rv; 74 RefPtr<Promise> promise = fileHandle->GetFile(rv); 75 76 ASSERT_TRUE(rv.ErrorCodeIs(NS_OK)); 77 } 78 79 TEST_F(TestFileSystemFileHandle, doesGetFileFailOnNullGlobal) { 80 mGlobal = nullptr; 81 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 82 mGlobal, mManager, mMetadata, mRequestHandler.release()); 83 84 ASSERT_TRUE(fileHandle); 85 86 IgnoredErrorResult rv; 87 RefPtr<Promise> promise = fileHandle->GetFile(rv); 88 89 ASSERT_TRUE(rv.ErrorCodeIs(NS_ERROR_UNEXPECTED)); 90 } 91 92 TEST_F(TestFileSystemFileHandle, isWritableReturned) { 93 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 94 mGlobal, mManager, mMetadata, mRequestHandler.release()); 95 96 ASSERT_TRUE(fileHandle); 97 98 FileSystemCreateWritableOptions options; 99 IgnoredErrorResult rv; 100 RefPtr<Promise> promise = fileHandle->CreateWritable(options, rv); 101 102 ASSERT_TRUE(rv.ErrorCodeIs(NS_OK)); 103 } 104 105 TEST_F(TestFileSystemFileHandle, doesCreateWritableFailOnNullGlobal) { 106 mGlobal = nullptr; 107 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 108 mGlobal, mManager, mMetadata, mRequestHandler.release()); 109 110 ASSERT_TRUE(fileHandle); 111 112 FileSystemCreateWritableOptions options; 113 IgnoredErrorResult rv; 114 RefPtr<Promise> promise = fileHandle->CreateWritable(options, rv); 115 116 ASSERT_TRUE(rv.ErrorCodeIs(NS_ERROR_UNEXPECTED)); 117 } 118 119 TEST_F(TestFileSystemFileHandle, isSyncAccessHandleReturned) { 120 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 121 mGlobal, mManager, mMetadata, mRequestHandler.release()); 122 123 ASSERT_TRUE(fileHandle); 124 125 IgnoredErrorResult rv; 126 RefPtr<Promise> promise = fileHandle->CreateSyncAccessHandle(rv); 127 128 ASSERT_TRUE(rv.ErrorCodeIs(NS_OK)); 129 } 130 131 TEST_F(TestFileSystemFileHandle, doesCreateSyncAccessHandleFailOnNullGlobal) { 132 mGlobal = nullptr; 133 RefPtr<FileSystemFileHandle> fileHandle = MakeAndAddRef<FileSystemFileHandle>( 134 mGlobal, mManager, mMetadata, mRequestHandler.release()); 135 136 ASSERT_TRUE(fileHandle); 137 138 IgnoredErrorResult rv; 139 RefPtr<Promise> promise = fileHandle->CreateSyncAccessHandle(rv); 140 141 ASSERT_TRUE(rv.ErrorCodeIs(NS_ERROR_UNEXPECTED)); 142 } 143 144 } // namespace mozilla::dom::fs::test