diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/MigrationErrorCodes.cs b/src/Microsoft.DotNet.ProjectJsonMigration/MigrationErrorCodes.cs index f7c54e54b..164207bab 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/MigrationErrorCodes.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/MigrationErrorCodes.cs @@ -31,6 +31,9 @@ namespace Microsoft.DotNet.ProjectJsonMigration public static Func MIGRATE1018 => (message) => new MigrationError(nameof(MIGRATE1018), "Dependency Project not found", message); + public static Func MIGRATE1019 + => (message) => new MigrationError(nameof(MIGRATE1019), "Unsupported Script Event Hook", message); + // Potentially Temporary (Point in Time) Errors public static Func MIGRATE20011 => (message) => new MigrationError(nameof(MIGRATE20011), "Multi-TFM", message); diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateScriptsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateScriptsRule.cs index aa4092e28..7cb621b7c 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateScriptsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateScriptsRule.cs @@ -87,7 +87,14 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules private ProjectTargetElement CreateTarget(ProjectRootElement csproj, string scriptSetName) { var targetName = $"{scriptSetName[0].ToString().ToUpper()}{string.Concat(scriptSetName.Skip(1))}Script"; - var targetHookInfo = ScriptSetToMSBuildHookTargetMap[scriptSetName]; + + TargetHookInfo targetHookInfo; + if(!ScriptSetToMSBuildHookTargetMap.TryGetValue(scriptSetName, out targetHookInfo)) + { + MigrationErrorCodes.MIGRATE1019( + $"{scriptSetName} is an unsupported script event hook for project migration") + .Throw(); + } var target = csproj.CreateTargetElement(targetName); csproj.InsertBeforeChild(target, csproj.LastChild); diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateScripts.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateScripts.cs index c19e187e1..1d8219975 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateScripts.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateScripts.cs @@ -154,5 +154,19 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests var target = scriptMigrationRule.MigrateScriptSet(mockProj, mockProj.AddPropertyGroup(), commands, "prepublish"); target.Condition.Should().Be(" '$(IsCrossTargetingBuild)' != 'true' "); } + + [Fact] + 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() + .WithMessage("MIGRATE1019::Unsupported Script Event Hook: invalidScriptSet is an unsupported script event hook for project migration"); + } } }