2016-11-04 09:00:47 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#include "prio.h"
|
|
|
|
#include "prsystem.h"
|
|
|
|
|
|
|
|
#include "nsIFile.h"
|
|
|
|
#include "nsDirectoryServiceDefs.h"
|
|
|
|
#include "nsDirectoryServiceUtils.h"
|
|
|
|
|
2016-11-05 02:22:43 +03:00
|
|
|
#include "gtest/gtest.h"
|
2016-11-04 09:00:47 +03:00
|
|
|
|
|
|
|
static bool VerifyResult(nsresult aRV, const char* aMsg)
|
|
|
|
{
|
2016-11-05 02:22:43 +03:00
|
|
|
bool failed = NS_FAILED(aRV);
|
|
|
|
EXPECT_FALSE(failed) << aMsg << " rv=" << std::hex << (unsigned int)aRV;
|
|
|
|
return !failed;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
static already_AddRefed<nsIFile> NewFile(nsIFile* aBase)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsresult rv;
|
|
|
|
nsCOMPtr<nsIFile> file =
|
|
|
|
do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
|
|
|
|
VerifyResult(rv, "Creating nsIFile");
|
|
|
|
rv = file->InitWithFile(aBase);
|
|
|
|
VerifyResult(rv, "InitWithFile");
|
|
|
|
return file.forget();
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
static nsCString FixName(const char* aName)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCString name;
|
|
|
|
for (uint32_t i = 0; aName[i]; ++i) {
|
|
|
|
char ch = aName[i];
|
|
|
|
// PR_GetPathSeparator returns the wrong value on Mac so don't use it
|
2016-11-04 09:00:47 +03:00
|
|
|
#if defined(XP_WIN)
|
2016-11-05 02:22:41 +03:00
|
|
|
if (ch == '/') {
|
|
|
|
ch = '\\';
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
2016-11-05 02:22:41 +03:00
|
|
|
#endif
|
|
|
|
name.Append(ch);
|
|
|
|
}
|
|
|
|
return name;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::AppendNative, verifying that aName is not a valid file name
|
|
|
|
static bool TestInvalidFileName(nsIFile* aBase, const char* aName)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aBase);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCString name = FixName(aName);
|
|
|
|
nsresult rv = file->AppendNative(name);
|
|
|
|
if (NS_SUCCEEDED(rv)) {
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_FALSE(NS_SUCCEEDED(rv)) << "AppendNative with invalid filename " << name.get();
|
2016-11-05 02:22:41 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::Create, verifying that the file exists and did not exist before,
|
|
|
|
// and leaving it there for future tests
|
|
|
|
static bool TestCreate(nsIFile* aBase, const char* aName, int32_t aType, int32_t aPerm)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aBase);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCString name = FixName(aName);
|
|
|
|
nsresult rv = file->AppendNative(name);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
bool exists;
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (before)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_FALSE(exists) << "File "<< name.get() << " already exists";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = file->Create(aType, aPerm);
|
|
|
|
if (!VerifyResult(rv, "Create"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(exists) << "File " << name.get() << " was not created";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::CreateUnique, verifying that the new file exists and if it existed before,
|
|
|
|
// the new file has a different name.
|
|
|
|
// The new file is left in place.
|
|
|
|
static bool TestCreateUnique(nsIFile* aBase, const char* aName, int32_t aType, int32_t aPerm)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aBase);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCString name = FixName(aName);
|
|
|
|
nsresult rv = file->AppendNative(name);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
bool existsBefore;
|
|
|
|
rv = file->Exists(&existsBefore);
|
|
|
|
if (!VerifyResult(rv, "Exists (before)"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
rv = file->CreateUnique(aType, aPerm);
|
|
|
|
if (!VerifyResult(rv, "Create"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
bool existsAfter;
|
|
|
|
rv = file->Exists(&existsAfter);
|
|
|
|
if (!VerifyResult(rv, "Exists (after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(existsAfter) << "File " << name.get() << " was not created";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!existsAfter) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (existsBefore) {
|
|
|
|
nsAutoCString leafName;
|
|
|
|
rv = file->GetNativeLeafName(leafName);
|
|
|
|
if (!VerifyResult(rv, "GetNativeLeafName"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_FALSE(leafName.Equals(name)) << "File " << name.get() << " was not given a new name by CreateUnique";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (leafName.Equals(name)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::OpenNSPRFileDesc with DELETE_ON_CLOSE, verifying that the file exists
|
|
|
|
// and did not exist before, and leaving it there for future tests
|
|
|
|
static bool TestDeleteOnClose(nsIFile* aBase, const char* aName, int32_t aFlags, int32_t aPerm)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aBase);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCString name = FixName(aName);
|
|
|
|
nsresult rv = file->AppendNative(name);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
bool exists;
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (before)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_FALSE(exists) << "File " << name.get() << " already exists";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
PRFileDesc* fileDesc;
|
|
|
|
rv = file->OpenNSPRFileDesc(aFlags | nsIFile::DELETE_ON_CLOSE, aPerm, &fileDesc);
|
|
|
|
if (!VerifyResult(rv, "OpenNSPRFileDesc"))
|
|
|
|
return false;
|
|
|
|
PRStatus status = PR_Close(fileDesc);
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_EQ(status, PR_SUCCESS) << "File " << name.get() << " could not be closed";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (status != PR_SUCCESS) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_FALSE(exists) << "File " << name.get() << " was not removed on close";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::Remove, verifying that the file does not exist and did before
|
|
|
|
static bool TestRemove(nsIFile* aBase, const char* aName, bool aRecursive)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aBase);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCString name = FixName(aName);
|
|
|
|
nsresult rv = file->AppendNative(name);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
bool exists;
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (before)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(exists);
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = file->Remove(aRecursive);
|
|
|
|
if (!VerifyResult(rv, "Remove"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_FALSE(exists) << "File " << name.get() << " was not removed";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::MoveToNative, verifying that the file did not exist at the new location
|
|
|
|
// before and does afterward, and that it does not exist at the old location anymore
|
|
|
|
static bool TestMove(nsIFile* aBase, nsIFile* aDestDir, const char* aName, const char* aNewName)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aBase);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCString name = FixName(aName);
|
|
|
|
nsresult rv = file->AppendNative(name);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
bool exists;
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (before)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(exists);
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIFile> newFile = NewFile(file);
|
|
|
|
nsCString newName = FixName(aNewName);
|
|
|
|
rv = newFile->MoveToNative(aDestDir, newName);
|
|
|
|
if (!VerifyResult(rv, "MoveToNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_FALSE(exists) << "File " << name.get() << " was not moved";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
file = NewFile(aDestDir);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
rv = file->AppendNative(newName);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
bool equal;
|
|
|
|
rv = file->Equals(newFile, &equal);
|
|
|
|
if (!VerifyResult(rv, "Equals"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(equal) << "File object was not updated to destination";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!equal) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (new after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(exists) << "Destination file " << newName.get() << " was not created";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::CopyToNative, verifying that the file did not exist at the new location
|
|
|
|
// before and does afterward, and that it does exist at the old location too
|
|
|
|
static bool TestCopy(nsIFile* aBase, nsIFile* aDestDir, const char* aName, const char* aNewName)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aBase);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCString name = FixName(aName);
|
|
|
|
nsresult rv = file->AppendNative(name);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
bool exists;
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (before)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(exists);
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIFile> newFile = NewFile(file);
|
|
|
|
nsCString newName = FixName(aNewName);
|
|
|
|
rv = newFile->CopyToNative(aDestDir, newName);
|
|
|
|
if (!VerifyResult(rv, "MoveToNative"))
|
|
|
|
return false;
|
|
|
|
bool equal;
|
|
|
|
rv = file->Equals(newFile, &equal);
|
|
|
|
if (!VerifyResult(rv, "Equals"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(equal) << "File object updated unexpectedly";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!equal) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(exists) << "File " << name.get() << " was removed";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
file = NewFile(aDestDir);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
rv = file->AppendNative(newName);
|
|
|
|
if (!VerifyResult(rv, "AppendNative"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
rv = file->Exists(&exists);
|
|
|
|
if (!VerifyResult(rv, "Exists (new after)"))
|
|
|
|
return false;
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(exists) << "Destination file " << newName.get() << " was not created";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!exists) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::GetParent
|
|
|
|
static bool TestParent(nsIFile* aBase, nsIFile* aStart)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aStart);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIFile> parent;
|
|
|
|
nsresult rv = file->GetParent(getter_AddRefs(parent));
|
|
|
|
VerifyResult(rv, "GetParent");
|
|
|
|
|
|
|
|
bool equal;
|
|
|
|
rv = parent->Equals(aBase, &equal);
|
|
|
|
VerifyResult(rv, "Equals");
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(equal) << "Incorrect parent";
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!equal) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Test nsIFile::Normalize and native path setting/getting
|
|
|
|
static bool TestNormalizeNativePath(nsIFile* aBase, nsIFile* aStart)
|
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> file = NewFile(aStart);
|
|
|
|
if (!file)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nsAutoCString path;
|
|
|
|
nsresult rv = file->GetNativePath(path);
|
|
|
|
VerifyResult(rv, "GetNativePath");
|
|
|
|
path.Append(FixName("/./.."));
|
|
|
|
rv = file->InitWithNativePath(path);
|
|
|
|
VerifyResult(rv, "InitWithNativePath");
|
|
|
|
rv = file->Normalize();
|
|
|
|
VerifyResult(rv, "Normalize");
|
|
|
|
rv = file->GetNativePath(path);
|
|
|
|
VerifyResult(rv, "GetNativePath (after normalization)");
|
|
|
|
|
|
|
|
nsAutoCString basePath;
|
|
|
|
rv = aBase->GetNativePath(basePath);
|
|
|
|
VerifyResult(rv, "GetNativePath (base)");
|
|
|
|
|
2016-11-05 02:22:43 +03:00
|
|
|
EXPECT_TRUE(path.Equals(basePath)) << "Incorrect normalization: " << path.get() << " - " << basePath.get();
|
2016-11-05 02:22:41 +03:00
|
|
|
if (!path.Equals(basePath)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|
|
|
|
|
2016-11-05 02:22:43 +03:00
|
|
|
TEST(TestFile, Tests)
|
2016-11-04 09:00:47 +03:00
|
|
|
{
|
2016-11-05 02:22:41 +03:00
|
|
|
nsCOMPtr<nsIFile> base;
|
|
|
|
nsresult rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(base));
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(VerifyResult(rv, "Getting temp directory"));
|
|
|
|
|
2016-11-05 02:22:41 +03:00
|
|
|
rv = base->AppendNative(nsDependentCString("mozfiletests"));
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(VerifyResult(rv, "Appending mozfiletests to temp directory name"));
|
|
|
|
|
2016-11-05 02:22:41 +03:00
|
|
|
// Remove the directory in case tests failed and left it behind.
|
|
|
|
// don't check result since it might not be there
|
|
|
|
base->Remove(true);
|
|
|
|
|
|
|
|
// Now create the working directory we're going to use
|
|
|
|
rv = base->Create(nsIFile::DIRECTORY_TYPE, 0700);
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(VerifyResult(rv, "Creating temp directory"));
|
|
|
|
|
2016-11-05 02:22:41 +03:00
|
|
|
// Now we can safely normalize the path
|
|
|
|
rv = base->Normalize();
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(VerifyResult(rv, "Normalizing temp directory name"));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Initialize subdir object for later use
|
|
|
|
nsCOMPtr<nsIFile> subdir = NewFile(base);
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(subdir);
|
|
|
|
|
2016-11-05 02:22:41 +03:00
|
|
|
rv = subdir->AppendNative(nsDependentCString("subdir"));
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(VerifyResult(rv, "Appending 'subdir' to test dir name"));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
2016-11-05 02:22:43 +03:00
|
|
|
// ---------------
|
|
|
|
// End setup code.
|
|
|
|
// ---------------
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Test path parsing
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestInvalidFileName(base, "a/b"));
|
|
|
|
ASSERT_TRUE(TestParent(base, subdir));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Test file creation
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestCreate(base, "file.txt", nsIFile::NORMAL_FILE_TYPE, 0600));
|
|
|
|
ASSERT_TRUE(TestRemove(base, "file.txt", false));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Test directory creation
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestCreate(base, "subdir", nsIFile::DIRECTORY_TYPE, 0700));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Test move and copy in the base directory
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestCreate(base, "file.txt", nsIFile::NORMAL_FILE_TYPE, 0600));
|
|
|
|
ASSERT_TRUE(TestMove(base, base, "file.txt", "file2.txt"));
|
|
|
|
ASSERT_TRUE(TestCopy(base, base, "file2.txt", "file3.txt"));
|
|
|
|
|
2016-11-05 02:22:41 +03:00
|
|
|
// Test moving across directories
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestMove(base, subdir, "file2.txt", "file2.txt"));
|
|
|
|
|
2016-11-05 02:22:41 +03:00
|
|
|
// Test moving across directories and renaming at the same time
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestMove(subdir, base, "file2.txt", "file4.txt"));
|
|
|
|
|
2016-11-05 02:22:41 +03:00
|
|
|
// Test copying across directoreis
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestCopy(base, subdir, "file4.txt", "file5.txt"));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Run normalization tests while the directory exists
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestNormalizeNativePath(base, subdir));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Test recursive directory removal
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestRemove(base, "subdir", true));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestCreateUnique(base, "foo", nsIFile::NORMAL_FILE_TYPE, 0600));
|
|
|
|
ASSERT_TRUE(TestCreateUnique(base, "foo", nsIFile::NORMAL_FILE_TYPE, 0600));
|
|
|
|
ASSERT_TRUE(TestCreateUnique(base, "bar.xx", nsIFile::DIRECTORY_TYPE, 0700));
|
|
|
|
ASSERT_TRUE(TestCreateUnique(base, "bar.xx", nsIFile::DIRECTORY_TYPE, 0700));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
2016-11-05 02:22:43 +03:00
|
|
|
ASSERT_TRUE(TestDeleteOnClose(base, "file7.txt", PR_RDWR | PR_CREATE_FILE, 0600));
|
2016-11-05 02:22:41 +03:00
|
|
|
|
|
|
|
// Clean up temporary stuff
|
|
|
|
rv = base->Remove(true);
|
|
|
|
VerifyResult(rv, "Cleaning up temp directory");
|
2016-11-04 09:00:47 +03:00
|
|
|
}
|