void ConfigFileUnitTests::testLoadMultipleSetup()
{
    std::wstring configxml = DVLib::DirectoryCombine(DVLib::GetModuleDirectoryW(), 
        L"..\\..\\..\\Samples\\MultipleConfig\\Configuration.xml");
    CPPUNIT_ASSERT(DVLib::FileExists(configxml));
    ConfigFile config;
    config.LoadFile(configxml);
    // configurations properties
    CPPUNIT_ASSERT(config.size() == 2);	
    // install sequence
    std::vector<ConfigurationPtr> install_configurations = config.GetSupportedConfigurations(LcidUser, SequenceInstall);
    CPPUNIT_ASSERT(configuration_reference == install_configurations[0]->type);
    CPPUNIT_ASSERT(configuration_install == install_configurations[1]->type);
    InstallConfiguration * p_configuration_install = reinterpret_cast<InstallConfiguration *>(get(install_configurations[1]));
    Components install_components = p_configuration_install->GetSupportedComponents(LcidUser, SequenceInstall);
    CPPUNIT_ASSERT(install_components.size() == 2);
    CPPUNIT_ASSERT(install_components[0]->id == L"setup1");
    CPPUNIT_ASSERT(install_components[1]->id == L"setup2");
    Components uninstall_components = p_configuration_install->GetSupportedComponents(LcidUser, SequenceUninstall);
    CPPUNIT_ASSERT(uninstall_components.size() == 2);
    CPPUNIT_ASSERT(uninstall_components[0]->id == L"setup2");
    CPPUNIT_ASSERT(uninstall_components[1]->id == L"setup1");
    std::vector<ConfigurationPtr> uninstall_configurations = config.GetSupportedConfigurations(LcidUser, SequenceUninstall);
    CPPUNIT_ASSERT(configuration_install == uninstall_configurations[0]->type);
    CPPUNIT_ASSERT(configuration_reference == uninstall_configurations[1]->type);	
}
void ConfigFileUnitTests::testLoadMultilingualSetup()
{
    std::wstring configxml = DVLib::DirectoryCombine(DVLib::GetModuleDirectoryW(), 
        L"..\\..\\..\\Samples\\MultilingualSetup\\Configuration.xml");
    CPPUNIT_ASSERT(DVLib::FileExists(configxml));
    ConfigFile config;
    config.LoadFile(configxml);
    // there're two configurations in this sample, but only 1 will show because the lcids don't overlap
    CPPUNIT_ASSERT(config.size() == 2);
    CPPUNIT_ASSERT(config.GetSupportedConfigurations(0, SequenceInstall).size() == 1);
    CPPUNIT_ASSERT(config.GetSupportedConfigurations(1040, SequenceInstall).size() == 1);
    CPPUNIT_ASSERT(config.GetSupportedConfigurations(1040, SequenceInstall)[0]->lcid_filter == L"1040");
}
void ConfigFileUnitTests::testGetSupportedConfigurations()
{
    std::wstring configxml = DVLib::DirectoryCombine(DVLib::GetModuleDirectoryW(), 
        L"..\\..\\..\\Samples\\StandaloneSetup\\Configuration.xml");
    CPPUNIT_ASSERT(DVLib::FileExists(configxml));
    ConfigFile config;
    config.LoadFile(configxml);
    // there're two configurations in this sample, opposite of each other
    CPPUNIT_ASSERT(config.GetSupportedConfigurations(0, SequenceInstall).size() == 1);
}
void ConfigFileUnitTests::testLoadOsFiltersSetup()
{
    std::wstring configxml = DVLib::DirectoryCombine(DVLib::GetModuleDirectoryW(), 
        L"..\\..\\..\\Samples\\OsFilters\\Configuration.xml");
    CPPUNIT_ASSERT(DVLib::FileExists(configxml));
    ConfigFile config;
    config.LoadFile(configxml);
    // there're three components in this sample, but only 1 will show because the os filters don't overlap
    CPPUNIT_ASSERT(config.size() == 1);
    CPPUNIT_ASSERT(config.GetSupportedConfigurations(0, SequenceInstall).size() == 1);
    const InstallConfiguration * configuration = reinterpret_cast<InstallConfiguration *>(get(config[0]));
    CPPUNIT_ASSERT(configuration->components.size() == 3);	
}