Mozilla/mozilla/xpcom/tests/nsIFileTest.cpp
dougt%netscape.com c01e94cad7 nsIComponentManager API Changes (bug 98553)
a) create a new nsIComponentManager with only four functions on it:
CreateInstance CreateInstanceByContractID GetClassInfo GetClassInfoByContractID.

b) rename the old nsIComponentManager to nsIComponentManagerObsolete.

c) fixes callers which use to access the nsIComponentManager for component
registration functionality.  These callers will temporary use the
nsIComponentManagerObsolete interface.

d) Create a new API NS_GetComponentManager() which mirrors the
NS_GetServiceManager()

e) Perserves the old NS_GetGlobalComponentManager().  Note the cast usage.

r/sr = rpotts@netscape.com  alecf@netscape.com  brendan@mozilla.org


git-svn-id: svn://10.0.0.236/trunk@110748 18797224-902f-48f8-a5cc-f745e15eee43
2001-12-19 00:12:41 +00:00

359 lines
8.7 KiB
C++

#include "nsILocalFile.h"
#include <stdio.h>
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsIMemory.h"
#include "nsXPIDLString.h"
void Passed();
void Failed(const char* explanation = nsnull);
void Inspect();
void Banner(const char* bannerString);
void VerifyResult(nsresult rv)
{
if (NS_FAILED(rv))
{
Failed("rv failed");
printf("rv = %d\n", rv);
}
}
//----------------------------------------------------------------------------
void Banner(const char* bannerString)
//----------------------------------------------------------------------------
{
printf("---------------------------\n");
printf("%s\n", bannerString);
printf("---------------------------\n");
}
//----------------------------------------------------------------------------
void Passed()
//----------------------------------------------------------------------------
{
printf("Test passed.");
}
//----------------------------------------------------------------------------
void Failed(const char* explanation)
//----------------------------------------------------------------------------
{
printf("ERROR : Test failed.\n");
printf("REASON: %s.\n", explanation);
}
//----------------------------------------------------------------------------
void Inspect()
//----------------------------------------------------------------------------
{
printf("^^^^^^^^^^ PLEASE INSPECT OUTPUT FOR ERRORS\n");
}
void GetPaths(nsILocalFile* file)
{
nsresult rv;
nsXPIDLCString pathName;
printf("Getting Path\n");
rv = file->GetPath(getter_Copies(pathName));
VerifyResult(rv);
printf("filepath: %s\n", (const char *)pathName);
}
extern "C" void
NS_SetupRegistry()
{
nsComponentManager::AutoRegister(nsIComponentManagerObsolete::NS_Startup, NULL);
}
void InitTest(const char* creationPath, const char* appendPath)
{
nsILocalFile* file = nsnull;
nsresult rv = nsComponentManager::CreateInstance(NS_LOCAL_FILE_CONTRACTID,
nsnull,
NS_GET_IID(nsILocalFile),
(void**)&file);
if (NS_FAILED(rv) || (!file))
{
printf("create nsILocalFile failed\n");
return;
}
nsXPIDLCString leafName;
Banner("InitWithPath");
printf("creationPath == %s\nappendPath == %s\n", creationPath, appendPath);
rv = file->InitWithPath(creationPath);
VerifyResult(rv);
printf("Getting Filename\n");
rv = file->GetLeafName(getter_Copies(leafName));
printf(" %s\n", (const char *)leafName);
VerifyResult(rv);
printf("Appending %s \n", appendPath);
rv = file->Append(appendPath);
VerifyResult(rv);
printf("Getting Filename\n");
rv = file->GetLeafName(getter_Copies(leafName));
printf(" %s\n", (const char *)leafName);
VerifyResult(rv);
GetPaths(file);
printf("Check For Existence\n");
PRBool exists;
file->Exists(&exists);
if (exists)
printf("Yup!\n");
else
printf("no.\n");
}
void CreationTest(const char* creationPath, const char* appendPath,
PRInt32 whatToCreate, PRInt32 perm)
{
nsCOMPtr<nsILocalFile> file;
nsresult rv =
nsComponentManager::CreateInstance(NS_LOCAL_FILE_CONTRACTID,
nsnull,
NS_GET_IID(nsILocalFile),
(void **)getter_AddRefs(file));
if (NS_FAILED(rv) || (!file))
{
printf("create nsILocalFile failed\n");
return;
}
Banner("Creation Test");
printf("creationPath == %s\nappendPath == %s\n", creationPath, appendPath);
rv = file->InitWithPath(creationPath);
VerifyResult(rv);
printf("Appending %s\n", appendPath);
rv = file->AppendRelativePath(appendPath);
VerifyResult(rv);
printf("Check For Existence\n");
PRBool exists;
file->Exists(&exists);
if (exists)
printf("Yup!\n");
else
printf("no.\n");
rv = file->Create(whatToCreate, perm);
VerifyResult(rv);
rv = file->Exists(&exists);
VerifyResult(rv);
if (!exists)
{
Failed("Did not create file system object!");
return;
}
}
void CreateUniqueTest(const char* creationPath, const char* appendPath,
PRInt32 whatToCreate, PRInt32 perm)
{
nsCOMPtr<nsILocalFile> file;
nsresult rv =
nsComponentManager::CreateInstance(NS_LOCAL_FILE_CONTRACTID,
nsnull,
NS_GET_IID(nsILocalFile),
(void **)getter_AddRefs(file));
if (NS_FAILED(rv) || (!file))
{
printf("create nsILocalFile failed\n");
return;
}
Banner("Creation Test");
printf("creationPath == %s\nappendPath == %s\n", creationPath, appendPath);
rv = file->InitWithPath(creationPath);
VerifyResult(rv);
printf("Appending %s\n", appendPath);
rv = file->Append(appendPath);
VerifyResult(rv);
printf("Check For Existence\n");
PRBool exists;
file->Exists(&exists);
if (exists)
printf("Yup!\n");
else
printf("no.\n");
rv = file->CreateUnique(whatToCreate, perm);
VerifyResult(rv);
rv = file->Exists(&exists);
VerifyResult(rv);
if (!exists)
{
Failed("Did not create file system object!");
return;
}
}
void
CopyTest(const char *testFile, const char *targetDir)
{
nsCOMPtr<nsILocalFile> file;
nsCOMPtr<nsILocalFile> dir;
printf("start copy test\n");
nsresult rv =
nsComponentManager::CreateInstance(NS_LOCAL_FILE_CONTRACTID, NULL,
NS_GET_IID(nsILocalFile),
(void**)getter_AddRefs(file));
if (NS_FAILED(rv) || (!file))
{
printf("create nsILocalFile failed\n");
return;
}
rv = file->InitWithPath(testFile);
VerifyResult(rv);
rv = nsComponentManager::CreateInstance(NS_LOCAL_FILE_CONTRACTID, NULL,
NS_GET_IID(nsILocalFile),
(void**)getter_AddRefs(dir));
if (NS_FAILED(rv) || (!dir))
{
printf("create nsILocalFile failed\n");
return;
}
rv = dir->InitWithPath(targetDir);
VerifyResult(rv);
rv = file->CopyTo(dir, NULL);
VerifyResult(rv);
printf("end copy test\n");
}
void
DeletionTest(const char* creationPath, const char* appendPath, PRBool recursive)
{
nsCOMPtr<nsILocalFile> file;
nsresult rv =
nsComponentManager::CreateInstance(NS_FILE_CONTRACTID, NULL,
NS_GET_IID(nsILocalFile),
(void**)getter_AddRefs(file));
if (NS_FAILED(rv) || (!file))
{
printf("create nsILocalFile failed\n");
return;
}
Banner("Deletion Test");
printf("creationPath == %s\nappendPath == %s\n", creationPath, appendPath);
rv = file->InitWithPath(creationPath);
VerifyResult(rv);
printf("Appending %s\n", appendPath);
rv = file->Append(appendPath);
VerifyResult(rv);
printf("Check For Existance\n");
PRBool exists;
file->Exists(&exists);
if (exists)
printf("Yup!\n");
else
printf("no.\n");
rv = file->Remove(recursive);
VerifyResult(rv);
rv = file->Exists(&exists);
VerifyResult(rv);
if (exists)
{
Failed("Did not create delete system object!");
return;
}
}
int main(void)
{
NS_SetupRegistry();
#ifdef XP_PC
InitTest("c:\\temp\\", "sub1/sub2/");
InitTest("d:\\temp\\", "sub1\\sub2\\");
CreationTest("c:\\temp\\", "file.txt", nsIFile::NORMAL_FILE_TYPE, 0644);
DeletionTest("c:\\temp\\", "file.txt", PR_FALSE);
CreationTest("c:\\temp\\", "mumble\\a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\", nsIFile::DIRECTORY_TYPE, 0644);
DeletionTest("c:\\temp\\", "mumble", PR_TRUE);
CreateUniqueTest("c:\\temp\\", "foo", nsIFile::NORMAL_FILE_TYPE, 0644);
CreateUniqueTest("c:\\temp\\", "foo", nsIFile::NORMAL_FILE_TYPE, 0644);
CreateUniqueTest("c:\\temp\\", "bar.xx", nsIFile::DIRECTORY_TYPE, 0644);
CreateUniqueTest("c:\\temp\\", "bar.xx", nsIFile::DIRECTORY_TYPE, 0644);
DeletionTest("c:\\temp\\", "foo", PR_TRUE);
DeletionTest("c:\\temp\\", "foo-1", PR_TRUE);
DeletionTest("c:\\temp\\", "bar.xx", PR_TRUE);
DeletionTest("c:\\temp\\", "bar-1.xx", PR_TRUE);
#else
#ifdef XP_UNIX
InitTest("/tmp/", "sub1/sub2/");
CreationTest("/tmp", "file.txt", nsIFile::NORMAL_FILE_TYPE, 0644);
DeletionTest("/tmp/", "file.txt", PR_FALSE);
CreationTest("/tmp", "mumble/a/b/c/d/e/f/g/h/i/j/k/", nsIFile::DIRECTORY_TYPE, 0644);
DeletionTest("/tmp", "mumble", PR_TRUE);
CopyTest("/tmp/test.txt", "/tmp/foo");
#endif /* XP_UNIX */
#endif /* XP_PC */
return 0;
}