public void MigrateXprojProjectFactory_MigrateOutput_LoggedCorrectly()
        {
            // Runner returns valid response, standard exit code
            var procRunner = ProcessRunnerFactory.ImplementRunner(ProcessVerifier, outputText: "Standard Output", errorText: "Standard Error");
            var migrator   = new MigrateXprojProjectFactory(procRunner, CreateFileSystem(false));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            Assert.True(migrator.MigrateProject(RootLocation, XprojLocation, "XprojMigrationTests", logger));
            Assert.Equal(2, loggedMessages.Count);
            Assert.Equal(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_INFORMATIONAL,
                Message = "Standard Output",
                Project = "XprojMigrationTests"
            }, loggedMessages[0]);
            Assert.Equal(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_WARNING,
                Message = "Standard Error",
                Project = "XprojMigrationTests"
            }, loggedMessages[1]);
        }
Пример #2
0
        public void E2E_Works()
        {
            var fileSystem    = CreateFileSystem(withEntries: true, withXprojUser: true, withProjectLock: true, withGlobalJson: true);
            var processRunner = ProcessRunnerFactory.ImplementRunner(pInfo =>
            {
                ProcessVerifier(pInfo);
                fileSystem.Create(CsprojLocation);
            });

            var solution = IVsSolutionFactory.CreateWithSolutionDirectory(CreateSolutionInfo());
            var setup    = GlobalJsonSetupFactory.Create(true);

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            var migrator = CreateInstance(processRunner, fileSystem, solution, setup);

            Assert.Equal(VSConstants.S_OK, migrator.UpgradeProject(XprojLocation, 0, BackupLocation, out string outCsproj, logger, out int upgradeRequired, out Guid newProjectFactory));
            Assert.True(fileSystem.FileExists(CsprojLocation));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, $"{ProjectName}.xproj")));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, "project.json")));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, $"{ProjectName}.xproj.user")));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, $"global.json")));
            Assert.False(fileSystem.FileExists(XprojLocation));
            Assert.False(fileSystem.FileExists(ProjectJsonLocation));
            Assert.False(fileSystem.FileExists(XprojUserLocation));
            Assert.False(fileSystem.FileExists(ProjectLockJsonLocation));
            Assert.Equal(CsprojLocation, outCsproj);
            Assert.Equal((int)__VSPPROJECTUPGRADEVIAFACTORYREPAIRFLAGS.VSPUVF_PROJECT_ONEWAYUPGRADE, upgradeRequired);
            Assert.Equal(Guid.Parse(CSharpProjectSystemPackage.ProjectTypeGuid), newProjectFactory);
            Mock.Get(setup).Verify(g => g.SetupRemoval(solution, It.IsAny <IServiceProvider>(), fileSystem));
        }
Пример #3
0
        public void MigrateXprojProjectFactory_GlobalJsonExists_BacksUpAndRemovesGlobalJson()
        {
            var fileSystem = CreateFileSystem(withEntries: true, withGlobalJson: true);

            var migrator = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem);

            GlobalJsonRemover remover = null;

            var solution = IVsSolutionFactory.Implement((IVsSolutionEvents events, out uint cookie) =>
            {
                remover = (GlobalJsonRemover)events;
                cookie  = 1234;
                return(VSConstants.S_OK);
            }, IVsSolutionFactory.DefaultUnadviseCallback, CreateSolutionInfo());

            var loggedMessages     = new List <LogMessage>();
            var logger             = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var globalJsonBackedUp = Path.Combine(BackupLocation, "global.json");

            migrator.BackupAndDeleteGlobalJson(SlnLocation, solution, BackupLocation, XprojLocation, ProjectName, logger);
            Assert.False(fileSystem.FileExists(GlobalJsonLocation));
            Assert.True(fileSystem.FileExists(globalJsonBackedUp));
            Assert.Equal(1, loggedMessages.Count);
            Assert.Equal(new LogMessage
            {
                File    = GlobalJsonLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_INFORMATIONAL,
                Message = string.Format(VSResources.MigrationBackupFile, GlobalJsonLocation, globalJsonBackedUp),
                Project = ProjectName
            }, loggedMessages[0]);
            Assert.NotNull(remover);
            Assert.Equal(1234u, remover.SolutionCookie);
        }
Пример #4
0
        public void GlobalJsonHasSdkElement_ElementIsRemoved()
        {
            var fileSystem = CreateFileSystem(withEntries: true, withGlobalJson: true);
            var solution   = IVsSolutionFactory.CreateWithSolutionDirectory(CreateSolutionInfo());
            var setup      = GlobalJsonSetupFactory.Create(true);

            var migrator = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem, globalJsonSetup: setup);

            var loggedMessages     = new List <LogMessage>();
            var logger             = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var globalJsonBackedUp = Path.Combine(BackupLocation, "global.json");

            fileSystem.WriteAllText(GlobalJsonLocation, @"
{
    ""sdk"": {
        ""version"": ""1.0.0-preview2-003121""
    }
}");

            migrator.BackupAndDeleteGlobalJson(SlnLocation, solution, BackupLocation, XprojLocation, ProjectName, logger);
            Assert.True(fileSystem.FileExists(globalJsonBackedUp));
            Assert.Single(loggedMessages);
            Assert.Equal(new LogMessage
            {
                File    = GlobalJsonLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_INFORMATIONAL,
                Message = string.Format(VSResources.MigrationBackupFile, GlobalJsonLocation, globalJsonBackedUp),
                Project = ProjectName
            }, loggedMessages[0]);
            Mock.Get(setup).Verify(g => g.SetupRemoval(solution, It.IsAny <IServiceProvider>(), fileSystem));
            Assert.True(JToken.DeepEquals(new JObject(), JsonConvert.DeserializeObject <JObject>(fileSystem.ReadAllText(GlobalJsonLocation))));
        }
        public void MigrateXprojProjectFactory_E2E_Works()
        {
            var fileSystem    = CreateFileSystem();
            var csproj        = Path.Combine(BackupLocation, $"{ProjectName}.csproj");
            var processRunner = ProcessRunnerFactory.ImplementRunner(pInfo =>
            {
                ProcessVerifier(pInfo);
                fileSystem.Create(csproj);
            });

            string outCsproj;
            int    upgradeRequired;
            Guid   newProjectFactory;

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            var migrator = new MigrateXprojProjectFactory(processRunner, fileSystem);

            Assert.Equal(VSConstants.S_OK, migrator.UpgradeProject(XprojLocation, 0, BackupLocation, out outCsproj, logger, out upgradeRequired, out newProjectFactory));
            Assert.True(fileSystem.FileExists(csproj));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, $"{ProjectName}.csproj")));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, "project.json")));
            Assert.Equal(csproj, outCsproj);
            Assert.Equal((int)__VSPPROJECTUPGRADEVIAFACTORYREPAIRFLAGS.VSPUVF_PROJECT_ONEWAYUPGRADE, upgradeRequired);
            Assert.Equal(Guid.Parse(CSharpProjectSystemPackage.ProjectTypeGuid), newProjectFactory);
        }
        public void MigrateXprojProjectFactory_ValidArgs_BackupsCorrectly()
        {
            var procRunner = ProcessRunnerFactory.CreateRunner();
            var fileSystem = CreateFileSystem();
            var migrator   = new MigrateXprojProjectFactory(procRunner, fileSystem);

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            Assert.True(migrator.BackupProject(BackupLocation, XprojLocation, "XprojMigrationTests", logger));

            // We expect 2 informational messages about what files were backed up.
            Assert.Equal(2, loggedMessages.Count);
            loggedMessages.ForEach(message =>
            {
                Assert.Equal((uint)__VSUL_ERRORLEVEL.VSUL_INFORMATIONAL, message.Level);
                Assert.Equal("XprojMigrationTests", message.Project);
            });

            // The first message should be about the old xproj, the second about the project.json
            var xprojBackedUp       = Path.Combine(BackupLocation, "XprojMigrationTests.xproj");
            var projectJsonBackedUp = Path.Combine(BackupLocation, "project.json");

            Assert.Equal(XprojLocation, loggedMessages[0].File);
            Assert.Equal(ProjectJsonLocation, loggedMessages[1].File);
            Assert.Equal($"Backing up {XprojLocation} to {xprojBackedUp}.", loggedMessages[0].Message);
            Assert.Equal($"Backing up {ProjectJsonLocation} to {projectJsonBackedUp}.", loggedMessages[1].Message);

            // Finally, assert that there actually are backup files in the backup directory
            var backedUpFiles = fileSystem.EnumerateFiles(BackupLocation, "*", SearchOption.TopDirectoryOnly);

            Assert.Equal(2, backedUpFiles.Count());
            Assert.True(backedUpFiles.Contains(xprojBackedUp));
            Assert.True(backedUpFiles.Contains(projectJsonBackedUp));
        }
Пример #7
0
        public void InvalidLogFile_LogsError()
        {
            var fileSystem = CreateFileSystem(withEntries: false);

            fileSystem.WriteAllText(LogFileLocation, string.Empty);

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var migrator       = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem);

            var(projectFile, success) = migrator.LogReport(LogFileLocation, VSConstants.E_ABORT, ProjectName, XprojLocation, logger);
            Assert.Equal(string.Empty, projectFile);
            Assert.False(success);
            AssertEx.CollectionLength(loggedMessages, 2);
            Assert.Equal(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_ERROR,
                Message = string.Format(VSResources.XprojMigrationFailedCannotReadReport, LogFileLocation),
                Project = ProjectName
            }, loggedMessages[0]);
            Assert.Equal(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_ERROR,
                Message = string.Format(VSResources.XprojMigrationGeneralFailure, ProjectName, MigrateCommand, VSConstants.E_ABORT),
                Project = ProjectName
            }, loggedMessages[1]);
        }
        public void MigrateXprojProjectFactory_ValidPaths_CallMigrateCorrectly()
        {
            // Runner returns valid response, standard exit code
            var procRunner = ProcessRunnerFactory.ImplementRunner(ProcessVerifier);
            var migrator   = new MigrateXprojProjectFactory(procRunner, CreateFileSystem(false));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            Assert.True(migrator.MigrateProject(RootLocation, XprojLocation, "XprojMigrationTests", logger));
            Assert.Equal(0, loggedMessages.Count);
        }
Пример #9
0
        public void ValidCsproj_FindsCsproj()
        {
            var fileSystem = CreateFileSystem();

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var migrator       = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem);

            var(foundProjectFile, success) = migrator.LogReport(LogFileLocation, 0, ProjectName, XprojLocation, logger);
            Assert.Equal(CsprojLocation, foundProjectFile);
            Assert.True(success);
            Assert.Empty(loggedMessages);
        }
Пример #10
0
        public void MigrateError_ReturnsErrorCode()
        {
            // Runner returns valid response, standard exit code
            var procRunner = ProcessRunnerFactory.ImplementRunner(ProcessVerifier, exitCode: VSConstants.E_FAIL);
            var migrator   = CreateInstance(procRunner, CreateFileSystem(false));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            (string logFile, int exitCode) = migrator.MigrateProject(SlnLocation, RootLocation, XprojLocation, "XprojMigrationTests", logger);
            Assert.Equal(VSConstants.E_FAIL, exitCode);
            Assert.Equal(LogFileLocation, logFile);
        }
        public void MigrateXprojProjectFactory_ValidCsproj_FindsCsproj()
        {
            var csproj     = Path.Combine(RootLocation, "XprojMigrationTests.csproj");
            var fileSystem = CreateFileSystem();

            fileSystem.Create(csproj);

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var migrator       = new MigrateXprojProjectFactory(ProcessRunnerFactory.CreateRunner(), fileSystem);

            Assert.Equal(csproj, migrator.GetCsproj(RootLocation, "XprojMigrationTests", XprojLocation, logger));
            Assert.Equal(0, loggedMessages.Count);
        }
Пример #12
0
        public void ValidPaths_CallMigrateCorrectly()
        {
            // Runner returns valid response, standard exit code
            var procRunner = ProcessRunnerFactory.ImplementRunner(ProcessVerifier);
            var migrator   = CreateInstance(procRunner, CreateFileSystem(false));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            (string logFile, int exitCode) = migrator.MigrateProject(SlnLocation, RootLocation, XprojLocation, "XprojMigrationTests", logger);

            Assert.Equal(0, exitCode);
            Assert.Empty(loggedMessages);
        }
Пример #13
0
        public void ValidProject_IsUpgradable()
        {
            var fileSystem = CreateFileSystem();

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var migrator       = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem);

            Assert.Equal(VSConstants.S_OK,
                         migrator.UpgradeProject_CheckOnly(XprojLocation, logger, out int upgradeRequired, out Guid newProjectFactory, out uint capabilityFlags));
            Assert.Equal((int)__VSPPROJECTUPGRADEVIAFACTORYREPAIRFLAGS.VSPUVF_PROJECT_ONEWAYUPGRADE, upgradeRequired);
            Assert.Equal(Guid.Parse(CSharpProjectSystemPackage.ProjectTypeGuid), newProjectFactory);
            Assert.Equal((uint)(__VSPPROJECTUPGRADEVIAFACTORYFLAGS.PUVFF_BACKUPSUPPORTED | __VSPPROJECTUPGRADEVIAFACTORYFLAGS.PUVFF_COPYBACKUP),
                         capabilityFlags);
        }
Пример #14
0
        public void NonExistantProjectJson_DoesNotBackUp()
        {
            var procRunner = ProcessRunnerFactory.CreateRunner();
            var migrator   = CreateInstance(procRunner, CreateFileSystem(false));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            Assert.False(migrator.BackupProject(BackupLocation, XprojLocation, "XprojMigrationTests", logger));

            Assert.Single(loggedMessages);
            Assert.Equal((uint)__VSUL_ERRORLEVEL.VSUL_ERROR, loggedMessages[0].Level);
            Assert.Equal("XprojMigrationTests", loggedMessages[0].Project);
            Assert.Equal(ProjectJsonLocation, loggedMessages[0].File);
            Assert.Equal(string.Format(VSResources.XprojMigrationFailedProjectJsonFileNotFound, ProjectName, ProjectJsonLocation), loggedMessages[0].Message);
        }
        public void MigrateXprojProjectFactory_NonExistantProjectJson_DoesNotBackUp()
        {
            var procRunner = ProcessRunnerFactory.CreateRunner();
            var migrator   = new MigrateXprojProjectFactory(procRunner, CreateFileSystem(false));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            Assert.False(migrator.BackupProject(BackupLocation, XprojLocation, "XprojMigrationTests", logger));

            Assert.Equal(1, loggedMessages.Count);
            Assert.Equal((uint)__VSUL_ERRORLEVEL.VSUL_ERROR, loggedMessages[0].Level);
            Assert.Equal("XprojMigrationTests", loggedMessages[0].Project);
            Assert.Equal(ProjectJsonLocation, loggedMessages[0].File);
            Assert.Equal($"Failed to migrate XProj project XprojMigrationTests. Could not find project.json at {ProjectJsonLocation}.", loggedMessages[0].Message);
        }
        public void MigrateXprojProjectFactory_MigrateError_ReturnsFalse()
        {
            // Runner returns valid response, standard exit code
            var procRunner = ProcessRunnerFactory.ImplementRunner(ProcessVerifier, exitCode: VSConstants.E_FAIL);
            var migrator   = new MigrateXprojProjectFactory(procRunner, CreateFileSystem(false));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            Assert.False(migrator.MigrateProject(RootLocation, XprojLocation, "XprojMigrationTests", logger));
            Assert.Equal(1, loggedMessages.Count);
            Assert.Equal(new LogMessage
            {
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_ERROR,
                Project = "XprojMigrationTests",
                File    = XprojLocation,
                Message = $"Failed to migrate XProj project XprojMigrationTests. 'dotnet migrate --skip-backup -s -p \"{RootLocation}\" -x \"{XprojLocation}\"' exited with error code {VSConstants.E_FAIL}."
            }, loggedMessages[0]);
        }
Пример #17
0
        public void UpgradeCheck()
        {
            string projectPath = "foo\\bar.xproj";

            var factory = new XprojProjectFactory();

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            factory.UpgradeProject_CheckOnly(
                fileName: projectPath,
                logger,
                out uint upgradeRequired,
                out Guid migratedProjectFactor,
                out uint upgradeProjectCapabilityFlags);

            Assert.Equal((uint)__VSPPROJECTUPGRADEVIAFACTORYREPAIRFLAGS.VSPUVF_PROJECT_DEPRECATED, upgradeRequired);
            Assert.Equal(typeof(XprojProjectFactory).GUID, migratedProjectFactor);
            Assert.Equal(default, upgradeProjectCapabilityFlags);
        public void MigrateXprojProjectFactory_NoCsproj_LogsError()
        {
            var csproj     = Path.Combine(RootLocation, "XprojMigrationTests.csproj");
            var fileSystem = CreateFileSystem();

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var migrator       = new MigrateXprojProjectFactory(ProcessRunnerFactory.CreateRunner(), fileSystem);

            Assert.Equal("", migrator.GetCsproj(RootLocation, "XprojMigrationTests", XprojLocation, logger));
            Assert.Equal(1, loggedMessages.Count);
            Assert.Equal(new LogMessage
            {
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_ERROR,
                Project = "XprojMigrationTests",
                File    = XprojLocation,
                Message = $"Expected to find migrated cpsroj in {RootLocation}, but did not find any."
            }, loggedMessages[0]);
        }
Пример #19
0
        public void UpgradeCheck()
        {
            string projectPath = "foo\\bar.xproj";

#pragma warning disable VSSDK005 // Avoid instantiating JoinableTaskContext
            var factory = new XprojProjectFactory(new Threading.JoinableTaskContext());
#pragma warning restore VSSDK005 // Avoid instantiating JoinableTaskContext

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            factory.UpgradeProject_CheckOnly(
                fileName: projectPath,
                logger,
                out uint upgradeRequired,
                out Guid migratedProjectFactor,
                out uint upgradeProjectCapabilityFlags);

            Assert.Equal((uint)__VSPPROJECTUPGRADEVIAFACTORYREPAIRFLAGS.VSPUVF_PROJECT_DEPRECATED, upgradeRequired);
            Assert.Equal(typeof(XprojProjectFactory).GUID, migratedProjectFactor);
            Assert.Equal(default, upgradeProjectCapabilityFlags);
Пример #20
0
        public void WithXprojUser_BackupsCorrectly()
        {
            var procRunner = ProcessRunnerFactory.CreateRunner();
            var fileSystem = CreateFileSystem(withXprojUser: true, withProjectLock: true);
            var migrator   = CreateInstance(procRunner, fileSystem);

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            Assert.True(migrator.BackupProject(BackupLocation, XprojLocation, "XprojMigrationTests", logger));

            // We expect 2 informational messages about what files were backed up.
            AssertEx.CollectionLength(loggedMessages, 3);
            loggedMessages.ForEach(message =>
            {
                Assert.Equal((uint)__VSUL_ERRORLEVEL.VSUL_INFORMATIONAL, message.Level);
                Assert.Equal("XprojMigrationTests", message.Project);
            });

            // The first message should be about the old xproj, the second about the project.json
            var xprojBackedUp       = Path.Combine(BackupLocation, "XprojMigrationTests.xproj");
            var xprojUserBackedUp   = Path.Combine(BackupLocation, "XprojMigrationTests.xproj.user");
            var projectJsonBackedUp = Path.Combine(BackupLocation, "project.json");

            Assert.Equal(XprojLocation, loggedMessages[0].File);
            Assert.Equal(ProjectJsonLocation, loggedMessages[1].File);
            Assert.Equal(XprojUserLocation, loggedMessages[2].File);
            Assert.Equal(string.Format(VSResources.MigrationBackupFile, XprojLocation, xprojBackedUp), loggedMessages[0].Message);
            Assert.Equal(string.Format(VSResources.MigrationBackupFile, ProjectJsonLocation, projectJsonBackedUp), loggedMessages[1].Message);
            Assert.Equal(string.Format(VSResources.MigrationBackupFile, XprojUserLocation, xprojUserBackedUp), loggedMessages[2].Message);

            // Finally, assert that there actually are backup files in the backup directory
            var backedUpFiles = fileSystem.EnumerateFiles(BackupLocation, "*", SearchOption.TopDirectoryOnly);

            Assert.Equal(3, backedUpFiles.Count());
            Assert.Contains(xprojBackedUp, backedUpFiles);
            Assert.Contains(projectJsonBackedUp, backedUpFiles);
            Assert.Contains(xprojUserBackedUp, backedUpFiles);
        }
Пример #21
0
        public void MigrateXprojProjectFactory_E2E_Works()
        {
            var fileSystem    = CreateFileSystem(withEntries: true, withXprojUser: true, withProjectLock: true, withGlobalJson: true);
            var processRunner = ProcessRunnerFactory.ImplementRunner(pInfo =>
            {
                ProcessVerifier(pInfo);
                fileSystem.Create(CsprojLocation);
            });

            GlobalJsonRemover remover = null;
            var solution = IVsSolutionFactory.Implement((IVsSolutionEvents events, out uint cookie) =>
            {
                remover = (GlobalJsonRemover)events;
                cookie  = 1234;
                return(VSConstants.S_OK);
            }, IVsSolutionFactory.DefaultUnadviseCallback, CreateSolutionInfo());

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);

            var migrator = CreateInstance(processRunner, fileSystem, solution);

            Assert.Equal(VSConstants.S_OK, migrator.UpgradeProject(XprojLocation, 0, BackupLocation, out string outCsproj, logger, out int upgradeRequired, out Guid newProjectFactory));
            Assert.True(fileSystem.FileExists(CsprojLocation));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, $"{ProjectName}.xproj")));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, "project.json")));
            Assert.True(fileSystem.FileExists(Path.Combine(BackupLocation, $"{ProjectName}.xproj.user")));
            Assert.False(fileSystem.FileExists(XprojLocation));
            Assert.False(fileSystem.FileExists(ProjectJsonLocation));
            Assert.False(fileSystem.FileExists(XprojUserLocation));
            Assert.False(fileSystem.FileExists(ProjectLockJsonLocation));
            Assert.False(fileSystem.FileExists(GlobalJsonLocation));
            Assert.Equal(CsprojLocation, outCsproj);
            Assert.Equal((int)__VSPPROJECTUPGRADEVIAFACTORYREPAIRFLAGS.VSPUVF_PROJECT_ONEWAYUPGRADE, upgradeRequired);
            Assert.Equal(Guid.Parse(CSharpProjectSystemPackage.ProjectTypeGuid), newProjectFactory);
            Assert.NotNull(remover);
            Assert.Equal(1234u, remover.SolutionCookie);
        }
Пример #22
0
        public void GlobalJsonExists_BacksUpAndRemovesGlobalJson()
        {
            var fileSystem = CreateFileSystem(withEntries: true, withGlobalJson: true);
            var solution   = IVsSolutionFactory.CreateWithSolutionDirectory(CreateSolutionInfo());
            var setup      = GlobalJsonSetupFactory.Create(true);

            var migrator = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem, globalJsonSetup: setup);

            var loggedMessages     = new List <LogMessage>();
            var logger             = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var globalJsonBackedUp = Path.Combine(BackupLocation, "global.json");

            migrator.BackupAndDeleteGlobalJson(SlnLocation, solution, BackupLocation, XprojLocation, ProjectName, logger);
            Assert.True(fileSystem.FileExists(globalJsonBackedUp));
            Assert.Single(loggedMessages);
            Assert.Equal(new LogMessage
            {
                File    = GlobalJsonLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_INFORMATIONAL,
                Message = string.Format(VSResources.MigrationBackupFile, GlobalJsonLocation, globalJsonBackedUp),
                Project = ProjectName
            }, loggedMessages[0]);
            Mock.Get(setup).Verify(g => g.SetupRemoval(solution, It.IsAny <IServiceProvider>(), fileSystem));
        }
Пример #23
0
        public void LogWithErrors_MessagesAreLoggedToVs()
        {
            var fileSystem      = CreateFileSystem(withEntries: false);
            var migrationReport = new MigrationReport(0, new List <ProjectMigrationReport>
            {
                new ProjectMigrationReport(false, string.Empty, RootLocation, ProjectName, new List <string>
                {
                    "Sample Warning 1",
                    "Sample Warning 2"
                }, new List <MigrationError> {
                    new MigrationError("asdf1234", "General Error", "An error has occurred"),
                    new MigrationError("fdsa4321", "Specific Error", "A different error has occurred")
                })
            });

            fileSystem.WriteAllText(LogFileLocation, JsonConvert.SerializeObject(migrationReport));

            var loggedMessages = new List <LogMessage>();
            var logger         = IVsUpgradeLoggerFactory.CreateLogger(loggedMessages);
            var migrator       = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem);

            var(projectFile, success) = migrator.LogReport(LogFileLocation, VSConstants.E_ABORT, ProjectName, XprojLocation, logger);
            Assert.Equal(string.Empty, projectFile);
            Assert.False(success);
            Assert.Equal(5, loggedMessages.Count);
            Assert.Contains(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_WARNING,
                Message = "Sample Warning 1",
                Project = ProjectName
            }, loggedMessages);
            Assert.Contains(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_WARNING,
                Message = "Sample Warning 2",
                Project = ProjectName
            }, loggedMessages);
            Assert.Contains(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_ERROR,
                Message = "asdf1234::General Error: An error has occurred",
                Project = ProjectName
            }, loggedMessages);
            Assert.Contains(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_ERROR,
                Message = "fdsa4321::Specific Error: A different error has occurred",
                Project = ProjectName
            }, loggedMessages);
            Assert.Contains(new LogMessage
            {
                File    = XprojLocation,
                Level   = (uint)__VSUL_ERRORLEVEL.VSUL_ERROR,
                Message = string.Format(VSResources.XprojMigrationGeneralFailure, ProjectName, MigrateCommand, VSConstants.E_ABORT),
                Project = ProjectName
            }, loggedMessages);
        }