|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Aspire.Cli.Projects;
namespace Aspire.Cli.Tests.TestServices;
internal sealed class TestLanguageService : ILanguageService
{
public Func<CancellationToken, Task<IAppHostProject?>>? GetConfiguredProjectAsyncCallback { get; set; }
public Func<IAppHostProject, bool, CancellationToken, Task>? SetLanguageAsyncCallback { get; set; }
public Func<CancellationToken, Task<IAppHostProject>>? PromptForProjectAsyncCallback { get; set; }
public Func<string?, bool, CancellationToken, Task<IAppHostProject>>? GetOrPromptForProjectAsyncCallback { get; set; }
/// <summary>
/// The default project to return when no callback is set.
/// </summary>
public IAppHostProject? DefaultProject { get; set; }
public Task<IAppHostProject?> GetConfiguredProjectAsync(CancellationToken cancellationToken = default)
{
return GetConfiguredProjectAsyncCallback is not null
? GetConfiguredProjectAsyncCallback(cancellationToken)
: Task.FromResult(DefaultProject);
}
public Task SetLanguageAsync(IAppHostProject project, bool isGlobal = false, CancellationToken cancellationToken = default)
{
return SetLanguageAsyncCallback is not null
? SetLanguageAsyncCallback(project, isGlobal, cancellationToken)
: Task.CompletedTask;
}
public Task<IAppHostProject> PromptForProjectAsync(CancellationToken cancellationToken = default)
{
if (PromptForProjectAsyncCallback is not null)
{
return PromptForProjectAsyncCallback(cancellationToken);
}
if (DefaultProject is null)
{
throw new InvalidOperationException("No default project set and no callback provided");
}
return Task.FromResult(DefaultProject);
}
public Task<IAppHostProject> GetOrPromptForProjectAsync(string? explicitLanguageId = null, bool saveSelection = true, CancellationToken cancellationToken = default)
{
if (GetOrPromptForProjectAsyncCallback is not null)
{
return GetOrPromptForProjectAsyncCallback(explicitLanguageId, saveSelection, cancellationToken);
}
if (DefaultProject is null)
{
throw new InvalidOperationException("No default project set and no callback provided");
}
return Task.FromResult(DefaultProject);
}
}
|