初始提交:WinUI 3 一键运行轮盘工具
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
using System.Diagnostics;
|
||||
using OneClickRun.Core.Models;
|
||||
using OneClickRun.Core.Services;
|
||||
using Xunit;
|
||||
|
||||
namespace OneClickRun.Core.Tests;
|
||||
|
||||
public class CommandRunnerTests
|
||||
{
|
||||
private static string SystemRoot => Environment.GetFolderPath(Environment.SpecialFolder.Windows);
|
||||
|
||||
[Fact]
|
||||
public void App_BuildsShellExecuteInfo()
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.App, Target = SystemRoot + "\\explorer.exe", Arguments = "-n" };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.True(psi.UseShellExecute);
|
||||
Assert.Equal("-n", psi.Arguments);
|
||||
Assert.False(string.IsNullOrEmpty(psi.WorkingDirectory));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void App_Admin_SetsVerb()
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.App, Target = SystemRoot + "\\explorer.exe", RunAsAdmin = true };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.Equal("runas", psi.Verb);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Folder_UsesExplorer()
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.Folder, Target = "C:\\Some Folder" };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.Equal("explorer.exe", psi.FileName);
|
||||
Assert.Contains("\"C:\\Some Folder\"", psi.Arguments);
|
||||
Assert.False(psi.UseShellExecute);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("www.bing.com", "https://www.bing.com")]
|
||||
[InlineData("bing.com", "https://bing.com")]
|
||||
[InlineData("https://example.com/x", "https://example.com/x")]
|
||||
[InlineData("ms-settings:", "ms-settings:")]
|
||||
public void Url_Normalization(string input, string expected)
|
||||
{
|
||||
Assert.Equal(expected, CommandRunner.NormalizeUrl(input));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Script_BuildsPowerShellArgs()
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.Script, Target = "C:\\Scripts\\demo.ps1" };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.Equal("powershell.exe", psi.FileName);
|
||||
Assert.Contains("-NoProfile", psi.Arguments);
|
||||
Assert.Contains("-ExecutionPolicy Bypass", psi.Arguments);
|
||||
Assert.Contains("-File \"C:\\Scripts\\demo.ps1\"", psi.Arguments);
|
||||
Assert.False(psi.UseShellExecute);
|
||||
Assert.False(psi.CreateNoWindow);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Script_Hidden_SetsNoWindow()
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.Script, Target = "C:\\a.ps1", HideWindow = true };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.True(psi.CreateNoWindow);
|
||||
Assert.Equal(ProcessWindowStyle.Hidden, psi.WindowStyle);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Script_Admin_SetsVerb()
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.Script, Target = "C:\\a.ps1", RunAsAdmin = true };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.True(psi.UseShellExecute);
|
||||
Assert.Equal("runas", psi.Verb);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(ActionType.App)]
|
||||
[InlineData(ActionType.Folder)]
|
||||
[InlineData(ActionType.Script)]
|
||||
[InlineData(ActionType.Url)]
|
||||
public void Validate_MissingTarget_ReturnsError(ActionType type)
|
||||
{
|
||||
var item = new CommandItem { Name = "x", ActionType = type, Target = "" };
|
||||
Assert.NotNull(CommandRunner.Validate(item));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Validate_ExistingApp_ReturnsNull()
|
||||
{
|
||||
var item = new CommandItem { Name = "x", ActionType = ActionType.App, Target = SystemRoot + "\\notepad.exe" };
|
||||
Assert.Null(CommandRunner.Validate(item));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Validate_InvalidUrl_ReturnsError()
|
||||
{
|
||||
var item = new CommandItem { Name = "x", ActionType = ActionType.Url, Target = "::not a url::" };
|
||||
Assert.NotNull(CommandRunner.Validate(item));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(@"C:\Scripts\run.cmd")]
|
||||
[InlineData(@"C:\Scripts\run.bat")]
|
||||
public void Script_Batch_BuildsCmdArgs(string target)
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.Script, Target = target };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.Equal("cmd.exe", psi.FileName);
|
||||
Assert.Equal("/c \"\"" + target + "\"\"", psi.Arguments);
|
||||
Assert.False(psi.UseShellExecute);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Script_Batch_Admin_SetsVerb()
|
||||
{
|
||||
var item = new CommandItem { ActionType = ActionType.Script, Target = "C:\run.bat", RunAsAdmin = true };
|
||||
var psi = CommandRunner.BuildStartInfo(item);
|
||||
Assert.Equal("cmd.exe", psi.FileName);
|
||||
Assert.True(psi.UseShellExecute);
|
||||
Assert.Equal("runas", psi.Verb);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user