File: JavaLanguageSupportTests.cs
Web Access
Project: src\tests\Aspire.Hosting.CodeGeneration.Java.Tests\Aspire.Hosting.CodeGeneration.Java.Tests.csproj (Aspire.Hosting.CodeGeneration.Java.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Aspire.TypeSystem;
 
namespace Aspire.Hosting.CodeGeneration.Java.Tests;
 
public class JavaLanguageSupportTests
{
    [Fact]
    public void GetRuntimeSpec_SetsCompileUpToDateCheckWhenSupported()
    {
        var runtimeSpec = new JavaLanguageSupport().GetRuntimeSpec();
        var compile = Assert.Single(runtimeSpec.PreExecute!);
 
        AssertCompileUpToDateCheck(compile);
    }
 
    [Fact]
    public void SetCompileUpToDateCheckIfSupported_PopulatesCompileUpToDateCheckOnCommandSpec()
    {
        var compile = new CommandSpec
        {
            Command = "javac",
            Args = ["--release", "25", "-d", ".java-build", "@.aspire/modules/sources.txt", "{appHostFile}"]
        };
 
        JavaLanguageSupport.SetCompileUpToDateCheckIfSupported(compile, ".java-build");
 
        AssertCompileUpToDateCheck(compile);
    }
 
    [Fact]
    public void SetCompileUpToDateCheckIfSupported_IgnoresLegacyCommandSpec()
    {
        var exception = Record.Exception(() =>
            JavaLanguageSupport.SetCompileUpToDateCheckIfSupported(
                new LegacyCommandSpec(),
                ".java-build"));
 
        Assert.Null(exception);
    }
 
    private sealed class LegacyCommandSpec
    {
    }
 
    private static void AssertCompileUpToDateCheck(CommandSpec compile)
    {
        var check = Assert.IsType<CommandUpToDateCheck>(compile.UpToDateCheck);
 
        Assert.Equal(["{appHostFile}", "./**", ".aspire/modules/**", "src/main/java/**"], check.Inputs);
        Assert.Equal([".java"], check.FileExtensions!);
        Assert.Equal(Path.Combine(".java-build", ".aspire-compile-stamp"), check.StampFile);
    }
}