public void PerformUpToDateCheck_WhenALeafProjectHasNoCacheFile_ReturnsOnlyThatProject()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var projectA = GetPackageSpec("A", testDirectory.Path);
                var projectB = GetPackageSpec("B", testDirectory.Path);
                var projectC = GetPackageSpec("C", testDirectory.Path);

                // A => B
                projectA = projectA.WithTestProjectReference(projectB);
                // B => C
                projectB = projectB.WithTestProjectReference(projectC);
                DependencyGraphSpec dgSpec = ProjectJsonTestHelpers.GetDGSpecFromPackageSpecs(projectA, projectB, projectC);

                var checker = new SolutionUpToDateChecker();

                // Preconditions, run 1st check
                var actual   = checker.PerformUpToDateCheck(dgSpec, NullLogger.Instance);
                var expected = GetUniqueNames(projectA, projectB, projectC);
                actual.Should().BeEquivalentTo(expected);
                var results = RunRestore(failedProjects: new HashSet <string>(), projectsWithWarnings: new HashSet <string>(), projectA, projectB, projectC);
                checker.SaveRestoreStatus(results);

                // Set-up, delete C's outputs
                SolutionUpToDateChecker.GetOutputFilePaths(projectC, out string _, out string cacheFilePath, out string _, out string _, out string _);
                File.Delete(cacheFilePath);

                // Act & Assert
                actual   = checker.PerformUpToDateCheck(dgSpec, NullLogger.Instance);
                expected = GetUniqueNames(projectC);
                actual.Should().BeEquivalentTo(expected);
            }
        }
        internal static void CreateDummyOutputFiles(PackageSpec packageSpec)
        {
            SolutionUpToDateChecker.GetOutputFilePaths(packageSpec, out string assetsFilePath, out string cacheFilePath, out string targetsFilePath, out string propsFilePath, out string lockFilePath);
            var globalPackagesFolderDummyFilePath = packageSpec.RestoreMetadata.PackagesPath != null?
                                                    Path.Combine(packageSpec.RestoreMetadata.PackagesPath, "dummyFile.txt") :
                                                        null;

            CreateFile(assetsFilePath, cacheFilePath, targetsFilePath, propsFilePath, lockFilePath, globalPackagesFolderDummyFilePath);
        }
        public void GetOutputFilePaths_WorksForProjectJson()
        {
            var packageSpec = GetProjectJsonPackageSpec("A");

            SolutionUpToDateChecker.GetOutputFilePaths(packageSpec, out string assetsFilePath, out string cacheFilePath, out string targetsFilePath, out string propsFilePath, out string lockFilePath);

            var expectedIntermediateFolder = packageSpec.RestoreMetadata.OutputPath;
            var expectedAssetsFolder       = Path.GetDirectoryName(packageSpec.FilePath);

            Path.GetDirectoryName(assetsFilePath).Should().Be(expectedAssetsFolder);
            Path.GetDirectoryName(cacheFilePath).Should().Be(expectedIntermediateFolder);
            Path.GetDirectoryName(targetsFilePath).Should().Be(expectedIntermediateFolder);
            Path.GetDirectoryName(propsFilePath).Should().Be(expectedIntermediateFolder);
            lockFilePath.Should().BeNull();
        }
        public void GetOutputFilePaths_GetOutputFilePaths_AllIntermediateOutputsGoToTheOutputFolder()
        {
            var packageSpec = GetPackageSpec("A");

            packageSpec.RestoreMetadata.RestoreLockProperties = new RestoreLockProperties(restorePackagesWithLockFile: "true", nuGetLockFilePath: null, restoreLockedMode: true);

            SolutionUpToDateChecker.GetOutputFilePaths(packageSpec, out string assetsFilePath, out string cacheFilePath, out string targetsFilePath, out string propsFilePath, out string lockFilePath);

            var expectedIntermediateFolder = packageSpec.RestoreMetadata.OutputPath;
            var expectedLockFileFolder     = Path.GetDirectoryName(packageSpec.RestoreMetadata.ProjectPath);

            Path.GetDirectoryName(assetsFilePath).Should().Be(expectedIntermediateFolder);
            Path.GetDirectoryName(cacheFilePath).Should().Be(expectedIntermediateFolder);
            Path.GetDirectoryName(targetsFilePath).Should().Be(expectedIntermediateFolder);
            Path.GetDirectoryName(propsFilePath).Should().Be(expectedIntermediateFolder);
            Path.GetDirectoryName(lockFilePath).Should().Be(expectedLockFileFolder);
        }