public void InstallPackageRunsInitAndInstallScripts()
        {
            // Arrange
            var localRepository = new Mock <MockPackageRepository>()
            {
                CallBase = true
            }.As <ISharedPackageRepository>().Object;
            var sourceRepository  = new MockPackageRepository();
            var projectRepository = new MockProjectPackageRepository(localRepository);
            var fileSystem        = new MockFileSystem();
            var projectSystem     = new MockProjectSystem();
            var pathResolver      = new DefaultPackagePathResolver(new MockProjectSystem());
            var project           = TestUtils.GetProject("Foo");
            var scriptExecutor    = new Mock <IScriptExecutor>();
            var packageManager    = new MockVsPackageManager2(
                @"c:\solution",
                sourceRepository);
            var packageManagerFactory = new Mock <IVsPackageManagerFactory>();

            packageManagerFactory.Setup(m => m.CreatePackageManager(It.IsAny <IPackageRepository>(), false)).Returns(packageManager);

            var package = NuGet.Test.PackageUtility.CreatePackage("foo", "1.0", new[] { "hello" }, tools: new[] { "init.ps1", "install.ps1" });

            sourceRepository.AddPackage(package);
            var installer = new VsPackageInstaller(packageManagerFactory.Object, scriptExecutor.Object, new Mock <IPackageRepositoryFactory>().Object, new Mock <IOutputConsoleProvider>().Object, new Mock <IVsCommonOperations>().Object, new Mock <ISolutionManager>().Object, null, null);

            // Act
            installer.InstallPackage(sourceRepository, project, "foo", new SemanticVersion("1.0"), ignoreDependencies: false, skipAssemblyReferences: false);

            // Assert
            scriptExecutor.Verify(e => e.Execute(It.IsAny <string>(), PowerShellScripts.Init, It.IsAny <IPackage>(), null, null, It.IsAny <ILogger>()), Times.Once());
            scriptExecutor.Verify(e => e.Execute(It.IsAny <string>(), PowerShellScripts.Install, It.IsAny <IPackage>(), It.IsAny <Project>(), It.IsAny <FrameworkName>(), It.IsAny <ILogger>()), Times.Once());
        }
Ejemplo n.º 2
0
        public void InstallPackageConsidersAlreadyInstalledPrereleasePackagesWhenResolvingDependencies()
        {
            // Arrange
            var packageB_05  = PackageUtility.CreatePackage("B", "0.5.0");
            var packageB_10a = PackageUtility.CreatePackage("B", "1.0.0-a");
            var packageA     = PackageUtility.CreatePackage("A",
                                                            dependencies: new[] { new PackageDependency("B", VersionUtility.ParseVersionSpec("[0.5.0, 2.0.0)")) });

            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB_10a);
            sourceRepository.AddPackage(packageB_05);

            // Act
            // The allowPrereleaseVersions flag should be irrelevant since we specify a version.
            packageManager.InstallPackage("B", version: new SemanticVersion("1.0.0-a"), ignoreDependencies: false, allowPrereleaseVersions: false);
            // Verify we actually did install B.1.0.0a
            Assert.True(localRepository.Exists(packageB_10a));

            packageManager.InstallPackage("A");

            // Assert
            Assert.True(localRepository.Exists(packageA));
            Assert.True(localRepository.Exists(packageB_10a));
        }
Ejemplo n.º 3
0
        public void XdtTransformOnXmlNodeWithAttributes()
        {
            // Arrange
            var mockProjectSystem = new MockProjectSystem();
            var mockRepository    = new MockPackageRepository();

            mockProjectSystem.AddFile("test.xml",
                                      @"<a attrib=""b""/>".AsStream());
            var projectManager = new ProjectManager(mockRepository, new DefaultPackagePathResolver(new MockProjectSystem()), mockProjectSystem, new MockPackageRepository());

            var package = new Mock <IPackage>();

            package.Setup(m => m.Id).Returns("A");
            package.Setup(m => m.Version).Returns(new SemanticVersion("1.0"));
            package.Setup(m => m.Listed).Returns(true);

            var file = new Mock <IPackageFile>();

            file.Setup(m => m.Path).Returns(@"content\test.xml.install.xdt");
            file.Setup(m => m.EffectivePath).Returns("test.xml.install.xdt");
            file.Setup(m => m.GetStream()).Returns(() =>
                                                   @"<a xmlns:xdt=""http://schemas.microsoft.com/XML-Document-Transform""><test xdt:Transform=""InsertIfMissing""/></a>".AsStream());

            package.Setup(m => m.GetFiles()).Returns(new[] { file.Object });
            mockRepository.AddPackage(package.Object);

            // Act
            projectManager.AddPackageReference("A");

            // Assert
            Assert.True(mockProjectSystem.FileExists("test.xml"));
            var actual = mockProjectSystem.OpenFile("test.xml").ReadToEnd();

            Assert.Equal("<a attrib=\"b\">\t<test/></a>", actual);
        }
        public void InstallPackageSetOperationToInstall3()
        {
            // Arrange
            var localRepository  = new MockSharedPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var pathResolver     = new DefaultPackagePathResolver(projectSystem);
            var projectManager   = new ProjectManager(localRepository, pathResolver, new MockProjectSystem(), new MockPackageRepository());
            var packageManager   = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, new Mock <IFileSystemProvider>().Object, projectSystem, localRepository, new Mock <IDeleteOnRestartManager>().Object, new Mock <VsPackageInstallerEvents>().Object);

            var package = PackageUtility.CreatePackage("foo", "1.0", new[] { "hello" });

            sourceRepository.AddPackage(package);

            var package2 = PackageUtility.CreatePackage("bar", "2.0", new[] { "world" });

            sourceRepository.AddPackage(package2);

            // Act
            packageManager.InstallPackage(
                projectManager,
                package2,
                new PackageOperation[] {
                new PackageOperation(package, PackageAction.Install),
                new PackageOperation(package2, PackageAction.Install),
            },
                ignoreDependencies: false,
                allowPrereleaseVersions: false,
                logger: NullLogger.Instance);

            // Assert
            Assert.Equal("Install", sourceRepository.LastOperation);
            Assert.Equal("bar", sourceRepository.LastMainPackageId);
            Assert.Equal("2.0", sourceRepository.LastMainPackageVersion);
        }
        public void UpdatePackagesSetOperationToUpdate1()
        {
            // Arrange
            var localRepository   = new MockSharedPackageRepository();
            var sourceRepository  = new MockPackageRepository();
            var projectRepository = new MockPackageRepository();
            var projectSystem     = new MockProjectSystem();
            var pathResolver      = new DefaultPackagePathResolver(projectSystem);
            var projectManager    = new ProjectManager(localRepository, pathResolver, new MockProjectSystem(), projectRepository);
            var packageManager    = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, new Mock <IFileSystemProvider>().Object, projectSystem, localRepository, new Mock <IDeleteOnRestartManager>().Object, new Mock <VsPackageInstallerEvents>().Object);

            var package = PackageUtility.CreatePackage("phuong", "1.0", new[] { "hello" });

            localRepository.AddPackage(package);
            projectRepository.AddPackage(package);

            var package2 = PackageUtility.CreatePackage("phuong", "2.0", new[] { "hello" });

            sourceRepository.AddPackage(package2);

            // Act
            packageManager.UpdatePackages(
                projectManager,
                updateDependencies: true,
                allowPrereleaseVersions: true,
                logger: NullLogger.Instance);

            // Assert
            Assert.Equal("Update", sourceRepository.LastOperation);
            Assert.Equal("phuong", sourceRepository.LastMainPackageId);
            Assert.Equal("2.0", sourceRepository.LastMainPackageVersion);
        }
Ejemplo n.º 6
0
        public void InstallingPackageWithUnknownDependencyAndIgnoreDepencenciesInstallsPackageWithoutDependencies()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
                                                             dependencies: new List <PackageDependency> {
                new PackageDependency("C")
            });

            IPackage packageC = PackageUtility.CreatePackage("C", "1.0");

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageC);

            // Act
            packageManager.InstallPackage("A", version: null, ignoreDependencies: true);

            // Assert
            Assert.IsTrue(localRepository.Exists(packageA));
            Assert.IsFalse(localRepository.Exists(packageC));
        }
Ejemplo n.º 7
0
        public void UninstallingPackageUninstallsPackageButNotDependencies()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
                                                             dependencies: new List <PackageDependency> {
                new PackageDependency("B")
            });

            IPackage packageB = PackageUtility.CreatePackage("B", "1.0");

            localRepository.AddPackage(packageA);
            localRepository.AddPackage(packageB);

            // Act
            packageManager.UninstallPackage("A");

            // Assert
            Assert.False(localRepository.Exists(packageA));
            Assert.True(localRepository.Exists(packageB));
        }
Ejemplo n.º 8
0
        public void UpdatePackageWillAskForEachFileWhenThereAreFileConflict()
        {
            // Arrange
            var localRepository    = new MockPackageRepository();
            var sourceRepository   = new MockPackageRepository();
            var constraintProvider = NullConstraintProvider.Instance;
            var fileSystem         = new MockFileSystem();
            var pathResolver       = new DefaultPackagePathResolver(fileSystem);
            var projectSystem      = new MockProjectSystem();

            projectSystem.AddFile("one.txt", "this is one");
            projectSystem.AddFile("two.txt", "this is two");

            var packages    = new List <IPackage>();
            var package_A10 = PackageUtility.CreatePackage("A", "1.0", content: new[] { "1.txt" });
            var package_A12 = PackageUtility.CreatePackage("A", "1.2", content: new[] { "one.txt", "two.txt" });

            localRepository.Add(package_A10);
            sourceRepository.Add(package_A12);

            var sharedRepository = new Mock <ISharedPackageRepository>(MockBehavior.Strict);

            sharedRepository.Setup(s => s.AddPackage(package_A12)).Callback <IPackage>(p => packages.Add(p));
            sharedRepository.Setup(s => s.GetPackages()).Returns(packages.AsQueryable());

            var repositoryFactory = new Mock <IPackageRepositoryFactory>();

            repositoryFactory.Setup(s => s.CreateRepository(It.IsAny <string>())).Returns(sourceRepository);

            var packageSourceProvider = new Mock <IPackageSourceProvider>();

            packageSourceProvider.Setup(s => s.LoadPackageSources()).Returns(new[] { new PackageSource("foo-source") });

            var answers = new[] {
                FileConflictResolution.Overwrite,
                FileConflictResolution.Ignore,
            };

            int cursor  = 0;
            var console = new Mock <IConsole>();

            console.Setup(c => c.ResolveFileConflict(It.IsAny <string>())).Returns(() => answers[cursor++]);

            var updateCommand = new UpdateCommand()
            {
                RepositoryFactory = repositoryFactory.Object,
                SourceProvider    = packageSourceProvider.Object,
                Console           = console.Object,
            };

            // Act
            updateCommand.UpdatePackages(localRepository, fileSystem, sharedRepository.Object, sourceRepository, constraintProvider, pathResolver, projectSystem);

            // Assert
            Assert.True(localRepository.Exists("A", new SemanticVersion("1.2")));
            Assert.Equal("content\\one.txt", projectSystem.ReadAllText("one.txt"));
            Assert.Equal("this is two", projectSystem.ReadAllText("two.txt"));

            Assert.Equal(2, cursor);
        }
Ejemplo n.º 9
0
        public void InstallPackageDoesNotPerformWalkInfoCheckWhenPassingTheFlag()
        {
            // In this test, we simulate installing a solution-level package which depends on
            // a project-level package. Under normal condition, this is disallowed by NuGet.
            // However, if passing the 'ignoreWalkInfo' parameter with value of 'true',
            // NuGet will happily accept that. Hence the installation will succeed.
            // This is used by the package restore mode.

            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            // A is solution-level package
            IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
                                                             tools: new string[] { "init.ps1" },
                                                             dependencies: new[] {
                new PackageDependency("C")
            });

            IPackage packageC = PackageUtility.CreatePackage("C", "1.0.0-RC-1", content: new string[] { "a.txt" });

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageC);

            // Act
            packageManager.InstallPackage(packageA, ignoreDependencies: false, allowPrereleaseVersions: true, ignoreWalkInfo: true);

            // Assert
            Assert.True(localRepository.Exists(packageA));
            Assert.True(localRepository.Exists(packageC));
        }
Ejemplo n.º 10
0
        public void InstallSatellitePackageCopiesFilesToExistingRuntimePackageFolder()
        {
            // Arrange
            // Create a runtime package and a satellite package that has a dependency on the runtime package, and uses the
            // local suffix convention.
            var runtimePackage = PackageUtility.CreatePackage("foo", "1.0.0", assemblyReferences: new[] { @"lib\foo.dll" });

            var satellitePackage = PackageUtility.CreatePackage("foo.ja-jp", "1.0.0", language: "ja-jp",
                                                                satelliteAssemblies: new[] { @"lib\ja-jp\foo.resources.dll", @"lib\ja-jp\foo.xml" },
                                                                dependencies: new[] { new PackageDependency("foo", VersionUtility.ParseVersionSpec("[1.0.0]")) });

            var projectSystem    = new MockProjectSystem();
            var localRepository  = new MockSharedPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            sourceRepository.AddPackage(runtimePackage);
            sourceRepository.AddPackage(satellitePackage);

            // Act
            Install("foo", new NullProjectManager(packageManager));
            Install("foo.ja-jp", new NullProjectManager(packageManager));

            // Assert
            Assert.True(projectSystem.FileExists(@"foo.1.0.0\lib\foo.dll"));
            Assert.True(projectSystem.FileExists(@"foo.1.0.0\lib\ja-jp\foo.resources.dll"));
            Assert.True(projectSystem.FileExists(@"foo.1.0.0\lib\ja-jp\foo.xml"));
            Assert.True(projectSystem.FileExists(@"foo.ja-jp.1.0.0\lib\ja-jp\foo.resources.dll"));
            Assert.True(projectSystem.FileExists(@"foo.ja-jp.1.0.0\lib\ja-jp\foo.xml"));
        }
Ejemplo n.º 11
0
        public void InstallPackageAddsAllFilesToFileSystem()
        {
            // Arrange
            var projectSystem    = new MockProjectSystem();
            var sourceRepository = new MockPackageRepository();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem);

            IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
                                                             new[] { "contentFile", @"sub\contentFile" },
                                                             new[] { @"lib\reference.dll" },
                                                             new[] { @"readme.txt" });

            sourceRepository.AddPackage(packageA);

            // Act
            packageManager.InstallPackage("A");

            // Assert
            Assert.AreEqual(0, projectSystem.References.Count);
            Assert.AreEqual(5, projectSystem.Paths.Count);
            Assert.IsTrue(projectSystem.FileExists(@"A.1.0\content\contentFile"));
            Assert.IsTrue(projectSystem.FileExists(@"A.1.0\content\sub\contentFile"));
            Assert.IsTrue(projectSystem.FileExists(@"A.1.0\lib\reference.dll"));
            Assert.IsTrue(projectSystem.FileExists(@"A.1.0\tools\readme.txt"));
            Assert.IsTrue(projectSystem.FileExists(@"A.1.0\A.1.0.nupkg"));
        }
Ejemplo n.º 12
0
        public void InstallPackageDisregardTargetFrameworkOfDependencies()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var packageManager   = new PackageManager(
                sourceRepository,
                new DefaultPackagePathResolver(projectSystem),
                projectSystem,
                localRepository);

            IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
                                                             dependencies: new[] {
                new PackageDependency("C", null)
            });

            IPackage packageC = PackageUtility.CreatePackage("C", "1.0.0");

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageC);

            // Act
            packageManager.InstallPackage("A", version: null, ignoreDependencies: false, allowPrereleaseVersions: true);

            // Assert
            Assert.True(localRepository.Exists(packageA));
            Assert.True(localRepository.Exists(packageC));
        }
Ejemplo n.º 13
0
        public void InstallPackageInstallsLowerReleaseVersionIfPrereleaseFlagIsNotSet()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
                                                             dependencies: new[] {
                new PackageDependency("C")
            });

            IPackage packageC_RC = PackageUtility.CreatePackage("C", "1.0.0-RC-1");
            IPackage packageC    = PackageUtility.CreatePackage("C", "0.9");

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageC);
            sourceRepository.AddPackage(packageC_RC);

            // Act
            packageManager.InstallPackage("A", version: null, ignoreDependencies: false, allowPrereleaseVersions: false);

            // Assert
            Assert.True(localRepository.Exists(packageA));
            Assert.True(localRepository.Exists(packageC));
        }
Ejemplo n.º 14
0
        public void InstallPackageInstallsSemVer200PrereleasePackageWithVersionGiven()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem    = new MockProjectSystem();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0-beta.1.2+git.hash.21d2b3f0acb1c8ffe9909bf2f1cbed2273414e58",
                                                             dependencies: new[] {
                new PackageDependency("C", VersionUtility.ParseVersionSpec("2.0.0-beta.2.2+other.data"))
            });

            IPackage packageC = PackageUtility.CreatePackage("C", "2.0.0-beta.2.2+git.hash.a1d2b3f0acb1c8ffe9909bf2f1cbed2273414e58");

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageC);

            // Act
            packageManager.InstallPackage("A", version: SemanticVersion.Parse("1.0.0-beta.1.2+other.data"), ignoreDependencies: false, allowPrereleaseVersions: true);

            // Assert
            Assert.True(localRepository.Exists(packageA));
            Assert.True(localRepository.Exists(packageC));
        }
Ejemplo n.º 15
0
        public void UpdatePackageAddsPackagesToSharedPackageRepositoryWhenReferencesAreAdded()
        {
            // Arrange
            var localRepository    = new MockPackageRepository();
            var sourceRepository   = new MockPackageRepository();
            var constraintProvider = NullConstraintProvider.Instance;
            var pathResolver       = new DefaultPackagePathResolver(NullFileSystem.Instance);
            var projectSystem      = new MockProjectSystem();

            var package_A10 = PackageUtility.CreatePackage("A", "1.0", content: new[] { "1.txt" });
            var package_A12 = PackageUtility.CreatePackage("A", "1.2", content: new[] { "1.txt" });

            localRepository.Add(package_A10);
            sourceRepository.Add(package_A12);

            var sharedRepository = new Mock <ISharedPackageRepository>(MockBehavior.Strict);

            sharedRepository.Setup(s => s.AddPackage(package_A12)).Verifiable();
            var repositoryFactory = new Mock <IPackageRepositoryFactory>();

            repositoryFactory.Setup(s => s.CreateRepository(It.IsAny <string>())).Returns(sourceRepository);
            var packageSourceProvider = new Mock <IPackageSourceProvider>();

            packageSourceProvider.Setup(s => s.LoadPackageSources()).Returns(new[] { new PackageSource("foo-source") });

            var updateCommand = new UpdateCommand(repositoryFactory.Object, packageSourceProvider.Object);

            // Act
            updateCommand.UpdatePackages(localRepository, sharedRepository.Object, sourceRepository, constraintProvider, pathResolver, projectSystem);

            // Assert
            sharedRepository.Verify();
        }
Ejemplo n.º 16
0
        public void UninstallingSatellitePackageRemovesCollidingRuntimeFiles()
        {
            // Arrange
            // Create a runtime package and a satellite package that has a dependency on the runtime package, and uses the
            // local suffix convention.
            var runtimePackage = PackageUtility.CreatePackage("foo", "1.0.0",
                                                              assemblyReferences: new[] { @"lib\ja-jp\collision.txt" });

            var satellitePackage = PackageUtility.CreatePackage("foo.ja-jp", "1.0.0", language: "ja-jp",
                                                                satelliteAssemblies: new[] { @"lib\ja-jp\collision.txt" },
                                                                dependencies: new[] { new PackageDependency("foo", VersionUtility.ParseVersionSpec("[1.0.0]")) });

            var projectSystem    = new MockProjectSystem();
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            sourceRepository.AddPackage(runtimePackage);
            sourceRepository.AddPackage(satellitePackage);

            // Act
            packageManager.InstallPackage("foo");
            packageManager.InstallPackage("foo.ja-jp");

            packageManager.UninstallPackage("foo.ja-jp");

            // Assert
            Assert.Equal(0, projectSystem.Paths.Count);
            Assert.False(projectSystem.FileExists(@"foo.1.0.0\lib\ja-jp\collision.txt"));
        }
Ejemplo n.º 17
0
        public void ReInstallingPackageAfterUninstallingDependencyShouldReinstallAllDependencies()
        {
            // Arrange
            var            localRepository  = new MockPackageRepository();
            var            sourceRepository = new MockPackageRepository();
            var            projectSystem    = new MockProjectSystem();
            PackageManager packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
                                                             dependencies: new List <PackageDependency> {
                new PackageDependency("B")
            });

            IPackage packageB = PackageUtility.CreatePackage("B", "1.0",
                                                             dependencies: new List <PackageDependency> {
                new PackageDependency("C")
            });

            var packageC = PackageUtility.CreatePackage("C", "1.0");

            localRepository.AddPackage(packageA);
            localRepository.AddPackage(packageB);

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB);
            sourceRepository.AddPackage(packageC);

            // Act
            packageManager.InstallPackage("A");

            // Assert
            Assert.IsTrue(localRepository.Exists(packageA));
            Assert.IsTrue(localRepository.Exists(packageB));
            Assert.IsTrue(localRepository.Exists(packageC));
        }
        public void InstallPackagesFromVSExtensionRepositoryThrowsWhenPackageIsMissing()
        {
            // Arrange
            var extensionId = "myExtensionId";

            var extensionManagerMock = new Mock <IVsExtensionManager>();
            var extensionMock        = new Mock <IInstalledExtension>();

            extensionMock.Setup(e => e.InstallPath).Returns(@"C:\Extension\Dir");
            var extension = extensionMock.Object;

            extensionManagerMock.Setup(em => em.TryGetInstalledExtension(extensionId, out extension)).Returns(true);

            var services = new Mock <IVsPackageInstallerServices>();

            services.Setup(x => x.IsPackageInstalled(It.IsAny <Project>(), It.IsAny <string>())).Returns(false);

            var localRepository = new Mock <MockPackageRepository>()
            {
                CallBase = true
            }.As <ISharedPackageRepository>().Object;
            var sourceRepository  = new MockPackageRepository();
            var projectRepository = new MockProjectPackageRepository(localRepository);
            var fileSystem        = new MockFileSystem();
            var projectSystem     = new MockProjectSystem();
            var pathResolver      = new DefaultPackagePathResolver(new MockProjectSystem());
            var project           = TestUtils.GetProject("Foo");
            var projectManager    = new ProjectManager(null, pathResolver, projectSystem, projectRepository);
            var packageManager    = new Mock <VsPackageManager>(
                TestUtils.GetSolutionManager(),
                sourceRepository,
                new Mock <IFileSystemProvider>().Object,
                fileSystem,
                localRepository,
                new Mock <IDeleteOnRestartManager>().Object,
                new Mock <VsPackageInstallerEvents>().Object,
                /* multiFrameworkTargeting */ null)
            {
                CallBase = true
            };
            var packageManagerFactory    = new Mock <IVsPackageManagerFactory>();
            var packageRepositoryFactory = new Mock <IPackageRepositoryFactory>(MockBehavior.Strict);

            packageManagerFactory.Setup(m => m.CreatePackageManager(It.IsAny <IPackageRepository>(), false)).Returns(packageManager.Object);
            packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager);
            packageRepositoryFactory.Setup(r => r.CreateRepository(@"x:\test")).Returns(new MockPackageRepository()).Verifiable();

            var installer = new VsPackageInstaller(packageManagerFactory.Object, null, null, null, new Mock <IVsCommonOperations>().Object, new Mock <ISolutionManager>().Object, null, services.Object, extensionManagerMock.Object);
            var packages  = new Dictionary <string, string>();

            packages.Add("A", "1.0.0");

            // Act & Assert
            var exception = Assert.Throws <InvalidOperationException>(() => installer.InstallPackagesFromVSExtensionRepository(extensionId, isPreUnzipped: false, skipAssemblyReferences: false, project: project, packageVersions: packages));

            Assert.True(exception.Message.Contains("A.1.0.0 : "));
        }
Ejemplo n.º 19
0
        public void InstallPackageDoesNotTurnOffBindingRedirectIfNotSkipAssemblyReferences()
        {
            // Arrange
            var localRepository = new Mock <MockPackageRepository>()
            {
                CallBase = true
            }.As <ISharedPackageRepository>().Object;
            var sourceRepository  = new MockPackageRepository();
            var projectRepository = new MockProjectPackageRepository(localRepository);
            var fileSystem        = new MockFileSystem();
            var projectSystem     = new MockProjectSystem();
            var pathResolver      = new DefaultPackagePathResolver(new MockProjectSystem());
            var project           = TestUtils.GetProject("Foo");
            var projectManager    = new ProjectManager(localRepository, pathResolver, projectSystem, projectRepository);
            var scriptExecutor    = new Mock <IScriptExecutor>();
            var packageManager    = new Mock <VsPackageManager>(
                TestUtils.GetSolutionManager(),
                sourceRepository,
                new Mock <IFileSystemProvider>().Object,
                fileSystem,
                localRepository,
                new Mock <IDeleteOnRestartManager>().Object,
                new Mock <VsPackageInstallerEvents>().Object,
                /* multiFrameworkTargeting */ null)
            {
                CallBase = true
            };
            var packageManagerFactory = new Mock <IVsPackageManagerFactory>();

            packageManager.As <IVsPackageManager>().SetupGet(m => m.BindingRedirectEnabled).Returns(true);

            packageManager.As <IVsPackageManager>().SetupSet(m => m.BindingRedirectEnabled = false);
            packageManager.As <IVsPackageManager>().SetupSet(m => m.BindingRedirectEnabled = true);
            packageManagerFactory.Setup(m => m.CreatePackageManager(It.IsAny <IPackageRepository>(), false)).Returns(packageManager.Object);
            packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager);

            var package = NuGet.Test.PackageUtility.CreatePackage("foo", "1.0", new[] { "hello" }, tools: new[] { "init.ps1", "install.ps1" });

            sourceRepository.AddPackage(package);
            var installer = new VsPackageInstaller(
                packageManagerFactory.Object,
                scriptExecutor.Object,
                new Mock <IPackageRepositoryFactory>().Object,
                new Mock <IOutputConsoleProvider>().Object,
                new Mock <IVsCommonOperations>().Object,
                new Mock <ISolutionManager>().Object,
                null,
                null);

            // Act
            installer.InstallPackage(sourceRepository, project, "foo", new SemanticVersion("1.0"), ignoreDependencies: false, skipAssemblyReferences: false);

            // Assert
            packageManager.As <IVsPackageManager>().VerifySet(m => m.BindingRedirectEnabled = false, Times.Never());
            packageManager.As <IVsPackageManager>().VerifySet(m => m.BindingRedirectEnabled = true, Times.Exactly(2));
        }
Ejemplo n.º 20
0
        public void RemovePackageWithXdtTransformFile()
        {
            // Arrange
            var mockProjectSystem = new MockProjectSystem();
            var mockRepository    = new MockPackageRepository();

            mockProjectSystem.AddFile("web.config",
                                      @"<configuration>
    <system.web><compilation debug=""false"" /></system.web>
</configuration>
".AsStream());
            var projectManager = new ProjectManager(mockRepository, new DefaultPackagePathResolver(new MockProjectSystem()), mockProjectSystem, new MockPackageRepository());

            var package = new Mock <IPackage>();

            package.Setup(m => m.Id).Returns("A");
            package.Setup(m => m.Version).Returns(new SemanticVersion("1.0"));
            package.Setup(m => m.Listed).Returns(true);

            var file = new Mock <IPackageFile>();

            file.Setup(m => m.Path).Returns(@"content\web.config.uninstall.xdt");
            file.Setup(m => m.EffectivePath).Returns("web.config.uninstall.xdt");
            file.Setup(m => m.GetStream()).Returns(() =>
                                                   @"<configuration xmlns:xdt=""http://schemas.microsoft.com/XML-Document-Transform"">
    <system.web>
        <compilation xdt:Locator=""Match(debug)"" debug=""false"" xdt:Transform=""Remove"" />
    </system.web>
</configuration>".AsStream());

            package.Setup(m => m.GetFiles()).Returns(new[] { file.Object });
            mockRepository.AddPackage(package.Object);

            // Act 1
            projectManager.AddPackageReference("A");

            // Assert 1
            Assert.False(mockProjectSystem.FileExists("web.config.uninstall.xdt"));
            Assert.Equal(
                @"<configuration>
    <system.web><compilation debug=""false"" /></system.web>
</configuration>
", mockProjectSystem.OpenFile("web.config").ReadToEnd());

            // Act 2
            projectManager.RemovePackageReference("A");

            // Assert 2
            Assert.False(mockProjectSystem.FileExists("web.config.uninstall.xdt"));
            Assert.True(mockProjectSystem.FileExists("web.config"));
            Assert.Equal(
                @"<configuration>
    <system.web></system.web>
</configuration>
", mockProjectSystem.OpenFile("web.config").ReadToEnd());
        }
        public void InstallPackagesFromRegistryRepositoryThrowsWhenPackageIsMissing()
        {
            // Arrange
            var registryPath    = @"SOFTWARE\NuGet\Repository";
            var registryKey     = "PreinstalledPackages";
            var registryValue   = @"C:\PreinstalledPackages";
            var hkcu_repository = new Mock <IRegistryKey>();
            var hkcu            = new Mock <IRegistryKey>();

            hkcu_repository.Setup(k => k.GetValue(registryKey)).Returns(registryValue);
            hkcu.Setup(r => r.OpenSubKey(registryPath)).Returns(hkcu_repository.Object);

            var services = new Mock <IVsPackageInstallerServices>();

            services.Setup(x => x.IsPackageInstalled(It.IsAny <Project>(), It.IsAny <string>())).Returns(false);

            var localRepository = new Mock <MockPackageRepository>()
            {
                CallBase = true
            }.As <ISharedPackageRepository>().Object;
            var sourceRepository  = new MockPackageRepository();
            var projectRepository = new MockProjectPackageRepository(localRepository);
            var fileSystem        = new MockFileSystem();
            var projectSystem     = new MockProjectSystem();
            var pathResolver      = new DefaultPackagePathResolver(new MockProjectSystem());
            var project           = TestUtils.GetProject("Foo");
            var projectManager    = new ProjectManager(null, pathResolver, projectSystem, projectRepository);
            var packageManager    = new Mock <VsPackageManager>(
                TestUtils.GetSolutionManager(),
                sourceRepository,
                new Mock <IFileSystemProvider>().Object,
                fileSystem,
                localRepository,
                new Mock <IDeleteOnRestartManager>().Object,
                new Mock <VsPackageInstallerEvents>().Object,
                /* multiFrameworkTargeting */ null)
            {
                CallBase = true
            };
            var packageManagerFactory    = new Mock <IVsPackageManagerFactory>();
            var packageRepositoryFactory = new Mock <IPackageRepositoryFactory>(MockBehavior.Strict);

            packageManagerFactory.Setup(m => m.CreatePackageManager(It.IsAny <IPackageRepository>(), false)).Returns(packageManager.Object);
            packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager);
            packageRepositoryFactory.Setup(r => r.CreateRepository(@"x:\test")).Returns(new MockPackageRepository()).Verifiable();

            var installer = new VsPackageInstaller(packageManagerFactory.Object, null, null, null, new Mock <IVsCommonOperations>().Object, new Mock <ISolutionManager>().Object, null, services.Object, registryKeys: new[] { hkcu.Object });
            var packages  = new Dictionary <string, string>();

            packages.Add("A", "1.0.0");

            // Act & Assert
            var exception = Assert.Throws <InvalidOperationException>(() => installer.InstallPackagesFromRegistryRepository(registryKey, isPreUnzipped: false, skipAssemblyReferences: false, project: project, packageVersions: packages));

            Assert.True(exception.Message.Contains("A.1.0.0 : "));
        }
Ejemplo n.º 22
0
        /* !!! Should be changed to a test using Install-Package cmdlet
         * [Fact]
         * public void ReInstallingPackageAfterUninstallingDependencyShouldReinstallAllDependencies()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  PackageManager packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
         *      dependencies: new List<PackageDependency> {
         *          new PackageDependency("B")
         *      });
         *
         *  IPackage packageB = PackageUtility.CreatePackage("B", "1.0",
         *                                                  dependencies: new List<PackageDependency> {
         *                                                      new PackageDependency("C")
         *                                                  });
         *
         *  var packageC = PackageUtility.CreatePackage("C", "1.0");
         *
         *  localRepository.AddPackage(packageA);
         *  localRepository.AddPackage(packageB);
         *
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageB);
         *  sourceRepository.AddPackage(packageC);
         *
         *  // Act
         *  packageManager.InstallPackage("A");
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(packageA));
         *  Assert.True(localRepository.Exists(packageB));
         *  Assert.True(localRepository.Exists(packageC));
         * } */

        /* !!! Should be changed to a test using Install-Package cmdlet
         * [Fact]
         * public void InstallPackageThrowsExceptionPackageIsNotInstalled()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new Mock<IProjectSystem>();
         *  projectSystem.Setup(m => m.AddFiles(It.IsAny<IEnumerable<IPackageFile>>(), "A.1.0"))
         *      .Throws<UnauthorizedAccessException>();
         *  projectSystem.Setup(m => m.Root).Returns("FakeRoot");
         *  PackageManager packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem.Object), projectSystem.Object, localRepository);
         *
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0", new[] { "file" });
         *  sourceRepository.AddPackage(packageA);
         *
         *  // Act
         *  ExceptionAssert.Throws<UnauthorizedAccessException>(() => packageManager.InstallPackage("A"));
         *
         *
         *  // Assert
         *  Assert.False(packageManager.LocalRepository.Exists(packageA));
         * } */

        /* !!! Should be changed to a test using Install-Package cmdlet
         * [Fact]
         * public void UpdatePackageDoesNothingIfNoUpdatesAvailable()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  PackageManager packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *
         *  IPackage A10 = PackageUtility.CreatePackage("A", "1.0");
         *  localRepository.Add(A10);
         *
         *  // Act
         *  packageManager.UpdatePackage("A", updateDependencies: true, allowPrereleaseVersions: false);
         *
         *  // Assert
         *  Assert.True(localRepository.Exists("A", new SemanticVersion("1.0")));
         * }
         *
         * [Fact]
         * public void InstallPackageInstallsPrereleasePackages()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  var packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0-beta",
         *                                                   dependencies: new[] {
         *                                                       new PackageDependency("C")
         *                                                   });
         *
         *  IPackage packageC = PackageUtility.CreatePackage("C", "1.0.0");
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageC);
         *
         *  // Act
         *  packageManager.InstallPackage("A", version: null, ignoreDependencies: false, allowPrereleaseVersions: true);
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(packageA));
         *  Assert.True(localRepository.Exists(packageC));
         * }
         *
         * [Fact]
         * public void InstallPackageDisregardTargetFrameworkOfDependencies()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  var packageManager = new PackageManager(
         *      sourceRepository,
         *      new DefaultPackagePathResolver(projectSystem),
         *      projectSystem,
         *      localRepository);
         *
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
         *                                                   dependencies: new[] {
         *                                                       new PackageDependency("C", null)
         *                                                   });
         *
         *  IPackage packageC = PackageUtility.CreatePackage("C", "1.0.0");
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageC);
         *
         *  // Act
         *  packageManager.InstallPackage("A", version: null, ignoreDependencies: false, allowPrereleaseVersions: true);
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(packageA));
         *  Assert.True(localRepository.Exists(packageC));
         * }
         *
         * [Fact]
         * public void InstallPackageInstallsPackagesWithPrereleaseDependenciesIfFlagIsSet()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  var packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
         *                                                   dependencies: new[] {
         *                                                       new PackageDependency("C")
         *                                                   });
         *
         *  IPackage packageC = PackageUtility.CreatePackage("C", "1.0.0-RC-1");
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageC);
         *
         *  // Act
         *  packageManager.InstallPackage("A", version: null, ignoreDependencies: false, allowPrereleaseVersions: true);
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(packageA));
         *  Assert.True(localRepository.Exists(packageC));
         * }
         *
         * [Fact]
         * public void InstallPackageThrowsIfDependencyIsPrereleaseAndFlagIsNotSet()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  var packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
         *                                                   dependencies: new[] {
         *                                                       new PackageDependency("C")
         *                                                   });
         *
         *  IPackage packageC = PackageUtility.CreatePackage("C", "1.0.0-RC-1");
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageC);
         *
         *  // Act and Assert
         *  ExceptionAssert.Throws<InvalidOperationException>(
         *      () => packageManager.InstallPackage("A", version: null, ignoreDependencies: false, allowPrereleaseVersions: false),
         *      "Unable to resolve dependency 'C'.");
         * }
         *
         * [Fact]
         * public void InstallPackageInstallsLowerReleaseVersionIfPrereleaseFlagIsNotSet()
         * {
         *  // Arrange
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  var packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
         *                                                   dependencies: new[] {
         *                                                       new PackageDependency("C")
         *                                                   });
         *
         *  IPackage packageC_RC = PackageUtility.CreatePackage("C", "1.0.0-RC-1");
         *  IPackage packageC = PackageUtility.CreatePackage("C", "0.9");
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageC);
         *  sourceRepository.AddPackage(packageC_RC);
         *
         *  // Act
         *  packageManager.InstallPackage("A", version: null, ignoreDependencies: false, allowPrereleaseVersions: false);
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(packageA));
         *  Assert.True(localRepository.Exists(packageC));
         * } */

        /* !!! Should be changed to a test using Install-Package cmdlet
         * [Fact]
         * public void InstallPackageConsidersAlreadyInstalledPrereleasePackagesWhenResolvingDependencies()
         * {
         *  // Arrange
         *  var packageB_05 = PackageUtility.CreatePackage("B", "0.5.0");
         *  var packageB_10a = PackageUtility.CreatePackage("B", "1.0.0-a");
         *  var packageA = PackageUtility.CreatePackage("A",
         *                      dependencies: new[] { new PackageDependency("B", VersionUtility.ParseVersionSpec("[0.5.0, 2.0.0)")) });
         *
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  var packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageB_10a);
         *  sourceRepository.AddPackage(packageB_05);
         *
         *  // Act
         *  // The allowPrereleaseVersions flag should be irrelevant since we specify a version.
         *  packageManager.InstallPackage("B", version: new SemanticVersion("1.0.0-a"), ignoreDependencies: false, allowPrereleaseVersions: false);
         *  // Verify we actually did install B.1.0.0a
         *  Assert.True(localRepository.Exists(packageB_10a));
         *
         *  packageManager.InstallPackage("A");
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(packageA));
         *  Assert.True(localRepository.Exists(packageB_10a));
         *
         * } */

        /* !!! Should be changed to a test using Install-Package cmdlet
         * [Fact]
         * public void InstallPackageNotifiesBatchProcessorWhenExpandingPackageFiles()
         * {
         *  // Arrange
         *  var package = PackageUtility.CreatePackage("B", "0.5.0", content: new[] { "content.txt" }, assemblyReferences: new[] { "Ref.dll" });
         *
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var fileSystem = new Mock<MockFileSystem> { CallBase = true };
         *  var batchProcessor = fileSystem.As<IBatchProcessor<string>>();
         *  batchProcessor.Setup(s => s.BeginProcessing(It.IsAny<IEnumerable<string>>(), PackageAction.Install))
         *                .Callback((IEnumerable<string> files, PackageAction _) => Assert.Equal(new[] { @"content\content.txt", "Ref.dll" }, files))
         *                .Verifiable();
         *  batchProcessor.Setup(s => s.EndProcessing()).Verifiable();
         *
         *  var packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(fileSystem.Object), fileSystem.Object, localRepository);
         *  sourceRepository.AddPackage(package);
         *
         *  // Act
         *  packageManager.InstallPackage("B");
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(package));
         *  batchProcessor.Verify();
         * }
         *
         * [Fact]
         * public void InstallPackageDoesNotPerformWalkInfoCheckWhenPassingTheFlag()
         * {
         *  // In this test, we simulate installing a solution-level package which depends on
         *  // a project-level package. Under normal condition, this is disallowed by NuGet.
         *  // However, if passing the 'ignoreWalkInfo' parameter with value of 'true',
         *  // NuGet will happily accept that. Hence the installation will succeed.
         *  // This is used by the package restore mode.
         *
         *  var localRepository = new MockSharedPackageRepository();
         *  var sourceRepository = new MockPackageRepository();
         *  var projectSystem = new MockProjectSystem();
         *  var packageManager = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);
         *
         *  // A is solution-level package
         *  IPackage packageA = PackageUtility.CreatePackage("A", "1.0.0",
         *                                                   tools: new string[] { "init.ps1"},
         *                                                   dependencies: new[] {
         *                                                       new PackageDependency("C")
         *                                                   });
         *
         *  IPackage packageC = PackageUtility.CreatePackage("C", "1.0.0-RC-1", content: new string[] { "a.txt" } );
         *  sourceRepository.AddPackage(packageA);
         *  sourceRepository.AddPackage(packageC);
         *
         *  // Act
         *  packageManager.InstallPackage(packageA, ignoreDependencies: false, allowPrereleaseVersions: true, ignoreWalkInfo: true);
         *
         *  // Assert
         *  Assert.True(localRepository.Exists(packageA));
         *  Assert.True(localRepository.Exists(packageC));
         * } */

        private PackageManager CreatePackageManager()
        {
            var projectSystem = new MockProjectSystem();

            return(new PackageManager(
                       new MockPackageRepository(),
                       new DefaultPackagePathResolver(projectSystem),
                       projectSystem,
                       new MockSharedPackageRepository()));
        }
Ejemplo n.º 23
0
        public void UninstallingSatellitePackageRemovesFilesFromRuntimePackageFolder()
        {
            // Arrange
            // Create a runtime package and a satellite package that has a dependency on the runtime package, and uses the
            // local suffix convention.
            var runtimePackage = PackageUtility.CreatePackage("foo", "1.0.0",
                                                              assemblyReferences: new[] {
                @"lib\foo.dll"
            },
                                                              content: new[] {
                @"english.txt"
            });

            var satellitePackage = PackageUtility.CreatePackage("foo.ja-jp", "1.0.0", language: "ja-jp",
                                                                satelliteAssemblies: new[] {
                @"lib\ja-jp\foo.resources.dll",
                @"lib\ja-jp\foo.xml",
                @"lib\japanese.xml"
            },
                                                                content: new[] {
                @"english.txt",
                @"japanese.txt"
            },
                                                                dependencies: new[] { new PackageDependency("foo") });

            var projectSystem    = new MockProjectSystem();
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var packageManager   = new PackageManager(sourceRepository, new DefaultPackagePathResolver(projectSystem), projectSystem, localRepository);

            sourceRepository.AddPackage(runtimePackage);
            sourceRepository.AddPackage(satellitePackage);

            // Act
            packageManager.InstallPackage("foo");
            packageManager.InstallPackage("foo.ja-jp");

            packageManager.UninstallPackage("foo.ja-jp");

            // Assert
            Assert.Equal(2, projectSystem.Paths.Count);
            Assert.True(projectSystem.FileExists(@"foo.1.0.0\content\english.txt"));
            Assert.True(projectSystem.FileExists(@"foo.1.0.0\lib\foo.dll"));
            Assert.False(projectSystem.FileExists(@"foo.1.0.0\lib\ja-jp\foo.resources.dll"));
            Assert.False(projectSystem.FileExists(@"foo.1.0.0\lib\ja-jp\foo.xml"));

            Assert.False(projectSystem.FileExists(@"foo.ja-jp.1.0.0\content\english.txt"));
            Assert.False(projectSystem.FileExists(@"foo.ja-jp.1.0.0\content\japanese.txt"));
            Assert.False(projectSystem.FileExists(@"foo.ja-jp.1.0.0\lib\japanese.xml"));
            Assert.False(projectSystem.FileExists(@"foo.ja-jp.1.0.0\lib\ja-jp\foo.resources.dll"));
            Assert.False(projectSystem.FileExists(@"foo.ja-jp.1.0.0\lib\ja-jp\foo.xml"));

            Assert.False(projectSystem.FileExists(@"foo.1.0.0\lib\japanese.xml"));
            Assert.False(projectSystem.FileExists(@"foo.1.0.0\content\japanese.txt"));
        }
Ejemplo n.º 24
0
        public void CreateRefreshFileAddsRefreshFileUnderBinDirectory()
        {
            // Arrange
            var projectSystem = new MockProjectSystem(VersionUtility.DefaultTargetFramework, @"x:\test\site\");
            var assemblyPath  = @"x:\test\packages\Foo.1.0\lib\net40\Foo.dll";

            // Act
            projectSystem.CreateRefreshFile(assemblyPath);

            // Assert
            Assert.Equal(@"..\packages\Foo.1.0\lib\net40\Foo.dll", projectSystem.ReadAllText(@"bin\Foo.dll.refresh"));
        }
Ejemplo n.º 25
0
        public void CreateRefreshFileUsesAbsolutePathIfRelativePathsCannotBeFormed()
        {
            // Arrange
            var projectSystem = new MockProjectSystem(VersionUtility.DefaultTargetFramework, @"z:\test\site\");
            var assemblyPath  = @"x:\test\packages\Foo.1.0\lib\net40\Bar.net40.dll";

            // Act
            projectSystem.CreateRefreshFile(assemblyPath);

            // Assert
            Assert.Equal(@"x:\test\packages\Foo.1.0\lib\net40\Bar.net40.dll", projectSystem.ReadAllText(@"bin\Bar.net40.dll.refresh"));
        }
Ejemplo n.º 26
0
        public void UninstallPackageRemovesDependenciesIfFlagIsTrue()
        {
            // Arrange
            var activeRepository = new MockPackageRepository();
            var localRepository  = new Mock <MockPackageRepository>()
            {
                CallBase = true
            };

            localRepository.As <ISharedPackageRepository>();
            var projectRepository = new MockProjectPackageRepository(localRepository.Object);
            var project           = TestUtils.GetProject("Foo");
            var projectSystem     = new MockProjectSystem();
            var projectManager    = new ProjectManager(activeRepository, new DefaultPackagePathResolver(new MockFileSystem()), projectSystem, projectRepository);
            var packageA          = PackageUtility.CreatePackage("A", dependencies: new[] { new PackageDependency("B") });
            var packageB          = PackageUtility.CreatePackage("B", content: new[] { "file1.txt" });
            var scriptExecutor    = new Mock <IScriptExecutor>(MockBehavior.Strict);

            scriptExecutor.Setup(s => s.Execute(@"C:\MockFileSystem\A.1.0", "uninstall.ps1", packageA, project, It.IsAny <FrameworkName>(), NullLogger.Instance)).Returns(true).Verifiable();
            scriptExecutor.Setup(s => s.Execute(@"C:\MockFileSystem\B.1.0", "uninstall.ps1", packageB, project, It.IsAny <FrameworkName>(), NullLogger.Instance)).Returns(true).Verifiable();
            var packageManager = new Mock <VsPackageManager>(
                TestUtils.GetSolutionManager(),
                activeRepository,
                new Mock <IFileSystemProvider>().Object,
                new MockFileSystem(),
                localRepository.Object,
                new Mock <IDeleteOnRestartManager>().Object,
                new Mock <VsPackageInstallerEvents>().Object,
                /* multiFrameworkTargeting */ null)
            {
                CallBase = true
            };

            projectManager.LocalRepository.AddPackage(packageA);
            projectManager.LocalRepository.AddPackage(packageB);
            var packageManagerFactory = new Mock <IVsPackageManagerFactory>();

            packageManagerFactory.Setup(m => m.CreatePackageManager(activeRepository, false)).Returns(packageManager.Object);
            packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager).Verifiable();
            var packageUninstaller = new VsPackageUninstaller(packageManagerFactory.Object, activeRepository, scriptExecutor.Object);

            // Act
            localRepository.Object.AddPackage(packageA);
            localRepository.Object.AddPackage(packageB);
            packageUninstaller.UninstallPackage(project, "A", removeDependencies: true);

            // Assert
            scriptExecutor.Verify();
            Assert.False(localRepository.Object.Contains(packageA));
            Assert.False(localRepository.Object.Contains(packageB));
        }
Ejemplo n.º 27
0
        public void AddFilesAskingForResolutionForEveryConflict()
        {
            var resolutions = new FileConflictResolution[]
            {
                FileConflictResolution.Ignore,
                FileConflictResolution.Overwrite,
                FileConflictResolution.Ignore,
                FileConflictResolution.IgnoreAll,
                FileConflictResolution.OverwriteAll,
                FileConflictResolution.Overwrite,
            };

            var index  = 0;
            var logger = new Mock <ILogger>();

            logger.Setup(l => l.ResolveFileConflict(It.IsAny <string>()))
            .Returns(() => resolutions[index++]);

            // Arrange
            var project = new MockProjectSystem();

            project.AddFile("a.txt", "this is a");
            project.AddFile("b.txt", "this is b");
            project.AddFile("c.txt", "this is c");
            project.AddFile("d.txt", "this is d");
            project.AddFile("e.txt", "this is e");
            project.AddFile("f.txt", "this is f");
            project.Logger = logger.Object;

            var files = PackageUtility.CreateFiles(new [] { "a.txt", "b.txt", "c.txt", "d.txt", "e.txt", "f.txt" }, "content");

            // Act
            project.AddFiles(files, new Dictionary <FileTransformExtensions, IPackageFileTransformer>());

            // Assert
            Assert.True(project.FileExists("a.txt"));
            Assert.True(project.FileExists("b.txt"));
            Assert.True(project.FileExists("c.txt"));
            Assert.True(project.FileExists("d.txt"));
            Assert.True(project.FileExists("e.txt"));
            Assert.True(project.FileExists("f.txt"));

            logger.Verify(l => l.ResolveFileConflict(It.IsAny <string>()), Times.Exactly(6));

            Assert.Equal("this is a", project.ReadAllText("a.txt"));
            Assert.Equal("content\\b.txt", project.ReadAllText("b.txt"));
            Assert.Equal("this is c", project.ReadAllText("c.txt"));
            Assert.Equal("this is d", project.ReadAllText("d.txt"));
            Assert.Equal("content\\e.txt", project.ReadAllText("e.txt"));
            Assert.Equal("content\\f.txt", project.ReadAllText("f.txt"));
        }
Ejemplo n.º 28
0
        public void AddPackageAddsFileToFileSystem()
        {
            // Arrange
            var mockFileSystem = new MockProjectSystem();
            var repository     = new LocalPackageRepository(new DefaultPackagePathResolver(mockFileSystem),
                                                            mockFileSystem);
            IPackage package = PackageUtility.CreatePackage("A", "1.0");

            // Act
            repository.AddPackage(package);

            // Assert
            Assert.True(mockFileSystem.FileExists(@"A.1.0\A.1.0.nupkg"));
        }
Ejemplo n.º 29
0
        public void UpdatePackageWithMultipleSharedDependencies()
        {
            // Arrange
            var localRepository = new Mock <MockPackageRepository>()
            {
                CallBase = true
            }.As <ISharedPackageRepository>();
            var projectRepository = new MockProjectPackageRepository(localRepository.Object);
            var sourceRepository  = new MockPackageRepository();
            var fileSystem        = new MockFileSystem();
            var projectSystem     = new MockProjectSystem();
            var pathResolver      = new DefaultPackagePathResolver(fileSystem);
            // A1 -> B1, C1
            // A2 -> B1
            var A10 = PackageUtility.CreatePackage("A", "1.0", assemblyReferences: new[] { "A1.dll" }, dependencies: new[] {
                new PackageDependency("B", VersionUtility.ParseVersionSpec("1.0")),
                new PackageDependency("C", VersionUtility.ParseVersionSpec("1.0")),
            });
            var A20 = PackageUtility.CreatePackage("A", "2.0", assemblyReferences: new[] { "A2.dll" }, dependencies: new[] {
                new PackageDependency("B", VersionUtility.ParseVersionSpec("1.0"))
            });
            var B10 = PackageUtility.CreatePackage("B", "1.0", assemblyReferences: new[] { "B1.dll" });
            var C10 = PackageUtility.CreatePackage("C", "1.0", assemblyReferences: new[] { "C1.dll" });

            sourceRepository.AddPackage(A10);
            sourceRepository.AddPackage(A20);
            sourceRepository.AddPackage(B10);
            sourceRepository.AddPackage(C10);
            localRepository.Object.AddPackage(A10);
            localRepository.Object.AddPackage(A20);
            localRepository.Object.AddPackage(B10);
            localRepository.Object.AddPackage(C10);
            var packageManager = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, fileSystem, localRepository.Object, new Mock <IRecentPackageRepository>().Object);
            var projectManager = new ProjectManager(localRepository.Object, pathResolver, projectSystem, projectRepository);

            projectManager.AddPackageReference("A", new Version("1.0"));

            // Act
            packageManager.UpdatePackage(projectManager, "A", version: null, updateDependencies: true, logger: NullLogger.Instance);

            // Assert
            Assert.IsFalse(packageManager.LocalRepository.Exists(A10));
            Assert.IsFalse(projectSystem.ReferenceExists("A1.dll"));
            Assert.IsFalse(packageManager.LocalRepository.Exists(C10));
            Assert.IsFalse(projectSystem.ReferenceExists("C1.dll"));
            Assert.IsTrue(packageManager.LocalRepository.Exists(B10));
            Assert.IsTrue(projectSystem.ReferenceExists("B1.dll"));
            Assert.IsTrue(packageManager.LocalRepository.Exists(A20));
            Assert.IsTrue(projectSystem.ReferenceExists("A2.dll"));
        }
Ejemplo n.º 30
0
        public void AddFilesAddFilesToProjectSystem()
        {
            // Arrange
            var fileSystem = new MockProjectSystem();
            var files      = PackageUtility.CreateFiles(new[] { "A", "B", "C" });

            // Act
            fileSystem.AddFiles(files, String.Empty);

            // Assert
            Assert.True(fileSystem.FileExists("A"));
            Assert.True(fileSystem.FileExists("B"));
            Assert.True(fileSystem.FileExists("C"));
        }