2006-01-17 01:27:43 +01:00
|
|
|
/* vim: set sw=4 sts=4 et foldmethod=syntax : */
|
|
|
|
|
|
|
|
/*
|
2011-02-27 23:08:29 +01:00
|
|
|
* Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Ciaran McCreesh
|
2006-01-17 01:27:43 +01:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*/
|
|
|
|
|
2007-02-26 03:27:05 +01:00
|
|
|
#include <paludis/environments/test/test_environment.hh>
|
2011-03-26 20:26:06 +01:00
|
|
|
|
2006-07-16 22:45:42 +02:00
|
|
|
#include <paludis/repositories/fake/fake_repository.hh>
|
2007-10-17 13:11:43 +02:00
|
|
|
#include <paludis/repositories/fake/fake_installed_repository.hh>
|
2007-06-27 21:21:52 +02:00
|
|
|
#include <paludis/repositories/fake/fake_package_id.hh>
|
2011-03-26 20:26:06 +01:00
|
|
|
|
2007-07-05 02:50:29 +02:00
|
|
|
#include <paludis/util/sequence.hh>
|
2007-11-02 08:39:03 +01:00
|
|
|
#include <paludis/util/wrapped_forward_iterator.hh>
|
2007-10-17 13:11:43 +02:00
|
|
|
#include <paludis/util/set.hh>
|
2007-11-02 09:39:19 +01:00
|
|
|
#include <paludis/util/indirect_iterator-impl.hh>
|
2007-12-02 01:45:40 +01:00
|
|
|
#include <paludis/util/options.hh>
|
2009-10-21 20:19:57 +02:00
|
|
|
#include <paludis/util/make_named_values.hh>
|
2011-03-26 20:26:06 +01:00
|
|
|
#include <paludis/util/stringify.hh>
|
2011-03-25 00:31:48 +01:00
|
|
|
|
|
|
|
#include <paludis/user_dep_spec.hh>
|
|
|
|
#include <paludis/filter.hh>
|
|
|
|
|
|
|
|
#include <gtest/gtest.h>
|
2006-01-17 01:27:43 +01:00
|
|
|
|
|
|
|
using namespace paludis;
|
|
|
|
|
2011-03-26 20:26:06 +01:00
|
|
|
TEST(EnvironmentImplementation, Repositories)
|
2011-03-25 00:31:48 +01:00
|
|
|
{
|
|
|
|
TestEnvironment e;
|
|
|
|
|
|
|
|
const std::shared_ptr<FakeRepository> r1(std::make_shared<FakeRepository>(make_named_values<FakeRepositoryParams>(
|
|
|
|
n::environment() = &e,
|
|
|
|
n::name() = RepositoryName("repo1")
|
|
|
|
)));
|
|
|
|
const std::shared_ptr<FakeRepository> r2(std::make_shared<FakeRepository>(make_named_values<FakeRepositoryParams>(
|
|
|
|
n::environment() = &e,
|
|
|
|
n::name() = RepositoryName("repo2")
|
|
|
|
)));
|
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_THROW(e.fetch_repository(RepositoryName("repo1")), NoSuchRepositoryError);
|
|
|
|
EXPECT_THROW(e.fetch_repository(RepositoryName("repo2")), NoSuchRepositoryError);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
e.add_repository(10, r1);
|
|
|
|
ASSERT_TRUE(bool(e.fetch_repository(RepositoryName("repo1"))));
|
|
|
|
EXPECT_EQ(RepositoryName("repo1"), e.fetch_repository(RepositoryName("repo1"))->name());
|
|
|
|
EXPECT_THROW(e.fetch_repository(RepositoryName("repo2")), NoSuchRepositoryError);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_THROW(e.add_repository(10, r1), DuplicateRepositoryError);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
e.add_repository(11, r2);
|
|
|
|
ASSERT_TRUE(bool(e.fetch_repository(RepositoryName("repo1"))));
|
|
|
|
EXPECT_EQ(RepositoryName("repo1"), e.fetch_repository(RepositoryName("repo1"))->name());
|
|
|
|
ASSERT_TRUE(bool(e.fetch_repository(RepositoryName("repo2"))));
|
|
|
|
EXPECT_EQ(RepositoryName("repo2"), e.fetch_repository(RepositoryName("repo2"))->name());
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_THROW(e.add_repository(10, r1), DuplicateRepositoryError);
|
|
|
|
EXPECT_THROW(e.add_repository(5, r2), DuplicateRepositoryError);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
ASSERT_TRUE(bool(e.fetch_repository(RepositoryName("repo1"))));
|
|
|
|
EXPECT_EQ(RepositoryName("repo1"), e.fetch_repository(RepositoryName("repo1"))->name());
|
|
|
|
ASSERT_TRUE(bool(e.fetch_repository(RepositoryName("repo2"))));
|
|
|
|
EXPECT_EQ(RepositoryName("repo2"), e.fetch_repository(RepositoryName("repo2"))->name());
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_TRUE(! e.more_important_than(RepositoryName("repo1"), RepositoryName("repo2")));
|
|
|
|
EXPECT_TRUE(e.more_important_than(RepositoryName("repo2"), RepositoryName("repo1")));
|
|
|
|
EXPECT_TRUE(! e.more_important_than(RepositoryName("repo2"), RepositoryName("repo2")));
|
|
|
|
EXPECT_TRUE(! e.more_important_than(RepositoryName("repo1"), RepositoryName("repo1")));
|
2011-03-25 00:31:48 +01:00
|
|
|
}
|
2006-01-17 01:27:43 +01:00
|
|
|
|
2011-03-25 00:31:48 +01:00
|
|
|
namespace
|
2006-01-17 01:27:43 +01:00
|
|
|
{
|
2011-03-25 00:31:48 +01:00
|
|
|
struct CoolFakeRepository :
|
|
|
|
FakeRepository
|
2006-01-17 01:27:43 +01:00
|
|
|
{
|
2011-03-25 00:31:48 +01:00
|
|
|
CoolFakeRepository(const Environment * const e, const RepositoryName & rn) :
|
|
|
|
FakeRepository(make_named_values<FakeRepositoryParams>(
|
|
|
|
n::environment() = e,
|
|
|
|
n::name() = rn
|
|
|
|
))
|
2006-01-17 01:27:43 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2016-08-05 07:09:28 +02:00
|
|
|
std::shared_ptr<const CategoryNamePartSet> unimportant_category_names(const RepositoryContentMayExcludes &) const override
|
2006-01-17 01:27:43 +01:00
|
|
|
{
|
2011-03-25 00:31:48 +01:00
|
|
|
std::shared_ptr<CategoryNamePartSet> result(std::make_shared<CategoryNamePartSet>());
|
|
|
|
result->insert(CategoryNamePart("bad-cat1"));
|
|
|
|
result->insert(CategoryNamePart("bad-cat2"));
|
|
|
|
return result;
|
2006-01-17 01:27:43 +01:00
|
|
|
}
|
2011-03-25 00:31:48 +01:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2011-03-26 20:26:06 +01:00
|
|
|
TEST(EnvironmentImplementation, Disambiguation)
|
2011-03-25 00:31:48 +01:00
|
|
|
{
|
|
|
|
TestEnvironment e;
|
|
|
|
|
|
|
|
std::shared_ptr<FakeRepository> r1(std::make_shared<FakeRepository>(make_named_values<FakeRepositoryParams>(
|
|
|
|
n::environment() = &e,
|
|
|
|
n::name() = RepositoryName("repo1"))));
|
|
|
|
r1->add_version(CategoryNamePart("cat-one") + PackageNamePart("pkg-one"), VersionSpec("0", { }));
|
|
|
|
r1->add_version(CategoryNamePart("cat-one") + PackageNamePart("pkg-two"), VersionSpec("0", { }));
|
|
|
|
r1->add_version(CategoryNamePart("cat-two") + PackageNamePart("pkg-two"), VersionSpec("0", { }));
|
|
|
|
r1->add_version(CategoryNamePart("cat-two") + PackageNamePart("pkg-three"), VersionSpec("0", { }));
|
2011-03-26 19:58:38 +01:00
|
|
|
e.add_repository(10, r1);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
|
|
|
std::shared_ptr<FakeRepository> r2(std::make_shared<FakeRepository>(make_named_values<FakeRepositoryParams>(
|
|
|
|
n::environment() = &e,
|
|
|
|
n::name() = RepositoryName("repo2"))));
|
|
|
|
r2->add_version(CategoryNamePart("cat-three") + PackageNamePart("pkg-three"), VersionSpec("0", { }));
|
|
|
|
r2->add_version(CategoryNamePart("cat-three") + PackageNamePart("pkg-four"), VersionSpec("0", { }));
|
2011-03-26 19:58:38 +01:00
|
|
|
e.add_repository(10, r2);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
|
|
|
std::shared_ptr<FakeRepository> r3(std::make_shared<CoolFakeRepository>(&e, RepositoryName("repo3")));
|
|
|
|
r3->add_version(CategoryNamePart("bad-cat1") + PackageNamePart("pkg-important"), VersionSpec("0", { }));
|
|
|
|
r3->add_version(CategoryNamePart("good-cat1") + PackageNamePart("pkg-important"), VersionSpec("0", { }));
|
|
|
|
|
|
|
|
r3->add_version(CategoryNamePart("good-cat1") + PackageNamePart("pkg-installed"), VersionSpec("0", { }));
|
|
|
|
r3->add_version(CategoryNamePart("good-cat2") + PackageNamePart("pkg-installed"), VersionSpec("0", { }));
|
|
|
|
|
|
|
|
r3->add_version(CategoryNamePart("bad-cat1") + PackageNamePart("pkg-fail1"), VersionSpec("0", { }));
|
|
|
|
r3->add_version(CategoryNamePart("bad-cat2") + PackageNamePart("pkg-fail1"), VersionSpec("0", { }));
|
|
|
|
|
|
|
|
r3->add_version(CategoryNamePart("bad-cat1") + PackageNamePart("pkg-fail2"), VersionSpec("0", { }));
|
|
|
|
r3->add_version(CategoryNamePart("bad-cat2") + PackageNamePart("pkg-fail2"), VersionSpec("0", { }));
|
|
|
|
|
|
|
|
r3->add_version(CategoryNamePart("good-cat1") + PackageNamePart("pkg-fail3"), VersionSpec("0", { }));
|
|
|
|
r3->add_version(CategoryNamePart("good-cat2") + PackageNamePart("pkg-fail3"), VersionSpec("0", { }));
|
|
|
|
|
|
|
|
r3->add_version(CategoryNamePart("good-cat1") + PackageNamePart("pkg-fail4"), VersionSpec("0", { }));
|
|
|
|
r3->add_version(CategoryNamePart("good-cat2") + PackageNamePart("pkg-fail4"), VersionSpec("0", { }));
|
|
|
|
|
|
|
|
r3->add_version(CategoryNamePart("avail-cat") + PackageNamePart("pkg-foo"), VersionSpec("0", { }));
|
2011-03-26 19:58:38 +01:00
|
|
|
e.add_repository(10, r3);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
|
|
|
std::shared_ptr<FakeInstalledRepository> r4(std::make_shared<FakeInstalledRepository>(
|
|
|
|
make_named_values<FakeInstalledRepositoryParams>(
|
|
|
|
n::environment() = &e,
|
|
|
|
n::name() = RepositoryName("repo4"),
|
|
|
|
n::suitable_destination() = true,
|
|
|
|
n::supports_uninstall() = true
|
|
|
|
)));
|
|
|
|
r4->add_version(CategoryNamePart("good-cat1") + PackageNamePart("pkg-installed"), VersionSpec("0", { }));
|
|
|
|
r4->add_version(CategoryNamePart("good-cat1") + PackageNamePart("pkg-fail4"), VersionSpec("0", { }));
|
|
|
|
r4->add_version(CategoryNamePart("good-cat2") + PackageNamePart("pkg-fail4"), VersionSpec("0", { }));
|
|
|
|
r4->add_version(CategoryNamePart("inst-cat") + PackageNamePart("pkg-foo"), VersionSpec("0", { }));
|
2011-03-26 19:58:38 +01:00
|
|
|
e.add_repository(10, r4);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_EQ("cat-one/pkg-one", stringify(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-one"))));
|
|
|
|
EXPECT_EQ("cat-three/pkg-four", stringify(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-four"))));
|
|
|
|
EXPECT_EQ("good-cat1/pkg-important", stringify(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-important"))));
|
|
|
|
EXPECT_EQ("good-cat1/pkg-installed", stringify(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-installed"))));
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-two")), AmbiguousPackageNameError);
|
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-three")), AmbiguousPackageNameError);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-fail1")), AmbiguousPackageNameError);
|
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-fail2")), AmbiguousPackageNameError);
|
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-fail3")), AmbiguousPackageNameError);
|
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-fail4")), AmbiguousPackageNameError);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-five")), NoSuchPackageError);
|
2011-03-25 00:31:48 +01:00
|
|
|
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-one"),
|
2011-03-25 00:31:48 +01:00
|
|
|
filter::SupportsAction<ConfigAction>()), NoSuchPackageError);
|
2011-03-26 19:58:38 +01:00
|
|
|
EXPECT_EQ("inst-cat/pkg-foo", stringify(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-foo"))));
|
|
|
|
EXPECT_EQ("avail-cat/pkg-foo", stringify(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-foo"), filter::SupportsAction<InstallAction>())));
|
|
|
|
EXPECT_THROW(e.fetch_unique_qualified_package_name(PackageNamePart("pkg-foo"), filter::All(), false), AmbiguousPackageNameError);
|
2006-01-17 01:27:43 +01:00
|
|
|
}
|
2007-03-10 19:15:17 +01:00
|
|
|
|