/* vim: set sw=4 sts=4 et foldmethod=syntax : *//* * Copyright (c) 2008, 2009, 2010, 2011 Ciaran McCreesh * * This file is part of the Paludis package manager. Paludis is free software; * you can redistribute it and/or modify it under the terms of the GNU General * Public License version 2, as published by the Free Software Foundation. * * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA */#include<paludis/repositories/e/e_repository.hh>#include<paludis/repositories/e/e_repository_exceptions.hh>#include<paludis/repositories/e/e_repository_id.hh>#include<paludis/repositories/e/vdb_repository.hh>#include<paludis/repositories/e/eapi.hh>#include<paludis/repositories/fake/fake_installed_repository.hh>#include<paludis/repositories/fake/fake_package_id.hh>#include<paludis/environments/test/test_environment.hh>#include<paludis/util/system.hh>#include<paludis/util/simple_visitor_cast.hh>#include<paludis/util/map.hh>#include<paludis/util/make_named_values.hh>#include<paludis/util/set.hh>#include<paludis/util/make_null_shared_ptr.hh>#include<paludis/output_manager.hh>#include<paludis/standard_output_manager.hh>#include<paludis/package_id.hh>#include<paludis/metadata_key.hh>#include<paludis/action.hh>#include<paludis/user_dep_spec.hh>#include<paludis/generator.hh>#include<paludis/filter.hh>#include<paludis/filtered_generator.hh>#include<paludis/selection.hh>#include<paludis/repository_factory.hh>#include<paludis/choice.hh>#include<test/test_framework.hh>#include<test/test_runner.hh>#include<functional>#include<set>#include<string>#include"config.h"usingnamespacetest;usingnamespacepaludis;namespace{voidcannot_uninstall(conststd::shared_ptr<constPackageID>&id,constUninstallActionOptions&){if(id)throwInternalError(PALUDIS_HERE,"cannot uninstall");}std::shared_ptr<OutputManager>make_standard_output_manager(constAction&){returnstd::make_shared<StandardOutputManager>();}std::stringfrom_keys(conststd::shared_ptr<constMap<std::string,std::string>>&m,conststd::string&k){Map<std::string,std::string>::ConstIteratormm(m->find(k));if(m->end()==mm)return"";elsereturnmm->second;}WantPhasewant_all_phases(conststd::string&){returnwp_yes;}structEverTest:TestCase{conststd::stringtest;EverTest(conststd::string&s):TestCase("ever "+s),test(s){}unsignedmax_run_time()const{return3000;}boolrepeatable()const{returnfalse;}voidrun(){#ifdef ENABLE_VIRTUALS_REPOSITORY::setenv("PALUDIS_ENABLE_VIRTUALS_REPOSITORY","yes",1);#else::setenv("PALUDIS_ENABLE_VIRTUALS_REPOSITORY","",1);#endifTestEnvironmentenv;env.set_paludis_command("/bin/false");std::shared_ptr<Map<std::string,std::string>>keys(std::make_shared<Map<std::string,std::string>>());keys->insert("format","e");keys->insert("names_cache","/var/empty");keys->insert("location",stringify(FSPath::cwd()/"e_repository_TEST_ever_dir"/"repo1"));keys->insert("profiles",stringify(FSPath::cwd()/"e_repository_TEST_ever_dir"/"repo1/profiles/profile"));keys->insert("layout","exheres");keys->insert("eapi_when_unknown","exheres-0");keys->insert("eapi_when_unspecified","exheres-0");keys->insert("profile_eapi","exheres-0");keys->insert("distdir",stringify(FSPath::cwd()/"e_repository_TEST_ever_dir"/"distdir"));keys->insert("builddir",stringify(FSPath::cwd()/"e_repository_TEST_ever_dir"/"build"));std::shared_ptr<Repository>repo(ERepository::repository_factory_create(&env,std::bind(from_keys,keys,std::placeholders::_1)));env.package_database()->add_repository(1,repo);std::shared_ptr<FakeInstalledRepository>installed_repo(std::make_shared<FakeInstalledRepository>(make_named_values<FakeInstalledRepositoryParams>(n::environment()=&env,n::name()=RepositoryName("installed"),n::suitable_destination()=true,n::supports_uninstall()=true)));installed_repo->add_version("cat","pretend-installed","0")->provide_key()->set_from_string("virtual/virtual-pretend-installed");installed_repo->add_version("cat","pretend-installed","1")->provide_key()->set_from_string("virtual/virtual-pretend-installed");env.package_database()->add_repository(2,installed_repo);#ifdef ENABLE_VIRTUALS_REPOSITORYstd::shared_ptr<Map<std::string,std::string>>iv_keys(std::make_shared<Map<std::string,std::string>>());iv_keys->insert("root","/");iv_keys->insert("format","installed_virtuals");env.package_database()->add_repository(-2,RepositoryFactory::get_instance()->create(&env,std::bind(from_keys,iv_keys,std::placeholders::_1)));std::shared_ptr<Map<std::string,std::string>>v_keys(std::make_shared<Map<std::string,std::string>>());v_keys->insert("format","virtuals");env.package_database()->add_repository(-2,RepositoryFactory::get_instance()->create(&env,std::bind(from_keys,v_keys,std::placeholders::_1)));#endifInstallActionaction(make_named_values<InstallActionOptions>(n::destination()=installed_repo,n::make_output_manager()=&make_standard_output_manager,n::perform_uninstall()=&cannot_uninstall,n::replacing()=std::make_shared<PackageIDSequence>(),n::want_phase()=&want_all_phases));conststd::shared_ptr<constPackageID>id(*env[selection::RequireExactlyOne(generator::Matches(PackageDepSpec(parse_user_package_dep_spec("cat/"+test,&env,{})),make_null_shared_ptr(),{}))]->last());TEST_CHECK(bool(id));id->perform_action(action);}};}namespacetest_cases{EverTesttest_split("ever-split");EverTesttest_split_all("ever-split-all");EverTesttest_at_least("ever-at-least");EverTesttest_is_scm("ever-is_scm");EverTesttest_major("ever-major");EverTesttest_range("ever-range");EverTesttest_remainder("ever-remainder");EverTesttest_replace("ever-replace");EverTesttest_replace_all("ever-replace_all");EverTesttest_delete("ever-delete");EverTesttest_delete_all("ever-delete_all");}