28 #include <gtest/gtest.h>
31 #include <boost_plugin_loader/plugin_loader.hpp>
32 #include <boost_plugin_loader/utils.h>
35 TEST(TesseractClassLoaderUnit, parseEnvironmentVariableListUnit)
38 std::string env_var =
"UNITTESTENV=a:b:c";
40 std::string env_var =
"UNITTESTENV=a;b;c";
42 putenv(env_var.data());
43 std::set<std::string> s = boost_plugin_loader::parseEnvironmentVariableList(
"UNITTESTENV");
44 std::vector<std::string> v(s.begin(), s.end());
50 TEST(TesseractClassLoaderUnit, LoadTestPlugin)
53 const std::string lib_name =
"tesseract_common_test_plugin_multiply";
54 const std::string lib_dir = std::string(TEST_PLUGIN_DIR);
55 const std::string symbol_name =
"plugin";
58 const std::optional<boost::dll::shared_library> lib_opt =
59 boost_plugin_loader::loadLibrary(boost::filesystem::path(lib_dir) / lib_name);
60 EXPECT_TRUE(lib_opt.has_value());
61 const boost::dll::shared_library& lib = lib_opt.value();
64 std::vector<std::string> sections = boost_plugin_loader::getAllAvailableSections(lib);
65 EXPECT_EQ(sections.size(), 1);
66 EXPECT_EQ(sections.at(0),
"TestBase");
68 sections = boost_plugin_loader::getAllAvailableSections(lib,
true);
69 EXPECT_TRUE(sections.size() > 1);
73 std::vector<std::string> symbols = boost_plugin_loader::getAllAvailableSymbols(lib,
"TestBase");
74 EXPECT_EQ(symbols.size(), 1);
75 EXPECT_EQ(symbols.at(0), symbol_name);
80 EXPECT_ANY_THROW(boost_plugin_loader::createSharedInstance<TestPluginBase>(lib,
"does_not_exist"));
84 TEST(TesseractPluginLoaderUnit, LoadTestPlugin)
86 using boost_plugin_loader::PluginLoader;
90 PluginLoader plugin_loader;
91 plugin_loader.search_paths.insert(std::string(TEST_PLUGIN_DIR));
92 plugin_loader.search_libraries.insert(
"tesseract_common_test_plugin_multiply");
94 EXPECT_TRUE(plugin_loader.isPluginAvailable(
"plugin"));
95 auto plugin = plugin_loader.createInstance<TestPluginBase>(
"plugin");
96 EXPECT_TRUE(plugin !=
nullptr);
97 EXPECT_NEAR(plugin->multiply(5, 5), 25, 1e-8);
99 std::vector<std::string> sections = plugin_loader.getAvailableSections();
100 EXPECT_EQ(sections.size(), 1);
101 EXPECT_EQ(sections.at(0),
"TestBase");
103 sections = plugin_loader.getAvailableSections(
true);
104 EXPECT_TRUE(sections.size() > 1);
106 std::vector<std::string> symbols = plugin_loader.getAvailablePlugins<TestPluginBase>();
107 EXPECT_EQ(symbols.size(), 1);
108 EXPECT_EQ(symbols.at(0),
"plugin");
110 symbols = plugin_loader.getAvailablePlugins(
"TestBase");
111 EXPECT_EQ(symbols.size(), 1);
112 EXPECT_EQ(symbols.at(0),
"plugin");
130 PluginLoader plugin_loader;
131 plugin_loader.search_system_folders =
false;
132 plugin_loader.search_paths.insert(
"does_not_exist");
133 plugin_loader.search_libraries.insert(
"tesseract_common_test_plugin_multiply");
136 EXPECT_FALSE(plugin_loader.isPluginAvailable(
"plugin"));
137 EXPECT_ANY_THROW(plugin_loader.createInstance<TestPluginBase>(
"plugin"));
142 PluginLoader plugin_loader;
143 plugin_loader.search_system_folders =
false;
144 plugin_loader.search_libraries.insert(
"tesseract_common_test_plugin_multiply");
147 EXPECT_FALSE(plugin_loader.isPluginAvailable(
"does_not_exist"));
148 EXPECT_ANY_THROW(plugin_loader.createInstance<TestPluginBase>(
"does_not_exist"));
151 plugin_loader.search_system_folders =
true;
154 EXPECT_FALSE(plugin_loader.isPluginAvailable(
"does_not_exist"));
155 EXPECT_ANY_THROW(plugin_loader.createInstance<TestPluginBase>(
"does_not_exist"));
160 PluginLoader plugin_loader;
161 plugin_loader.search_system_folders =
false;
162 plugin_loader.search_libraries.insert(
"does_not_exist");
165 EXPECT_FALSE(plugin_loader.isPluginAvailable(
"plugin"));
166 EXPECT_ANY_THROW(plugin_loader.createInstance<TestPluginBase>(
"plugin"));
169 plugin_loader.search_system_folders =
true;
172 EXPECT_FALSE(plugin_loader.isPluginAvailable(
"plugin"));
173 EXPECT_ANY_THROW(plugin_loader.createInstance<TestPluginBase>(
"plugin"));
178 PluginLoader plugin_loader;
179 EXPECT_ANY_THROW(plugin_loader.isPluginAvailable(
"plugin"));
180 EXPECT_ANY_THROW(plugin_loader.createInstance<TestPluginBase>(
"plugin"));
184 PluginLoader plugin_loader;
185 plugin_loader.search_system_folders =
false;
186 EXPECT_ANY_THROW(plugin_loader.isPluginAvailable(
"plugin"));
187 EXPECT_ANY_THROW(plugin_loader.createInstance<TestPluginBase>(
"plugin"));
191 int main(
int argc,
char** argv)
193 testing::InitGoogleTest(&argc, argv);
195 return RUN_ALL_TESTS();