diff -r 000000000000 -r 6474c204b198 xpcom/sample/program/nsTestSample.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xpcom/sample/program/nsTestSample.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,109 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* 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/. */ + + +/** + * A Test application that exercises the sample moudule. This is intented + * to be a sample application for using xpcom standalone. + */ + +#include + +#include "nsXPCOMGlue.h" +#include "nsXPCOM.h" +#include "nsCOMPtr.h" +#include "nsISample.h" +#include "nsIServiceManager.h" +#include "nsIComponentManager.h" +#include "nsIComponentRegistrar.h" + +#define NS_SAMPLE_CONTRACTID "@mozilla.org/sample;1" + +int +main(void) +{ + nsresult rv; + + XPCOMGlueStartup(nullptr); + + // Initialize XPCOM + nsCOMPtr servMan; + rv = NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr); + if (NS_FAILED(rv)) + { + printf("ERROR: XPCOM intialization error [%x].\n", + static_cast(rv)); + return -1; + } + + nsCOMPtr manager = do_QueryInterface(servMan); + + // Create an instance of our component + nsCOMPtr mysample; + rv = manager->CreateInstanceByContractID(NS_SAMPLE_CONTRACTID, + nullptr, + NS_GET_IID(nsISample), + getter_AddRefs(mysample)); + if (NS_FAILED(rv)) + { + printf("ERROR: Cannot create instance of component " NS_SAMPLE_CONTRACTID " [%x].\n" + "Debugging hint:\n" + "\tsetenv NSPR_LOG_MODULES nsComponentManager:5\n" + "\tsetenv NSPR_LOG_FILE xpcom.log\n" + "\t./nsTestSample\n" + "\t.\n", + static_cast(rv)); + return -2; + } + + // Call methods on our sample to test it out. + rv = mysample->WriteValue("Inital print:"); + if (NS_FAILED(rv)) + { + printf("ERROR: Calling nsISample::WriteValue() [%x]\n", + static_cast(rv)); + return -3; + } + + const char *testValue = "XPCOM defies gravity"; + rv = mysample->SetValue(testValue); + if (NS_FAILED(rv)) + { + printf("ERROR: Calling nsISample::SetValue() [%x]\n", + static_cast(rv)); + return -3; + } + printf("Set value to: %s\n", testValue); + char *str; + rv = mysample->GetValue(&str); + + if (NS_FAILED(rv)) + { + printf("ERROR: Calling nsISample::GetValue() [%x]\n", + static_cast(rv)); + return -3; + } + if (strcmp(str, testValue)) + { + printf("Test FAILED.\n"); + return -4; + } + + NS_Free(str); + + rv = mysample->WriteValue("Final print :"); + printf("Test passed.\n"); + + // All nsCOMPtr's must be deleted prior to calling shutdown XPCOM + // as we should not hold references passed XPCOM Shutdown. + servMan = 0; + manager = 0; + mysample = 0; + + // Shutdown XPCOM + NS_ShutdownXPCOM(nullptr); + + return 0; +}