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 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)); }
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_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]); }
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)); }
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); }
public void NullFileSystem_ThrowsArgumentNullException() { Assert.Throws <ArgumentNullException>("fileSystem", () => new MigrateXprojProjectFactory( ProcessRunnerFactory.CreateRunner(), null, IServiceProviderFactory.Create(), GlobalJsonSetupFactory.Create())); }
public void NullGlobalJsonSetup_ThrowsArgumentNullException() { Assert.Throws <ArgumentNullException>("globalJsonSetup", () => new MigrateXprojProjectFactory( ProcessRunnerFactory.CreateRunner(), new IFileSystemMock(), IServiceProviderFactory.Create(), null)); }
public void NoXprojUserOrProjectLock_CausesNoIssues() { var fileSystem = CreateFileSystem(withEntries: true, withXprojUser: false, withProjectLock: false); var migrator = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem); migrator.CleanupXproj(RootLocation, ProjectName); Assert.False(fileSystem.FileExists(XprojLocation)); Assert.False(fileSystem.FileExists(ProjectJsonLocation)); }
public void Cleanup_RemovesAllFiles() { var fileSystem = CreateFileSystem(withEntries: true, withXprojUser: true, withProjectLock: true); var migrator = CreateInstance(ProcessRunnerFactory.CreateRunner(), fileSystem); migrator.CleanupXproj(RootLocation, ProjectName); Assert.False(fileSystem.FileExists(XprojLocation)); Assert.False(fileSystem.FileExists(ProjectJsonLocation)); Assert.False(fileSystem.FileExists(XprojUserLocation)); Assert.False(fileSystem.FileExists(ProjectLockJsonLocation)); }
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); }
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 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); }
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); }
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); }
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); }
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 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_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]); }
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]); }
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); }
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); }
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)); }
public void MigrateXprojProjectFactory_NullServiceProvider_ThrowsArgumentNullException() { Assert.Throws <ArgumentNullException>("serviceProvider", () => new MigrateXprojProjectFactory(ProcessRunnerFactory.CreateRunner(), new IFileSystemMock(), null)); }
public void MigrateXprojProjectFactory_NullFileSystem_ThrowsArgumentNullException() { Assert.Throws <ArgumentNullException>("fileSystem", () => new MigrateXprojProjectFactory(ProcessRunnerFactory.CreateRunner(), null)); }
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); }