コード例 #1
0
        public void TestGetAliasOf()
        {
            var mockPackage  = MockGeneralPackage();
            var packageAlias = new PackageAlias(mockPackage.Object, "1.2", "1.2.0.0");

            Assert.AreSame(mockPackage.Object, packageAlias.GetAliasOf());
        }
コード例 #2
0
        public void TestGetVersionPretty()
        {
            var mockPackage  = MockGeneralPackage();
            var packageAlias = new PackageAlias(mockPackage.Object, "1.2", "1.2.0.0");

            Assert.AreEqual("1.2.0.0", packageAlias.GetVersionPretty());
        }
コード例 #3
0
        public void TestMarkAliasUninstall()
        {
            package.Setup((o) => o.GetPackageType()).Returns("foo");
            package.Setup((o) => o.GetName()).Returns("foobar");
            var packageAlias = new PackageAlias(package.Object, "1.2.0.0", "1.2");
            var operationAliasUninstalled = new OperationMarkPackageAliasUninstall(packageAlias);

            manager.Execute(repository.Object, operationAliasUninstalled);
            repository.Verify((o) => o.RemovePackage(It.IsAny <IPackage>()));
        }
コード例 #4
0
        public void TestGetRequiresDev()
        {
            var mockPackage  = MockGeneralPackage();
            var packageAlias = new PackageAlias(mockPackage.Object, "1.2", "1.2.0.0");

            Assert.AreEqual(1, packageAlias.GetRequiresDev().Length);
            Assert.AreEqual(
                "foobarbaz requiresDev bar == 1.2",
                packageAlias.GetRequiresDev()[0].GetPrettyString(mockPackage.Object));
        }
コード例 #5
0
        public void TestGetStability()
        {
            var mockPackage  = MockGeneralPackage();
            var packageAlias = new PackageAlias(mockPackage.Object, "1.2", "1.2.0.0");

            Assert.AreEqual(Stabilities.Stable, packageAlias.GetStability());

            packageAlias = new PackageAlias(mockPackage.Object, "1.2-beta", "1.2.0.0-beta");
            Assert.AreEqual(Stabilities.Beta, packageAlias.GetStability());
        }
コード例 #6
0
        public void TestGetReplaces()
        {
            var mockPackage  = MockGeneralPackage();
            var packageAlias = new PackageAlias(mockPackage.Object, "1.2", "1.2.0.0");

            Assert.AreEqual(2, packageAlias.GetProvides().Length);
            Assert.AreEqual(
                "foobarbaz replaces bar == 1.0",
                packageAlias.GetReplaces()[0].GetPrettyString(mockPackage.Object));
            Assert.AreEqual(
                "foobarbaz replaces bar == 1.2",
                packageAlias.GetReplaces()[1].GetPrettyString(mockPackage.Object));
        }
コード例 #7
0
        public void TestEqualWithPackageAlias()
        {
            var mockPackage1 = new Mock <BasePackage>("foo")
            {
                CallBase = true,
            };

            mockPackage1.Setup((o) => o.GetVersion()).Returns("1.0");
            var aliasPackage = new PackageAlias(mockPackage1.Object, "2.0", "2.0.0.0");

            Assert.IsTrue(mockPackage1.Object.Equals(aliasPackage));
            Assert.IsTrue(aliasPackage.Equals(mockPackage1.Object));
        }
コード例 #8
0
        public void TestGetHashingWithPackageAlias()
        {
            var mockPackage1 = new Mock <BasePackage>("fooBar")
            {
                CallBase = true,
            };

            mockPackage1.Setup((o) => o.GetVersion()).Returns(() => "1.2");

            var mockPackage2 = new Mock <BasePackage>("fooBar")
            {
                CallBase = true,
            };

            mockPackage2.Setup((o) => o.GetVersion()).Returns(() => "1.2");
            var packageAlias = new PackageAlias(mockPackage2.Object, "2.0", "2.0.0.0");

            Assert.IsTrue(mockPackage1.Object.GetHashCode() == packageAlias.GetHashCode());
        }
コード例 #9
0
        public void TestIsPackageInstalledWithPackageAlias()
        {
            var managerMock = new Mock <InstallationManager>()
            {
                CallBase = true,
            };

            manager = managerMock.Object;
            package.Setup((o) => o.GetPackageType()).Returns("foo");
            package.Setup((o) => o.GetName()).Returns("foobar");
            var packageAlias = new PackageAlias(package.Object, "1.2.0.0", "1.2");

            repository.Setup((o) => o.HasPackage(packageAlias)).Returns(true);
            repository.Setup((o) => o.HasPackage(package.Object)).Returns(true);
            installer.Setup((o) => o.IsSupports("foo")).Returns(true);
            installer.Setup((o) => o.IsInstalled(repository.Object, package.Object))
            .Returns(true);
            manager.AddInstaller(installer.Object);

            Assert.AreEqual(true, manager.IsPackageInstalled(repository.Object, packageAlias));
            managerMock.Verify((o) => o.IsPackageInstalled(repository.Object, package.Object));
        }
コード例 #10
0
ファイル: TestsPool.cs プロジェクト: yekoufeng/bucket
        public void TestWhiteListWithPackageAlias()
        {
            var pool = new Pool();

            pool.SetWhiteList(new HashSet <int>()
            {
                2,
            });
            var packageFirst = MockPackage("foo", "1.0.0.0");
            var aliasPackage = new PackageAlias(packageFirst, "1.2", "1.2.0.0");
            var repository   = MockRepository(aliasPackage, packageFirst);

            pool.AddRepository(repository);

            var packages = pool.WhatProvides("foo");

            Assert.AreEqual(2, packages.Length);
            Assert.AreEqual("1.2.0.0", packages[0].GetVersionPretty());
            Assert.AreEqual("1.2", packages[0].GetVersion());
            Assert.AreSame(packageFirst, ((PackageAlias)packages[0]).GetAliasOf());
            Assert.AreEqual("1.0.0.0", packages[1].GetVersion());
        }
コード例 #11
0
        /// <summary>
        /// Adds a repository and its packages to this package pool.
        /// </summary>
        /// <param name="repository">A package repository.</param>
        /// <param name="rootAliases">An array of the root required aliases.</param>
        public void AddRepository(IRepository repository, ConfigAlias[] rootAliases = null)
        {
            IRepository[] repos;
            if (repository is RepositoryComposite repositoryComposite)
            {
                repos = repositoryComposite.GetRepositories();
            }
            else
            {
                repos = new[] { repository };
            }

            rootAliases = rootAliases ?? Array.Empty <ConfigAlias>();
            void AddPackageByNameExact(IPackage package)
            {
                if (!packageByNameExact.TryGetValue(
                        package.GetName(),
                        out IDictionary <int, IPackage> mapping))
                {
                    packageByNameExact[package.GetName()] = mapping = new Dictionary <int, IPackage>();
                }

                mapping[package.Id] = package;
            }

            void AddPackageByName(string name, IPackage package)
            {
                if (!packageByName.TryGetValue(name, out IList <IPackage> list))
                {
                    packageByName[name] = list = new List <IPackage>();
                }

                list.Add(package);
            }

            foreach (var repo in repos)
            {
                repositories.Add(repo);
                var exempt = repo is RepositoryPlatform || repo is IRepositoryInstalled;

                if (repo is ILazyload repositoryLazyload && repositoryLazyload.IsLazyLoad)
                {
                    lazyloadRepositories.Add(repositoryLazyload);
                    continue;
                }

                foreach (var package in repo.GetPackages())
                {
                    var names     = package.GetNames();
                    var stability = package.GetStability();
                    if (!(exempt || IsPackageAcceptable(stability, names)))
                    {
                        continue;
                    }

                    package.Id = id++;
                    packages.Add(package);
                    AddPackageByNameExact(package);

                    foreach (var name in names)
                    {
                        AddPackageByName(name, package);
                    }

                    var packageName = package.GetName();
                    var alias       = ConfigAlias.FindAlias(rootAliases, packageName, package.GetVersion());
                    if (alias == null)
                    {
                        continue;
                    }

                    var originalPackage = package;
                    if (originalPackage is PackageAlias packageAlias)
                    {
                        originalPackage = packageAlias.GetAliasOf();
                    }

                    packageAlias = new PackageAlias(originalPackage, alias.AliasNormalized, alias.Alias);
                    packageAlias.SetRootPackageAlias(true);
                    packageAlias.Id = id++;

                    if (originalPackage.GetRepository() is RepositoryArray repositoryArray)
                    {
                        repositoryArray.AddPackage(packageAlias);
                    }
                    else if (originalPackage.GetRepository() is IRepositoryWriteable repositoryWriteable)
                    {
                        repositoryWriteable.AddPackage(packageAlias);
                    }
                    else
                    {
                        throw new RuntimeException($"The repository is must be {nameof(RepositoryArray)} or {nameof(IRepositoryWriteable)} in package {originalPackage}");
                    }

                    packages.Add(packageAlias);
                    AddPackageByNameExact(packageAlias);
                    foreach (var name in packageAlias.GetNames())
                    {
                        AddPackageByName(name, packageAlias);
                    }
                }
            }
        }
コード例 #12
0
ファイル: Transaction.cs プロジェクト: yekoufeng/bucket
 private void MarkPackageAliasUninstall(PackageAlias package, Rule reason)
 {
     transaction.AddLast(new OperationMarkPackageAliasUninstall(package, reason));
 }
コード例 #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="OperationMarkPackageAliasUninstall"/> class.
 /// </summary>
 /// <param name="package">The mark uninstall package instance.</param>
 /// <param name="reason">Why uninstall the package.</param>
 public OperationMarkPackageAliasUninstall(PackageAlias package, Rule reason = null)
     : base(reason)
 {
     this.package = package;
 }