int init_base(int &argc, char *argv[], Context *context = 0) { if (argc < 4) { // invalid number of arguments return EXIT_FAILURE; } // obtain real argc for this plugin and pargv, pargc for _base plugin int i = 0; for (; i < argc and strcmp(argv[i], "--") != 0; i++); char **pargv = argv + i + 1; int pargc = argc - i - 1; argc = i; string plugin_fn = pargv[0]; string plugin_fn_name = pargv[1]; ostringstream plugin_args; copy(pargv + 2, pargv + pargc, ostream_iterator<char *>(plugin_args, " ")); // for (int i = 0; i < pargc; i++) plugin_args; _plugin = new Plugin<IInteractiveMtFactory>(plugin_fn, plugin_args.str(), plugin_fn_name); if (_plugin == 0) { cerr << "Could not create base plugin '" << plugin_fn << "'\n"; return EXIT_FAILURE; } _base = _plugin->create(context); if (_base == 0) { cerr << "Could not create base factory for '" << plugin_fn << "'\n"; return EXIT_FAILURE; } return EXIT_SUCCESS; }
TEST(PluginFactory, loadPlugins) { PluginFactory* factory = PluginFactory::getInstance(); EXPECT_NO_THROW(factory->loadPluginsFromFile("./libsampleplugin.so")); std::vector<std::string> loadedModules=factory->getRegisteredPluginNames(); EXPECT_EQ(loadedModules.size(),(unsigned int)2); EXPECT_EQ(factory->hasPlugin("TestModule"),true); EXPECT_EQ(factory->hasPlugin("TestAlgorithm"),true); EXPECT_THROW(factory->getPlugin<Algorithm>("TestModule"),std::string); Plugin<Module>* modulePlugin = factory->getPlugin<Module>("TestModule"); Module* testModule = modulePlugin->create(Configuration::createEmptyDict()); EXPECT_EQ(testModule->getOutputSize(),(unsigned int)1); EXPECT_EQ(testModule->getOutput(0)->getName(),"out"); Plugin<Algorithm>* algorithmPlugin = factory->getPlugin<Algorithm>("TestAlgorithm"); Algorithm* testAlgorithm = algorithmPlugin->create(Configuration::createEmptyDict()); Graph g; testAlgorithm->setGraph(g); testAlgorithm->execute(); }