Toolshed refactor (#33598)
* Content changes for engine toolshed PR * add contains command * more permissive commands
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Content.Server.Administration.Managers;
|
||||
using Robust.Shared.Toolshed;
|
||||
|
||||
namespace Content.IntegrationTests.Tests.Toolshed;
|
||||
@@ -10,10 +11,23 @@ public sealed class AdminTest : ToolshedTest
|
||||
[Test]
|
||||
public async Task AllCommandsHavePermissions()
|
||||
{
|
||||
var toolMan = Server.ResolveDependency<ToolshedManager>();
|
||||
var admin = Server.ResolveDependency<IAdminManager>();
|
||||
var ignored = new HashSet<Assembly>()
|
||||
{typeof(LocTest).Assembly, typeof(Robust.UnitTesting.Shared.Toolshed.LocTest).Assembly};
|
||||
|
||||
await Server.WaitAssertion(() =>
|
||||
{
|
||||
Assert.That(InvokeCommand("cmd:list where { acmd:perms isnull }", out var res));
|
||||
Assert.That((IEnumerable<CommandSpec>) res, Is.Empty, "All commands must have admin permissions set up.");
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
foreach (var cmd in toolMan.DefaultEnvironment.AllCommands())
|
||||
{
|
||||
if (ignored.Contains(cmd.Cmd.GetType().Assembly))
|
||||
continue;
|
||||
|
||||
Assert.That(admin.TryGetCommandFlags(cmd, out _), $"Command does not have admin permissions set up: {cmd.FullName()}");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using Robust.Shared.IoC;
|
||||
using System.Reflection;
|
||||
using Robust.Shared.Localization;
|
||||
using Robust.Shared.Toolshed;
|
||||
|
||||
@@ -14,10 +14,27 @@ public sealed class LocTest : ToolshedTest
|
||||
[Test]
|
||||
public async Task AllCommandsHaveDescriptions()
|
||||
{
|
||||
var locMan = Server.ResolveDependency<ILocalizationManager>();
|
||||
var toolMan = Server.ResolveDependency<ToolshedManager>();
|
||||
var locStrings = new HashSet<string>();
|
||||
|
||||
var ignored = new HashSet<Assembly>()
|
||||
{typeof(LocTest).Assembly, typeof(Robust.UnitTesting.Shared.Toolshed.LocTest).Assembly};
|
||||
|
||||
await Server.WaitAssertion(() =>
|
||||
{
|
||||
Assert.That(InvokeCommand("cmd:list where { cmd:descloc loc:tryloc isnull }", out var res));
|
||||
Assert.That((IEnumerable<CommandSpec>)res!, Is.Empty, "All commands must have localized descriptions.");
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
foreach (var cmd in toolMan.DefaultEnvironment.AllCommands())
|
||||
{
|
||||
if (ignored.Contains(cmd.Cmd.GetType().Assembly))
|
||||
continue;
|
||||
|
||||
var descLoc = cmd.DescLocStr();
|
||||
Assert.That(locStrings.Add(descLoc), $"Duplicate command description key: {descLoc}");
|
||||
Assert.That(locMan.TryGetString(descLoc, out _), $"Failed to get command description for command {cmd.FullName()}");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,15 +74,15 @@ public abstract class ToolshedTest : IInvocationContext
|
||||
return (T) res!;
|
||||
}
|
||||
|
||||
protected void ParseCommand(string command, Type? inputType = null, Type? expectedType = null, bool once = false)
|
||||
protected void ParseCommand(string command, Type? inputType = null, Type? expectedType = null)
|
||||
{
|
||||
var parser = new ParserContext(command, Toolshed);
|
||||
var success = CommandRun.TryParse(false, parser, inputType, expectedType, once, out _, out _, out var error);
|
||||
var success = CommandRun.TryParse(parser, inputType, expectedType, out _);
|
||||
|
||||
if (error is not null)
|
||||
ReportError(error);
|
||||
if (parser.Error is not null)
|
||||
ReportError(parser.Error);
|
||||
|
||||
if (error is null)
|
||||
if (parser.Error is null)
|
||||
Assert.That(success, $"Parse failed despite no error being reported. Parsed {command}");
|
||||
}
|
||||
|
||||
@@ -153,11 +153,28 @@ public abstract class ToolshedTest : IInvocationContext
|
||||
return _errors;
|
||||
}
|
||||
|
||||
public bool HasErrors => _errors.Count > 0;
|
||||
|
||||
public void ClearErrors()
|
||||
{
|
||||
_errors.Clear();
|
||||
}
|
||||
|
||||
public object? ReadVar(string name)
|
||||
{
|
||||
return Variables.GetValueOrDefault(name);
|
||||
}
|
||||
|
||||
public void WriteVar(string name, object? value)
|
||||
{
|
||||
Variables[name] = value;
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetVars()
|
||||
{
|
||||
return Variables.Keys;
|
||||
}
|
||||
|
||||
public Dictionary<string, object?> Variables { get; } = new();
|
||||
|
||||
protected void ExpectError(Type err)
|
||||
|
||||
Reference in New Issue
Block a user