public void MigratingScriptsWithMultipleCommandsCreatesExecTaskForEach(string scriptName) { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); ProjectPropertyGroupElement commonPropertyGroup = mockProj.AddPropertyGroup(); var commands = new[] { "fakecommand1", "fakecommand2", "mockcommand3" }; var commandsInTask = commands.ToDictionary(c => c, c => false); var target = scriptMigrationRule.MigrateScriptSet( mockProj, commonPropertyGroup, commands, scriptName, IsMultiTFM); foreach (var task in target.Tasks) { var taskCommand = task.GetParameter("Command"); var originalCommandCandidates = commands.Where(c => taskCommand.Contains(c)); originalCommandCandidates.Count().Should().Be(1); var command = originalCommandCandidates.First(); commandsInTask[command] .Should().Be(false, "Expected to find each element from commands Array once"); commandsInTask[command] = true; } commandsInTask.All(commandInTask => commandInTask.Value) .Should() .BeTrue("Expected each element from commands array to be found in a task"); }
public void MigratedScriptSetHasExecAndReplacesVariables(string scriptName) { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); ProjectPropertyGroupElement commonPropertyGroup = mockProj.AddPropertyGroup(); var commands = new[] { "%compile:FullTargetFramework%", "%compile:Configuration%" }; var target = scriptMigrationRule.MigrateScriptSet( mockProj, commonPropertyGroup, commands, scriptName, IsMultiTFM); target.Tasks.Count().Should().Be(commands.Length); foreach (var task in target.Tasks) { var taskCommand = task.GetParameter("Command"); var commandIndex = Array.IndexOf(commands, taskCommand); commandIndex.Should().Be( -1, "Expected command array elements to be replaced by appropriate msbuild properties"); } }
public void Migrated_ScriptSet_has_two_MigratedScriptExtensionProperties_for_each_script(string scriptName) { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new string[] { "compile:FullTargetFramework", "compile:Configuration" }; var propertyGroup = mockProj.AddPropertyGroup(); var target = scriptMigrationRule.MigrateScriptSet(mockProj, propertyGroup, commands, scriptName); Console.WriteLine(string.Join(";", propertyGroup.Properties.Select(n => n.Name))); propertyGroup.Properties.Count().Should().Be(commands.Length * 2); var count = 0; foreach (var command in commands) { count += 1; var scriptExtensionProperties = propertyGroup.Properties.Where(p => p.Name.Contains($"MigratedScriptExtension_{scriptName}_{count}")).ToArray(); scriptExtensionProperties.All(p => p.Value == ".sh" || p.Value == ".cmd").Should().BeTrue(); scriptExtensionProperties.Count().Should().Be(2); } }
public void Migrating_post_scripts_populates_AfterTargets_with_appropriate_target(string scriptName, string targetName) { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new[] { "fakecommand" }; var target = scriptMigrationRule.MigrateScriptSet(mockProj, mockProj.AddPropertyGroup(), commands, scriptName); target.AfterTargets.Should().Be(targetName); }
public void Migrating_scripts_creates_target_with_IsCrossTargettingBuild_not_equal_true_Condition() { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new[] { "compile:FullTargetFramework", "compile:Configuration" }; var target = scriptMigrationRule.MigrateScriptSet(mockProj, mockProj.AddPropertyGroup(), commands, "prepublish"); target.Condition.Should().Be(" '$(IsCrossTargetingBuild)' != 'true' "); }
public void Migrating_scripts_throws_on_invalid_ScriptSet() { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new string[] { "fakecommand" }; Action action = () => scriptMigrationRule.MigrateScriptSet(mockProj, mockProj.AddPropertyGroup(), commands, "invalidScriptSet"); action.ShouldThrow <MigrationException>() .WithMessage("MIGRATE1019::Unsupported Script Event Hook: invalidScriptSet is an unsupported script event hook for project migration"); }
public void MigratingScriptsWithSingleTFMDoesNotCreateTargetWithIsCrossTargettingBuild() { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new[] { "compile:FullTargetFramework", "compile:Configuration" }; var target = scriptMigrationRule.MigrateScriptSet( mockProj, commands, "prepublish", false); target.Condition.Should().BeEmpty(); }
public void MigratingScriptsWithMultiTFMCreatesTargetWithIsCrossTargettingBuildNotEqualTrueCondition() { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new[] { "compile:FullTargetFramework", "compile:Configuration" }; var target = scriptMigrationRule.MigrateScriptSet( mockProj, commands, "prepublish", IsMultiTFM); target.Condition.Should().Be(" '$(IsCrossTargetingBuild)' != 'true' "); }
public void MigratingPreScriptsPopulatesBeforeTargetsWithAppropriateTarget( string scriptName, string targetName) { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new string[] { "fakecommand" }; var target = scriptMigrationRule.MigrateScriptSet( mockProj, mockProj.AddPropertyGroup(), commands, scriptName); target.BeforeTargets.Should().Be(targetName); }
public void MigratingPostScriptsPopulatesAfterTargetsWithAppropriateTarget( string scriptName, string targetName) { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new[] { "fakecommand" }; var target = scriptMigrationRule.MigrateScriptSet( mockProj, commands, scriptName, IsMultiTFM); target.AfterTargets.Should().Be(targetName); }
public void PublishIISCommandDoesNotGetMigratedBecauseItIsNowInTheWebSDK() { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); var commands = new[] { "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" }; var target = scriptMigrationRule.MigrateScriptSet( mockProj, mockProj.AddPropertyGroup(), commands, "postpublish"); target.Tasks.Should().BeEmpty(); }
public void MigratingScriptsReplacesRazorPrecompileWithProperty() { var scriptMigrationRule = new MigrateScriptsRule(); ProjectRootElement mockProj = ProjectRootElement.Create(); ProjectPropertyGroupElement commonPropertyGroup = mockProj.AddPropertyGroup(); var commands = new string[] { "dotnet razor-precompile --configuration %publish:Configuration% --framework %publish:TargetFramework% --output-path %publish:OutputPath% %publish:ProjectPath%" }; var target = scriptMigrationRule.MigrateScriptSet( mockProj, commonPropertyGroup, commands, "postpublish", IsMultiTFM); target.Tasks.Should().BeEmpty(); commonPropertyGroup.Properties.Count().Should().Be(1); var propertyElement = commonPropertyGroup.Properties.First(); propertyElement.Name.Should().Be("MvcRazorCompileOnPublish"); propertyElement.Value.Should().Be("true"); }