public void BuildAssetsUtils_GenerateProjectRelativeAssetsFilePathInOtherDir()
        {
            using (var workingDir = TestDirectory.Create())
            {
                // Arrange
                var filePath   = Path.Combine(workingDir, "obj", "test.props");
                var assetsPath = Path.Combine(workingDir, "nuget", "project.assets.json");

                var doc  = BuildAssetsUtils.GenerateEmptyImportsFile();
                var file = new MSBuildOutputFile(filePath, doc);

                // Act
                BuildAssetsUtils.AddNuGetPropertiesToFirstImport(
                    new[] { file },
                    Enumerable.Empty <string>(),
                    string.Empty,
                    ProjectStyle.PackageReference,
                    assetsPath,
                    success: true);

                var props = TargetsUtility.GetMSBuildProperties(doc);

                Assert.Equal("$(MSBuildThisFileDirectory)project.assets.json".Replace('/', Path.DirectorySeparatorChar), props["ProjectAssetsFile"]);
            }
        }
Example #2
0
        public void AddNuGetProperty_WithPackageFolders_AddsSourceRootItem()
        {
            // Arrange
            var separator      = Path.DirectorySeparatorChar;
            var packageFolders = $"{separator}tmp{separator}gpf;{separator}tmp{separator}fallbackFolder";

            var doc = BuildAssetsUtils.GenerateEmptyImportsFile();

            // Act
            BuildAssetsUtils.AddNuGetProperties(
                doc,
                packageFolders: packageFolders.Split(';'),
                string.Empty,
                ProjectStyle.PackageReference,
                "/tmp/test/project.assets.json",
                success: true);

            var props           = TargetsUtility.GetMSBuildProperties(doc);
            var items           = TargetsUtility.GetMSBuildItems(doc);
            var sourceRootItems = items.Where(e => e.Item1.Equals("SourceRoot")).Select(e => e.Item2).ToList();

            // Assert
            Assert.Equal(packageFolders, props["NuGetPackageFolders"]);
            Assert.Equal(2, items.Count);
            Assert.Equal(2, sourceRootItems.Count);
            Assert.Equal($"{separator}tmp{separator}gpf{separator}", sourceRootItems[0]["Include"]);
            Assert.Equal($"{separator}tmp{separator}fallbackFolder{separator}", sourceRootItems[1]["Include"]);
        }
        public void BuildAssetsUtils_GenerateMSBuildAllProjectsProperty()
        {
            // Arrange & Act
            var doc = BuildAssetsUtils.GenerateEmptyImportsFile();

            var props = TargetsUtility.GetMSBuildProperties(doc);

            // Assert
            Assert.Equal("$(MSBuildAllProjects);$(MSBuildThisFileFullPath)", props["MSBuildAllProjects"]);
        }
        public void BuildAssetsUtils_GenerateProjectAssetsFilePath()
        {
            // Arrange
            var path = "/tmp/test/project.assets.json";

            var doc = BuildAssetsUtils.GenerateEmptyImportsFile();

            // Act
            BuildAssetsUtils.AddNuGetProperties(
                doc,
                Enumerable.Empty <string>(),
                string.Empty,
                ProjectStyle.PackageReference,
                path,
                success: true);

            var props = TargetsUtility.GetMSBuildProperties(doc);

            // Assert
            Assert.Equal(path, props["ProjectAssetsFile"]);
        }
        public void AddNuGetProperty_WithPackageFolders_AddsSourceRootItem()
        {
            // Arrange
            var packageFolders = @"/tmp/gpf;/tmp/fallbackFolder";

            var doc = BuildAssetsUtils.GenerateEmptyImportsFile();

            // Act
            BuildAssetsUtils.AddNuGetProperties(
                doc,
                packageFolders: packageFolders.Split(';'),
                string.Empty,
                ProjectStyle.PackageReference,
                "/tmp/test/project.assets.json",
                success: true);

            var props = TargetsUtility.GetMSBuildProperties(doc);
            var items = TargetsUtility.GetMSBuildItems(doc);

            // Assert
            Assert.Equal(packageFolders, props["NuGetPackageFolders"]);
            Assert.Equal(1, items.Count);
            Assert.Equal("$([MSBuild]::EnsureTrailingSlash($(NuGetPackageFolders)))", items["SourceRoot"]["Include"]);
        }
Example #6
0
        public async Task RestoreRunner_BasicRestore_VerifyFailureWritesFiles()
        {
            // Arrange
            var sources = new List <PackageSource>();

            var project1Json = @"
            {
              ""version"": ""1.0.0"",
              ""description"": """",
              ""authors"": [ ""author"" ],
              ""tags"": [ """" ],
              ""projectUrl"": """",
              ""licenseUrl"": """",
              ""frameworks"": {
                ""net45"": {
                    ""dependencies"": {
                        ""x"": ""1.0.0""
                    }
                }
              }
            }";

            using (var workingDir = TestDirectory.Create())
            {
                var packagesDir   = new DirectoryInfo(Path.Combine(workingDir, "globalPackages"));
                var packageSource = new DirectoryInfo(Path.Combine(workingDir, "packageSource"));
                var project1      = new DirectoryInfo(Path.Combine(workingDir, "projects", "project1"));
                packagesDir.Create();
                packageSource.Create();
                project1.Create();
                sources.Add(new PackageSource(packageSource.FullName));

                File.WriteAllText(Path.Combine(project1.FullName, "project.json"), project1Json);

                var specPath1 = Path.Combine(project1.FullName, "project.json");
                var spec1     = JsonPackageSpecReader.GetPackageSpec(project1Json, "project1", specPath1);

                var logger   = new TestLogger();
                var lockPath = Path.Combine(project1.FullName, "project.lock.json");

                var sourceRepos = sources.Select(source => Repository.Factory.GetCoreV3(source.Source)).ToList();

                var packageX = new SimpleTestPackageContext()
                {
                    Id      = "x",
                    Version = "1.0.0"
                };

                packageX.AddFile("build/net45/x.targets");

                var packageY = new SimpleTestPackageContext("y");
                packageX.Dependencies.Add(packageY);

                var yPath = SimpleTestPackageUtility.CreateFullPackage(packageSource.FullName, packageY);
                SimpleTestPackageUtility.CreateFullPackage(packageSource.FullName, packageX);

                // y does not exist
                yPath.Delete();

                var providerCache = new RestoreCommandProvidersCache();

                using (var cacheContext = new SourceCacheContext())
                {
                    var restoreContext = new RestoreArgs()
                    {
                        CacheContext         = cacheContext,
                        DisableParallel      = true,
                        GlobalPackagesFolder = packagesDir.FullName,
                        Sources = new List <string>()
                        {
                            packageSource.FullName
                        },
                        Inputs = new List <string>()
                        {
                            specPath1
                        },
                        Log = logger,
                        CachingSourceProvider = new CachingSourceProvider(new TestPackageSourceProvider(sources)),
                        RequestProviders      = new List <IRestoreRequestProvider>()
                        {
                            new ProjectJsonRestoreRequestProvider(providerCache)
                        }
                    };

                    var targetsPath = Path.Combine(project1.FullName, "project1.nuget.targets");
                    var propsPath   = Path.Combine(project1.FullName, "project1.nuget.props");

                    // Act
                    var summaries = await RestoreRunner.Run(restoreContext);

                    var summary = summaries.Single();

                    var targets = TargetsUtility.GetMSBuildPackageImports(targetsPath);

                    // Assert
                    Assert.False(summary.Success);
                    Assert.True(File.Exists(lockPath), lockPath);
                    Assert.True(File.Exists(targetsPath));
                    Assert.False(File.Exists(propsPath));
                    Assert.Equal(1, targets.Count);
                }
            }
        }