diff --git a/src/Cli/func/Helpers/GlobalCoreToolsSettings.cs b/src/Cli/func/Helpers/GlobalCoreToolsSettings.cs index 288b8d406..c39decbca 100644 --- a/src/Cli/func/Helpers/GlobalCoreToolsSettings.cs +++ b/src/Cli/func/Helpers/GlobalCoreToolsSettings.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. using Azure.Functions.Cli.Common; @@ -99,6 +99,13 @@ public static void Init(ISecretsManager secretsManager, string[] args) { _currentWorkerRuntime = WorkerRuntime.None; } + + if (_currentWorkerRuntime == WorkerRuntime.Java || args.Any(arg => string.Equals(arg, WorkerRuntime.Java.ToString(), StringComparison.OrdinalIgnoreCase))) + { + ColoredConsole + .WriteLine(WarningColor($"This action is not supported when using the core tools directly. Please use one of the supported environments to test {_currentWorkerRuntime} apps locally as specified by" + + $"https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-local?pivots=programming-language-java")); + } } // Test helper method to set _currentWorkerRuntime for testing purpose diff --git a/test/Cli/Func.UnitTests/GlobalCoreToolsSettingsTests.cs b/test/Cli/Func.UnitTests/GlobalCoreToolsSettingsTests.cs new file mode 100644 index 000000000..c2c6f342b --- /dev/null +++ b/test/Cli/Func.UnitTests/GlobalCoreToolsSettingsTests.cs @@ -0,0 +1,46 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using Azure.Functions.Cli.Helpers; +using Azure.Functions.Cli.Interfaces; +using Moq; +using Xunit; + +namespace Azure.Functions.Cli.UnitTests +{ + public class GlobalCoreToolsSettingsTests + { + [Theory] + [InlineData("init", "--java")] + [InlineData("init", "--worker-runtime", "java")] + [InlineData("new", "--java")] + [InlineData("new", "--language", "java")] + public void Init_LogsWarning_ForJavaWorkerRuntime(params string[] args) + { + // Arrange + var secretsManager = new Mock(); + + var stringWriter = new StringWriter(); + var originalOut = Console.Out; + Console.SetOut(stringWriter); + + try + { + // Act + GlobalCoreToolsSettings.Init(secretsManager.Object, args); + + // Assert + var output = stringWriter.ToString(); + Assert.Contains("This action is not supported when using the core tools directly", output); + Assert.Contains("java", output, StringComparison.OrdinalIgnoreCase); + } + finally + { + Console.SetOut(originalOut); + + // Reset static state for other tests + GlobalCoreToolsSettings.SetWorkerRuntime(WorkerRuntime.None); + } + } + } +}