test_lang_tlb.cc
Go to the documentation of this file.
00001 #include <boost/test/auto_unit_test.hpp>
00002 
00003 #include <lang/csupport/standard_types.hh>
00004 
00005 #include <test/testsuite.hh>
00006 #include <utilmm/configfile/configset.hh>
00007 #include <typelib/pluginmanager.hh>
00008 #include <typelib/importer.hh>
00009 #include <typelib/typemodel.hh>
00010 #include <typelib/registry.hh>
00011 #include <typelib/registryiterator.hh>
00012 #include <typelib/typedisplay.hh>
00013 #include <iostream>
00014 #include <sstream>
00015 #include <fstream>
00016 using namespace Typelib;
00017 using namespace std;
00018 
00019 #ifdef HAS_INTERNAL_CPARSER
00020 BOOST_AUTO_TEST_CASE( test_tlb_rejects_recursive_types )
00021 {
00022     PluginManager::self manager;
00023     Registry registry;
00024 
00025     static const char* test_file = TEST_DATA_PATH("test_cimport.1");
00026     utilmm::config_set config;
00027     manager->load("c", test_file, config, registry);
00028 
00029     BOOST_REQUIRE_THROW(manager->save("tlb", registry), ExportError);
00030 }
00031 #endif
00032 
00033 BOOST_AUTO_TEST_CASE( test_tlb_idempotent )
00034 {
00035     PluginManager::self manager;
00036     Registry registry;
00037 
00038     static const char* test_file = TEST_DATA_PATH("test_cimport.tlb");
00039     {
00040         utilmm::config_set config;
00041         manager->load("tlb", test_file, config, registry);
00042     }
00043 
00044     string result;
00045     result = manager->save("tlb", registry);
00046     istringstream io(result);
00047     utilmm::config_set config;
00048     Registry* reloaded = NULL;
00049     reloaded = manager->load("tlb", io, config);
00050 
00051     if (!registry.isSame(*reloaded))
00052     {
00053         RegistryIterator it = registry.begin(),
00054                          end = registry.end();
00055         for (; it != end; ++it)
00056         {
00057             if (!reloaded->has(it->getName(), true))
00058                 std::cerr << "reloaded does not have " << it->getName() << std::endl;
00059             else if (!(*it).isSame(*reloaded->build(it->getName())))
00060             {
00061                 std::cerr << "versions of " << it->getName() << " differ" << std::endl;
00062                 std::cerr << *it << std::endl << std::endl;
00063                 std::cerr << *reloaded->get(it->getName()) << std::endl;
00064             }
00065         }
00066     }
00067 }
00068 
00069 BOOST_AUTO_TEST_CASE( test_tlb_import )
00070 {
00071     PluginManager::self manager;
00072     auto_ptr<Importer> importer(manager->importer("tlb"));
00073     utilmm::config_set config;
00074 
00075     {
00076         string empty_tlb = "<?xml version=\"1.0\"?>\n<typelib>\n</typelib>";
00077         istringstream stream(empty_tlb);
00078         Registry registry;
00079         importer->load(stream, config, registry);
00080     }
00081 
00082     {
00083         string invalid_element_type = "<?xml version=\"1.0\"?>\n<typelib>\n<invalid_thing name=\"fake\"/></typelib>";
00084         istringstream stream(invalid_element_type);
00085         Registry registry;
00086         BOOST_CHECK_THROW(importer->load(stream, config, registry), std::runtime_error);
00087     }
00088     {
00089         string missing_arg = "<?xml version=\"1.0\"?>\n<typelib>\n<invalid_thing /></typelib>";
00090         istringstream stream(missing_arg);
00091         Registry registry;
00092         BOOST_CHECK_THROW(importer->load(stream, config, registry), std::runtime_error);
00093     }
00094 
00095 
00096     { 
00097         ifstream file(TEST_DATA_PATH("rflex.tlb"));
00098         Registry registry;
00099         Typelib::CXX::addStandardTypes(registry);
00100         importer->load(file, config, registry);
00101 
00102         BOOST_CHECK( registry.get("/custom_null") );
00103         BOOST_CHECK( registry.get("/custom_null")->isNull() );
00104     }
00105 }
00106 


typelib
Author(s): Sylvain Joyeux/sylvain.joyeux@m4x.org
autogenerated on Thu Jan 2 2014 11:38:41