示例#1
0
        public async Task UWPRestore_BlankUWPAppWithExcludes()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                    using (var cacheContext = new SourceCacheContext())
                    {
                        var configJson = JObject.Parse(@"{
                  ""dependencies"": {
                    ""Microsoft.NETCore.UniversalWindowsPlatform"": {
                        ""version"": ""5.0.0"",
                        ""exclude"": ""build,runtime,compile,native""
                     }
                  },
                  ""frameworks"": {
                    ""uap10.0"": {}
                  },
                  ""runtimes"": {
                    ""win10-arm"": {},
                    ""win10-arm-aot"": {},
                    ""win10-x86"": {},
                    ""win10-x86-aot"": {},
                    ""win10-x64"": {},
                    ""win10-x64-aot"": {}
                  }
                }");

                        var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                        var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                        var logger = new TestLogger();
                        var clientPolicyContext = ClientPolicyContext.GetClientPolicy(NullSettings.Instance, logger);
                        var request             = new TestRestoreRequest(spec, sources, packagesDir, cacheContext, clientPolicyContext, logger)
                        {
                            LockFilePath = Path.Combine(projectDir, "project.lock.json")
                        };

                        var lockFileFormat = new LockFileFormat();
                        var command        = new RestoreCommand(request);

                        // Act
                        var result = await command.ExecuteAsync();

                        await result.CommitAsync(logger, CancellationToken.None);

                        var lockFileJson = JObject.Parse(File.OpenText(request.LockFilePath).ReadToEnd());

                        // Assert
                        Assert.Equal(0, result.CompatibilityCheckResults.Sum(checkResult => checkResult.Issues.Count));
                        Assert.Equal(0, logger.Errors);
                        Assert.Equal(0, logger.Warnings);
                        Assert.Equal(118, result.GetAllInstalled().Count);
                    }
        }
示例#2
0
        public async Task UWPRestore_UWPAppWithOffice365Packages()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                {
                    var configJson = JObject.Parse(@"{
                  ""dependencies"": {
                    ""Microsoft.ApplicationInsights"": ""1.0.0"",
                    ""Microsoft.ApplicationInsights.PersistenceChannel"": ""1.0.0"",
                    ""Microsoft.ApplicationInsights.WindowsApps"": ""1.0.0"",
                    ""Microsoft.Azure.ActiveDirectory.GraphClient"": ""2.0.6"",
                    ""Microsoft.IdentityModel.Clients.ActiveDirectory"": ""2.14.201151115"",
                    ""Microsoft.NETCore.UniversalWindowsPlatform"": ""5.0.0"",
                    ""Microsoft.Office365.Discovery"": ""1.0.22"",
                    ""Microsoft.Office365.OutlookServices"": ""1.0.35"",
                    ""Microsoft.Office365.SharePoint"": ""1.0.22""
                  },
                  ""frameworks"": {
                    ""uap10.0"": {}
                  },
                  ""runtimes"": {
                    ""win10-arm"": {},
                    ""win10-arm-aot"": {},
                    ""win10-x86"": {},
                    ""win10-x86-aot"": {},
                    ""win10-x64"": {},
                    ""win10-x64-aot"": {}
                  }
                }");

                    var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                    var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                    var logger  = new TestLogger();
                    var request = new TestRestoreRequest(spec, sources, packagesDir, logger);
                    request.LockFilePath = Path.Combine(projectDir, "project.lock.json");

                    var lockFileFormat = new LockFileFormat();
                    var command        = new RestoreCommand(request);

                    // Act
                    var result = await command.ExecuteAsync();

                    await result.CommitAsync(logger, CancellationToken.None);

                    // Assert
                    Assert.Equal(0, result.CompatibilityCheckResults.Sum(checkResult => checkResult.Issues.Count));
                    Assert.Equal(0, logger.Errors);
                    Assert.Equal(0, logger.Warnings);
                    Assert.Equal(140, result.GetAllInstalled().Count);
                }
        }
示例#3
0
        public async Task GetInstalledVersion_WithFloating_WithAssetsFile_ReturnsVersionsFromAssetsSpecs()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                // Setup
                var projectName     = "project1";
                var projectFullPath = Path.Combine(testDirectory.Path, projectName + ".csproj");

                // Project
                var projectCache = new ProjectSystemCache();
                IVsProjectAdapter projectAdapter = (new Mock <IVsProjectAdapter>()).Object;
                var project = CreateNetCorePackageReferenceProject(projectName, projectFullPath, projectCache);

                var projectNames = GetTestProjectNames(projectFullPath, projectName);
                var packageSpec  = GetPackageSpec(projectName, projectFullPath, "[*, )");

                // Restore info
                var projectRestoreInfo = ProjectJsonTestHelpers.GetDGSpecFromPackageSpecs(packageSpec);
                projectCache.AddProjectRestoreInfo(projectNames, projectRestoreInfo, new List <IAssetsLogMessage>());
                projectCache.AddProject(projectNames, projectAdapter, project).Should().BeTrue();

                // Package directories
                var sources       = new List <PackageSource>();
                var packagesDir   = new DirectoryInfo(Path.Combine(testDirectory, "globalPackages"));
                var packageSource = new DirectoryInfo(Path.Combine(testDirectory, "packageSource"));
                packagesDir.Create();
                packageSource.Create();
                sources.Add(new PackageSource(packageSource.FullName));

                var logger  = new TestLogger();
                var request = new TestRestoreRequest(packageSpec, sources, packagesDir.FullName, logger)
                {
                    LockFilePath = Path.Combine(testDirectory, "project.assets.json")
                };

                await SimpleTestPackageUtility.CreateFullPackageAsync(packageSource.FullName, "packageA", "4.0.0");

                // Act
                var command = new RestoreCommand(request);
                var result  = await command.ExecuteAsync();

                await result.CommitAsync(logger, CancellationToken.None);

                var packages = await project.GetInstalledPackagesAsync(CancellationToken.None);

                // Asert
                Assert.True(result.Success);
                packages.Should().Contain(a => a.PackageIdentity.Equals(new PackageIdentity("packageA", new NuGetVersion("4.0.0"))));

                var cache_packages = await project.GetInstalledPackagesAsync(CancellationToken.None);

                cache_packages.Should().Contain(a => a.PackageIdentity.Equals(new PackageIdentity("packageA", new NuGetVersion("4.0.0"))));
            }
        }
示例#4
0
        public async Task UWPRestore_ModernPCL()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                {
                    var configJson = JObject.Parse(@"{
                  ""supports"": {
                    ""net46.app"": { },
                    ""uwp.10.0.app"": { },
                    ""dnxcore50.app"": { }
                        },
                  ""dependencies"": {
                    ""Microsoft.NETCore"": ""5.0.0"",
                    ""Microsoft.NETCore.Portable.Compatibility"": ""1.0.0""
                  },
                  ""frameworks"": {
                    ""dotnet"": {
                      ""imports"": ""portable-net452+win81""
                    }
                  }
                }");

                    var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                    var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                    var logger  = new TestLogger();
                    var request = new TestRestoreRequest(spec, sources, packagesDir, logger);
                    request.LockFilePath = Path.Combine(projectDir, "project.lock.json");

                    var lockFileFormat = new LockFileFormat();
                    var command        = new RestoreCommand(request);

                    // Act
                    var result = await command.ExecuteAsync();

                    await result.CommitAsync(logger, CancellationToken.None);

                    // Assert
                    Assert.Equal(0, result.CompatibilityCheckResults.Sum(checkResult => checkResult.Issues.Count));
                    Assert.True(0 == logger.Errors, logger.ShowMessages());
                    Assert.Equal(0, logger.Warnings);
                    Assert.Equal(86, result.GetAllInstalled().Count);
                }
        }
示例#5
0
        public async Task UWPRestore_VerifySameResultWhenRestoringWithLocalPackages()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                    using (var cacheContext = new SourceCacheContext())
                    {
                        var configJson = JObject.Parse(@"{
                ""runtimes"": {
                    ""win7-x86"": { }
                    },
                ""frameworks"": {
                ""dnxcore50"": {
                    ""dependencies"": {
                    ""Microsoft.NETCore"": ""5.0.1-beta-23225""
                    },
                    ""imports"": ""portable-net451+win81""
                }
                }
            }");

                        var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                        var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                        var logger  = new TestLogger();
                        var request = new TestRestoreRequest(spec, sources, packagesDir, cacheContext, logger);
                        request.LockFilePath = Path.Combine(projectDir, "project.lock.json");

                        var lockFileFormat = new LockFileFormat();
                        var command        = new RestoreCommand(request);

                        // Act
                        var result = await command.ExecuteAsync();

                        var result2 = await command.ExecuteAsync();

                        // Assert
                        Assert.Equal(0, logger.Errors);
                        Assert.Equal(0, logger.Warnings);
                        Assert.Equal(result.LockFile, result2.LockFile);
                    }
        }
示例#6
0
        public async Task GetInstalledVersion_WithoutPackages_ReturnsEmpty()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                // Setup
                var projectName     = "project1";
                var projectFullPath = Path.Combine(testDirectory.Path, projectName + ".csproj");

                // Project
                var projectCache = new ProjectSystemCache();
                IVsProjectAdapter projectAdapter = (new Mock <IVsProjectAdapter>()).Object;
                var project = CreateNetCorePackageReferenceProject(projectName, projectFullPath, projectCache);

                var projectNames = GetTestProjectNames(projectFullPath, projectName);
                var packageSpec  = GetPackageSpecNoPackages(projectName, projectFullPath);

                // Restore info
                var projectRestoreInfo = ProjectJsonTestHelpers.GetDGSpecFromPackageSpecs(packageSpec);
                projectCache.AddProjectRestoreInfo(projectNames, projectRestoreInfo, new List <IAssetsLogMessage>());
                projectCache.AddProject(projectNames, projectAdapter, project).Should().BeTrue();

                // Package directories
                var sources       = new List <PackageSource>();
                var packagesDir   = new DirectoryInfo(Path.Combine(testDirectory, "globalPackages"));
                var packageSource = new DirectoryInfo(Path.Combine(testDirectory, "packageSource"));
                packagesDir.Create();
                packageSource.Create();
                sources.Add(new PackageSource(packageSource.FullName));

                var logger  = new TestLogger();
                var request = new TestRestoreRequest(packageSpec, sources, packagesDir.FullName, logger);

                // Act
                var command = new RestoreCommand(request);
                var result  = await command.ExecuteAsync();

                await result.CommitAsync(logger, CancellationToken.None);

                var packages = await project.GetInstalledPackagesAsync(CancellationToken.None);

                // Asert
                packages.Should().BeEmpty();
            }
        }
示例#7
0
        public async Task UWPRestore_SystemDependencyVersionConflict()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                {
                    var configJson = JObject.Parse(@"{
                  ""dependencies"": {
                    ""System.Text.Encoding"": ""4.0.10"",
                    ""System.Collections"": ""4.0.11-beta-23225""
                  },
                  ""frameworks"": {
                    ""uap10.0"": {}
                  }
                }");

                    var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                    var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                    var logger  = new TestLogger();
                    var request = new TestRestoreRequest(spec, sources, packagesDir, logger);
                    request.LockFilePath = Path.Combine(projectDir, "project.lock.json");

                    var lockFileFormat = new LockFileFormat();
                    var command        = new RestoreCommand(request);

                    // Act
                    var result = await command.ExecuteAsync();

                    await result.CommitAsync(logger, CancellationToken.None);

                    var lockFileJson = JObject.Parse(File.OpenText(request.LockFilePath).ReadToEnd());

                    // Assert
                    Assert.Equal(0, result.CompatibilityCheckResults.Sum(checkResult => checkResult.Issues.Count));
                    Assert.Equal(0, logger.Errors);
                    Assert.Equal(0, logger.Warnings);
                }
        }
示例#8
0
        public async Task UWPRestore_VerifySatellitePackagesAreCompatibleInPCL()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                {
                    var configJson = JObject.Parse(@"{
                  ""dependencies"": {
                    ""Microsoft.AspNet.Mvc.de"": ""5.2.3""
                  },
                  ""frameworks"": {
                    ""net46"": {
                    }
                  }
                }");

                    var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                    var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                    var logger  = new TestLogger();
                    var request = new TestRestoreRequest(spec, sources, packagesDir, logger);
                    request.LockFilePath = Path.Combine(projectDir, "project.lock.json");

                    var lockFileFormat = new LockFileFormat();
                    var command        = new RestoreCommand(request);

                    // Act
                    var result = await command.ExecuteAsync();

                    await result.CommitAsync(logger, CancellationToken.None);

                    // Assert
                    Assert.Equal(0, result.CompatibilityCheckResults.Sum(checkResult => checkResult.Issues.Count));
                    Assert.Equal(0, logger.Errors);
                    Assert.Equal(0, logger.Warnings);
                    Assert.Equal(5, result.GetAllInstalled().Count);
                }
        }
示例#9
0
        public async Task UWPRestore_BlankUWPAppV1()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                {
                    var configJson = JObject.Parse(@"{
                  ""dependencies"": {
                    ""Microsoft.NETCore.UniversalWindowsPlatform"": ""5.0.0""
                  },
                  ""frameworks"": {
                    ""uap10.0"": {}
                  },
                  ""runtimes"": {
                    ""win10-arm"": {},
                    ""win10-arm-aot"": {},
                    ""win10-x86"": {},
                    ""win10-x86-aot"": {},
                    ""win10-x64"": {},
                    ""win10-x64-aot"": {}
                  }
                }");

                    var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                    var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                    var logger  = new TestLogger();
                    var request = new TestRestoreRequest(spec, sources, packagesDir, logger);
                    request.LockFilePath = Path.Combine(projectDir, "project.lock.json");

                    // Set the lock file version to v1 to force a downgrade
                    request.LockFileVersion = 1;

                    var lockFileFormat = new LockFileFormat();
                    var command        = new RestoreCommand(request);

                    var expectedStream = GetResource("NuGet.Commands.FuncTest.compiler.resources.uwpBlankAppV1.json");

                    JObject expectedJson = null;

                    using (var reader = new StreamReader(expectedStream))
                    {
                        expectedJson = JObject.Parse(reader.ReadToEnd());
                    }

                    // Act
                    var result = await command.ExecuteAsync();

                    await result.CommitAsync(logger, CancellationToken.None);

                    var lockFileJson = JObject.Parse(File.OpenText(request.LockFilePath).ReadToEnd());
                    RemovePackageFolders(lockFileJson);

                    // Assert
                    Assert.True(result.Success);
                    Assert.Equal(0, result.CompatibilityCheckResults.Sum(checkResult => checkResult.Issues.Count));
                    Assert.Equal(0, logger.Errors);
                    Assert.Equal(0, logger.Warnings);
                    Assert.Equal(118, result.GetAllInstalled().Count);
                    Assert.Equal(expectedJson.ToString(), lockFileJson.ToString());
                }
        }
示例#10
0
        public async Task UWPRestore_BlankUWPApp()
        {
            // Arrange
            var sources = new List <PackageSource>();

            sources.Add(new PackageSource("https://api.nuget.org/v3/index.json"));

            using (var packagesDir = TestDirectory.Create())
                using (var projectDir = TestDirectory.Create())
                    using (var cacheContext = new SourceCacheContext())
                    {
                        var configJson = JObject.Parse(@"{
                  ""dependencies"": {
                    ""Microsoft.NETCore.UniversalWindowsPlatform"": ""5.0.0""
                  },
                  ""frameworks"": {
                    ""uap10.0"": {}
                  },
                  ""runtimes"": {
                    ""win10-arm"": {},
                    ""win10-arm-aot"": {},
                    ""win10-x86"": {},
                    ""win10-x86-aot"": {},
                    ""win10-x64"": {},
                    ""win10-x64-aot"": {}
                  }
                }");

                        var specPath = Path.Combine(projectDir, "TestProject", "project.json");
                        var spec     = JsonPackageSpecReader.GetPackageSpec(configJson.ToString(), "TestProject", specPath);

                        var logger  = new TestLogger();
                        var request = new TestRestoreRequest(spec, sources, packagesDir, cacheContext, logger);
                        request.LockFilePath = Path.Combine(projectDir, "project.lock.json");

                        var lockFileFormat = new LockFileFormat();
                        var command        = new RestoreCommand(request);

                        var expectedStream = GetResource("NuGet.Commands.FuncTest.compiler.resources.uwpBlankAppV2.json");

                        JObject expectedJson = null;

                        using (var reader = new StreamReader(expectedStream))
                        {
                            expectedJson = JObject.Parse(reader.ReadToEnd());
                        }

                        // Act
                        var result = await command.ExecuteAsync();

                        await result.CommitAsync(logger, CancellationToken.None);

                        var lockFileJson = JObject.Parse(File.OpenText(request.LockFilePath).ReadToEnd());
                        RemovePackageFolders(lockFileJson);

                        // Assert
                        Assert.True(result.Success);
                        Assert.Equal(0, result.CompatibilityCheckResults.Sum(checkResult => checkResult.Issues.Count));
                        Assert.Equal(0, logger.Errors);
                        Assert.Equal(0, logger.Warnings);
                        Assert.Equal(118, result.GetAllInstalled().Count);

                        // TODO: skipping comparing assets file since NuGet.org is doing repo sign for all the existing
                        // packages which is changing the sha512 in the assets file which fails the comparison.
                        // We should enable it once all the packages are repo signed.
                        // tracking issue# https://github.com/NuGet/Home/issues/7361
                        //Assert.Equal(expectedJson.ToString(), lockFileJson.ToString());
                    }
        }