Skip to content

Commit

Permalink
refactor: code clean-up, add SystemInfo into ExecutionContext
Browse files Browse the repository at this point in the history
  • Loading branch information
edassis committed Feb 2, 2025
1 parent 6c7aaf7 commit 1629ed3
Show file tree
Hide file tree
Showing 28 changed files with 42 additions and 55 deletions.
2 changes: 1 addition & 1 deletion GodotEnv.Tests/reports/method_coverage.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 3 additions & 1 deletion GodotEnv.Tests/src/MainTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace Chickensoft.GodotEnv.Tests;

using System.Threading.Tasks;
using Chickensoft.GodotEnv.Common.Models;
using global::GodotEnv.Common.Utilities;
using Moq;
using Shouldly;
using Xunit;
Expand All @@ -18,10 +19,11 @@ public void CreateExecutionContextParsesArgs() {
var config = new ConfigFile();
var args = new string[] { "a", "--", "b" };
var workingDir = "/";
var systemInfo = new Mock<ISystemInfo>();
var addonsContext = new Mock<IAddonsContext>();
var godotContext = new Mock<IGodotContext>();
var context = GodotEnv.CreateExecutionContext(
args, config, workingDir, addonsContext.Object,
args, config, workingDir, systemInfo.Object, addonsContext.Object,
godotContext.Object
);
context.CliArgs.ShouldBe(["a"]);
Expand Down
5 changes: 4 additions & 1 deletion GodotEnv.Tests/src/common/models/ExecutionContextTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class ExecutionContextTest {
[Fact]
public void Initializes() {
var config = new ConfigFile();
var systemInfo = new MockSystemInfo(OSType.Linux, CPUArch.X64);
var addons = new Mock<IAddonsContext>().Object;
var godot = new Mock<IGodotContext>().Object;

Expand All @@ -25,6 +26,7 @@ public void Initializes() {
CommandArgs: _commandArgs,
Version: VERSION,
WorkingDir: WORKING_DIR,
SystemInfo: systemInfo,
Config: config,
Addons: addons,
Godot: godot
Expand All @@ -34,12 +36,13 @@ public void Initializes() {
executionContext.CommandArgs.ShouldBe(_commandArgs);
executionContext.Version.ShouldBe(VERSION);
executionContext.WorkingDir.ShouldBe(WORKING_DIR);
executionContext.SystemInfo.ShouldBe(systemInfo);
executionContext.Config.ShouldBe(config);
executionContext.Addons.ShouldBe(addons);
executionContext.Godot.ShouldBe(godot);

executionContext
.CreateLog(new MockSystemInfo(OSType.Linux, CPUArch.X64), new FakeInMemoryConsole())
.CreateLog(new FakeInMemoryConsole())
.ShouldBeAssignableTo<ILog>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public async Task Executes() {
var console = new FakeInMemoryConsole();
var log = new Log(systemInfo, console); // Use real log to test colors in output

context.Setup(ctx => ctx.Godot.Platform.SystemInfo).Returns(systemInfo);
context.Setup(ctx => ctx.CreateLog(systemInfo, console)).Returns(log);
context.Setup(ctx => ctx.SystemInfo).Returns(systemInfo);
context.Setup(ctx => ctx.CreateLog(console)).Returns(log);

var addonCommand = new AddonsCommand(context.Object);
await addonCommand.ExecuteAsync(console);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ out ILog log

var workingDir = "/";

context.Setup(context => context.Godot.Platform.SystemInfo).Returns(systemInfo.Object);
context.Setup(context => context.CreateLog(systemInfo.Object, fakeConsole)).Returns(log);
context.Setup(context => context.SystemInfo).Returns(systemInfo.Object);
context.Setup(context => context.CreateLog(fakeConsole)).Returns(log);
context.Setup(context => context.WorkingDir).Returns(workingDir);

var addonsFileRepo = new Mock<IAddonsFileRepository>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public GodotListCommandTest() {
_godotContext.Setup(c => c.Platform).Returns(_environment.Object);
_context.SetupGet(context => context.Godot).Returns(_godotContext.Object);
_log = new Log(_systemInfo, _console);
_context.Setup(context => context.CreateLog(_systemInfo, _console)).Returns(_log);
_context.Setup(context => context.CreateLog(_console)).Returns(_log);
}

public void Dispose() => _console.Dispose();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public async Task AddOrUpdateGodotEnvVariable() {
var console = new FakeInMemoryConsole();
var log = new Mock<ILog>(); // Use real log to test colors in output

executionContext.Setup(context => context.CreateLog(systemInfo, console)).Returns(log.Object);
executionContext.Setup(context => context.CreateLog(console)).Returns(log.Object);

await godotRepo.AddOrUpdateGodotEnvVariable(log.Object);

Expand Down
3 changes: 3 additions & 0 deletions GodotEnv/src/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ public static async Task<int> Main(string[] args) {
args: args,
config: config,
workingDir: workingDir,
systemInfo: systemInfo,
addonsContext: addonsContext,
godotContext: godotContext
);
Expand Down Expand Up @@ -157,6 +158,7 @@ internal static ExecutionContext CreateExecutionContext(
string[] args,
ConfigFile config,
string workingDir,
ISystemInfo systemInfo,
IAddonsContext addonsContext,
IGodotContext godotContext
) {
Expand Down Expand Up @@ -198,6 +200,7 @@ IGodotContext godotContext
Version: version,
WorkingDir: workingDir,
Config: config,
SystemInfo: systemInfo,
Addons: addonsContext,
Godot: godotContext
);
Expand Down
9 changes: 5 additions & 4 deletions GodotEnv/src/common/models/ExecutionContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public interface IExecutionContext {

/// <summary>App configuration settings.</summary>
ConfigFile Config { get; }
/// <summary>System information.</summary>
ISystemInfo SystemInfo { get; }
/// <summary>Addons context.</summary>
IAddonsContext Addons { get; }
/// <summary>Godot context.</summary>
Expand All @@ -33,8 +35,7 @@ public interface IExecutionContext {
/// <summary>Creates a log using the specified console.</summary>
/// <param name="console">Output console.</param>
/// <returns>Log.</returns>
ILog CreateLog(ISystemInfo systemInfo, IConsole console);
// ILog CreateLog(IConsole console, IGodotEnvironment environment);
ILog CreateLog(IConsole console);
}

public record ExecutionContext(
Expand All @@ -43,9 +44,9 @@ public record ExecutionContext(
string Version,
string WorkingDir,
ConfigFile Config,
ISystemInfo SystemInfo,
IAddonsContext Addons,
IGodotContext Godot
) : IExecutionContext {
public ILog CreateLog(ISystemInfo systemInfo, IConsole console) => new Log(systemInfo, console);
// public ILog CreateLog(IConsole console, IGodotEnvironment environment) => new Log(console, environment);
public ILog CreateLog(IConsole console) => new Log(SystemInfo, console);
}
1 change: 1 addition & 0 deletions GodotEnv/src/common/models/OSFamily.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ public enum OSFamily {
Windows = 0,
/// <summary>Unix.</summary>
Unix = 1,
/// <summary>Unknown.</summary>
Unknown = 2,
}
2 changes: 0 additions & 2 deletions GodotEnv/src/common/utilities/ProcessRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,6 @@ public async Task<ProcessResult> RunElevatedOnWindows(
// doesn't have admin rights
bool shouldElevate = !UACHelper.UACHelper.IsElevated;

// Console.WriteLine($"cmd '{exe}', args '{args}'");

Process process = UACHelper.UACHelper.StartElevated(new ProcessStartInfo() {
FileName = exe,
Arguments = args,
Expand Down
3 changes: 3 additions & 0 deletions GodotEnv/src/common/utilities/SystemInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ namespace GodotEnv.Common.Utilities;
using System.Runtime.InteropServices;
using Chickensoft.GodotEnv.Common.Models;

/// <summary>
/// Imutable system information (OS, CPU architecture, ...).
/// </summary>
public interface ISystemInfo {
public OSType OS { get; }

Expand Down
4 changes: 1 addition & 3 deletions GodotEnv/src/features/addons/commands/AddonsCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ public AddonsCommand(IExecutionContext context) {
}

public ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var output = console.Output;
log.Print("");
log.Warn("Please use a subcommand to manage addons.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ public AddonsInitCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var repo = ExecutionContext.Addons.AddonsFileRepo;

log.Print("");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@ public AddonsInstallCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);

var addons = ExecutionContext.Addons;

Expand Down
4 changes: 1 addition & 3 deletions GodotEnv/src/features/godot/commands/GodotCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ public GodotCommand(IExecutionContext context) {
}

public ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var output = console.Output;
log.Print("");
log.Warn("Please use a subcommand to manage Godot installations.");
Expand Down
3 changes: 1 addition & 2 deletions GodotEnv/src/features/godot/commands/GodotListCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ private static async Task ListRemoteVersions(ILog log, IGodotRepository godotRep
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;
var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var godotRepo = ExecutionContext.Godot.GodotRepo;

if (ListRemoteAvailable) {
Expand Down
3 changes: 1 addition & 2 deletions GodotEnv/src/features/godot/commands/GodotUseCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,10 @@ public GodotUseCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;
var godotRepo = ExecutionContext.Godot.GodotRepo;
var platform = ExecutionContext.Godot.Platform;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var output = console.Output;

var version = SemanticVersion.Parse(RawVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,15 @@ public GodotCacheClearCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;
var godotRepo = ExecutionContext.Godot.GodotRepo;
var platform = ExecutionContext.Godot.Platform;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);

log.Print("");
log.Info("Clearing Godot installation cache...");
log.Print("");
ExecutionContext.Godot.GodotRepo.ClearCache();
godotRepo.ClearCache();
log.Success("Godot installation cache cleared.");
log.Print("");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ public GodotCacheCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);

log.Print("");
log.Warn(
Expand Down
4 changes: 1 addition & 3 deletions GodotEnv/src/features/godot/commands/env/GodotEnvCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ public GodotEnvCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);

log.Print("");
log.Warn(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ public GodotEnvGetCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var godotRepo = ExecutionContext.Godot.GodotRepo;

var godotEnvVar = await godotRepo.GetGodotEnvVariable();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ public GodotEnvPathCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var godotRepo = ExecutionContext.Godot.GodotRepo;

log.Print(godotRepo.GodotSymlinkPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@ public GodotEnvSetupCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;
var godotRepo = ExecutionContext.Godot.GodotRepo;
var platform = ExecutionContext.Godot.Platform;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
await godotRepo.AddOrUpdateGodotEnvVariable(log);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ public GodotEnvTargetCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;
var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var godotRepo = ExecutionContext.Godot.GodotRepo;

log.Print(godotRepo.GodotSymlinkTarget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,10 @@ public GodotInstallCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;
var godotRepo = ExecutionContext.Godot.GodotRepo;
var platform = ExecutionContext.Godot.Platform;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);
var token = console.RegisterCancellationHandler();

var version = SemanticVersion.Parse(RawVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,10 @@ public GodotUninstallCommand(IExecutionContext context) {
}

public async ValueTask ExecuteAsync(IConsole console) {
var systemInfo = ExecutionContext.Godot.Platform.SystemInfo;
var godotRepo = ExecutionContext.Godot.GodotRepo;
var platform = ExecutionContext.Godot.Platform;

var log = ExecutionContext.CreateLog(systemInfo, console);
var log = ExecutionContext.CreateLog(console);

var version = SemanticVersion.Parse(RawVersion);
var isDotnetVersion = !NoDotnet;
Expand Down
1 change: 0 additions & 1 deletion GodotEnv/src/features/godot/domain/GodotRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,6 @@ public async Task UpdateGodotSymlink(
var godotSharpPath = GetGodotSharpPath(
installation.Path, installation.Version, installation.IsDotnetVersion
);
// log.Print($" Linking GodotSharp: {GodotSharpSymlinkPath} -> {godotSharpPath}");
await FileClient.CreateSymlink(
GodotSharpSymlinkPath, godotSharpPath
);
Expand Down

0 comments on commit 1629ed3

Please sign in to comment.