示例#1
0
int main (int argc, char** argv) {

    // Creates runtime and base app
	pI::Application app;
	pI::Runtime runtime(app.GetRuntime());

    std::cerr << "Plugin dir: " << app.FindPIPluginDir() << std::endl;
	app.LoadPluginLibraries (app.FindPIPluginDir().c_str());

	std::vector<std::string> names(GetPluginNames (runtime));
	const pI_int count(names.size());

	std::cout << "{" << std::endl;

	appendValue(std::cout, API_VERSION, runtime.GetRuntimeVersion());
	appendValue(std::cout, PLUGIN_COUNT, count);

	std::cout << "\"" << PLUGINS << "\":" << std::endl << "[" << std::endl;
	for (pI_int lv = 0; lv < count; ++lv) {
		std::cout << "{" << std::endl;
		appendValue(std::cout, NAME, names[lv]);

		if (names[lv] == "CImg/Functions") {
			// special treatment for CImg META plugin
			try {
				pI::pInPtr p(runtime.SpawnPlugin ((const pI_str) names[lv].c_str()));
				pI::Arguments params(p->GetParameterSignature());
				appendValue(std::cout, DESCRIPTION, p->GetDescription());
				appendValue(std::cout, PLUGIN_VERSION, p->GetpInVersion());
				appendValue(std::cout, API_VERSION, p->GetAPIVersion());
				appendValue(std::cout, AUTHOR, p->GetAuthor());
				appendValue(std::cout, COPYRIGHT, p->GetCopyright());
				appendValue(std::cout, OPTIONAL_INIT, "false");
				appendValue(std::cout, DEFAULT_INIT, "true");

				std::cout << "\"parameters\":" << std::endl << "[" << std::endl;
				for (pI_size lv2 = 0; lv2 < params.size(); ++lv2) {
					std::cout << runtime.SerializeArgument (params[lv2]);
					if (lv2 < params.size() - 1) {
						std::cout << ",";
					}
					std::cout << std::endl;
				}
				std::cout << "]," << std::endl;

				pI::StringSelection sts(params[0]);
				std::cout << "\"CImg functions\":" << std::endl << "[" << std::endl;
				for (pI_size lv2 = 0; lv2 < sts.GetCount(); ++lv2) {
					sts.SetIndex (lv2);
					p->Initialize (params);
					std::cout << "{" << std::endl;
					appendValue(std::cout, NAME, sts.GetSymbols (lv2));
					std::cout << "\"inputSignature\":" << std::endl << "[" << std::endl;
					pI::Arguments is(p->GetInputSignature());
					for (pI_size lv3 = 0; lv3 < is.size(); ++lv3) {
						std::cout << runtime.SerializeArgument (is[lv3]);
						if (lv3 < is.size() - 1)
							std::cout << ",";
					}
					std::cout << std::endl << "]," << std::endl;
					std::cout << "\"outputSignature\":" << std::endl << "[" << std::endl;
					pI::Arguments os(p->GetOutputSignature());
					for (pI_size lv3 = 0; lv3 < os.size(); ++lv3) {
						std::cout << runtime.SerializeArgument (os[lv3]);
						if (lv3 < os.size() - 1)
							std::cout << ",";
					}
					std::cout << std::endl << "]" << std::endl;
					std::cout << "}";
					if (lv2 < sts.GetCount() - 1)
						std::cout << ",";
					std::cout << std::endl;
				}
				std::cout << "]" << std::endl;
			} catch (...) {}
		} else {
			try {
				pI::pInPtr p(runtime.SpawnPlugin ((const pI_str) names[lv].c_str()));
				appendValue(std::cout, DESCRIPTION, p->GetDescription());
				appendValue(std::cout, PLUGIN_VERSION, p->GetpInVersion());
				appendValue(std::cout, API_VERSION, p->GetAPIVersion());
				appendValue(std::cout, AUTHOR, p->GetAuthor());
				appendValue(std::cout, COPYRIGHT, p->GetCopyright());
				bool optional_init((p->GetInputSignature().size() > 0) ||
								   (p->GetOutputSignature().size() > 0));
				appendValue(std::cout, OPTIONAL_INIT, (optional_init ? "true" : "false"));

				std::cout << "\"" << PARAMETERS << "\":" << std::endl << "[" << std::endl;
				pI::Arguments params(p->GetParameterSignature());
				for (pI_size lv2 = 0; lv2 < params.size(); ++lv2) {
					std::cout << runtime.SerializeArgument (params[lv2]);
					if (lv2 < params.size() - 1) {
						std::cout << ",";
					}
					std::cout << std::endl;
				}
				std::cout << "]," << std::endl;
				bool default_init;
				try {
					p->Initialize (params);
					default_init = true;
				} catch (...) {
					default_init = false;
				}
				appendValue(std::cout, DEFAULT_INIT, (default_init ? "true" : "false"), optional_init || default_init);

				if (optional_init || default_init) {
					std::cout << "\"" << INPUT_SIGNATURE << "\":" << std::endl << "[" << std::endl;
					pI::Arguments is(p->GetInputSignature());
					for (pI_size lv2 = 0; lv2 < is.size(); ++lv2) {
						std::cout << runtime.SerializeArgument (is[lv2]);
						if (lv2 < is.size() - 1)
							std::cout << ",";
					}
					std::cout << std::endl << "]," << std::endl;
					std::cout << "\"" << OUTPUT_SIGNATURE << "\":" << std::endl << "[" << std::endl;
					pI::Arguments os(p->GetOutputSignature());
					for (pI_size lv2 = 0; lv2 < os.size(); ++lv2) {
						std::cout << runtime.SerializeArgument (os[lv2]);
						if (lv2 < os.size() - 1)
							std::cout << ",";
					}
					std::cout << std::endl << "]" << std::endl;
				} else
					std::cout << std::endl;
			} catch (...) {}
		}
		std::cout << "}";
		if (lv < count - 1)
			std::cout << ",";
		std::cout << std::endl;
	}
	std::cout << "]" << std::endl << "}" << std::endl;
	return 0;
}
int main(int argc, char **argv)
{
  return runtime(argc, argv);
}
示例#3
0
int main( int argc, char* argv[] )
{
    DisplayCopyrightNotice();

    std::string configFile = "hh.cfg";
    std::string batchBuildId = "";

    CTimeSpan totalTimeSpan;

    enum RunOption
    {
        ApproveUnitTest,
        ExecuteUnitTests,
        ExecuteUnitTestsInBatchBuildMode,
        GenerateConfigFile,
        ViewUnitTestFailures,
        EditUnitTest
    };

    RunOption runOption = ExecuteUnitTests;
    bool verbose = false;

    try
    {
        for ( ;; )
        {
            int c = getopt( argc, argv, "ac:b:gefv?" );
            if (c == -1)
            {
                break;
            }
     
            switch ( c )
            {
                case 'a':
                    runOption = ApproveUnitTest;
                    break;

                case 'c':
                    configFile = optarg;
                    break;

                case 'b':
                    runOption = ExecuteUnitTestsInBatchBuildMode;
                    batchBuildId = optarg;
                    break;

                case 'g':
                    runOption = GenerateConfigFile;
                    break;

                case 'e':
                    runOption = EditUnitTest;
                    break;

                case 'f':
                    runOption = ViewUnitTestFailures;
                    break;

                case 'v':
                    verbose = true;
                    break;

                case '?':
                    DisplayUsage( argv[0] );
                    return RESULT_SUCCESS;
            }
        }
    }
    catch ( HH_CommandLineError& ex )
    {
        std::cout << ex.AsString() << std::endl;
        std::cout << std::endl;
        DisplayUsage( argv[0] );
        return RESULT_ERROR;
    }

    try
    {
        HH_CommandLineNotifier  commandLineNotifier( verbose );

        switch( runOption )
        {
        case ExecuteUnitTests:
            {
                HH_Runtime  runtime( GetIniFile( verbose ), configFile, commandLineNotifier );
                DisplayParameters( runtime, verbose );
                totalTimeSpan = runtime.ExecuteUnitTest( batchBuildId );
                DisplayElapsedTime( totalTimeSpan, verbose );
            }
            break;

        case ExecuteUnitTestsInBatchBuildMode:
            {
                HH_Runtime  runtime( GetIniFile( verbose ), configFile, commandLineNotifier );
                DisplayParameters( runtime, verbose );
                totalTimeSpan = runtime.ExecuteUnitTest( batchBuildId );
                DisplayElapsedTime( totalTimeSpan, verbose );
            }
            break;

        case ApproveUnitTest:
            {
                HH_Runtime  runtime( GetIniFile( verbose ), configFile, commandLineNotifier );
                DisplayParameters( runtime, verbose );
                runtime.ApproveUnitTest();
            }
            break;

        case GenerateConfigFile:
            HH_Runtime::GenerateConfigFile( commandLineNotifier );
            break;

        case ViewUnitTestFailures:
            {
                HH_Runtime  runtime( GetIniFile( verbose ), configFile, commandLineNotifier );
                DisplayParameters( runtime, verbose );
                runtime.ViewUnitTestFailures();
            }
            break;

        case EditUnitTest:
            {
                HH_Runtime  runtime( GetIniFile( verbose ), configFile, commandLineNotifier );
                DisplayParameters( runtime, verbose );
                runtime.EditDotInFile();
            }
            break;
        }
    }
    catch ( HH_Exception& ex )
    {
        HH_UnitTest::LogException( ex );
        DisplayElapsedTime( totalTimeSpan, verbose );
        return RESULT_ERROR;
    }

    return RESULT_SUCCESS;
}