Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -0,0 +1,223 @@
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using RobotNet10.Script;
using RobotNet10.ScriptEngine;
using RobotNet10.ScriptEngine.HubContexts;
using RobotNet10.ScriptEngine.Models;
using RobotNet10.ScriptEngine.Shared;
using RobotNet10.ScriptEngine.Test.Helpers;
using RobotNet10.Shared;
namespace RobotNet10.ScriptEngine.Test;
[TestFixture]
public class ScriptEngineGlobalsTests
{
private Mock<ILogger> _mockLogger = null!;
private Mock<IServiceScopeFactory> _mockScopeFactory = null!;
private Mock<IServiceProvider> _mockServiceProvider = null!;
private Mock<IServiceScope> _mockScope = null!;
private ScriptEngineGlobals _scriptEngineGlobals = null!;
private VariableManager _variableManager = null!;
private TaskManager _taskManager = null!;
private MissionManager _missionManager = null!;
[SetUp]
public void SetUp()
{
_mockLogger = TestHelpers.CreateMockScriptLogger();
_mockServiceProvider = new Mock<IServiceProvider>();
_mockScope = new Mock<IServiceScope>();
_mockScope.Setup(x => x.ServiceProvider).Returns(_mockServiceProvider.Object);
_mockScopeFactory = new Mock<IServiceScopeFactory>();
_mockScopeFactory.Setup(x => x.CreateScope()).Returns(_mockScope.Object);
var mockScriptResource = TestHelpers.CreateMockScriptResource();
var mockConsoleHubContext = TestHelpers.CreateMockConsoleHubContext();
var mockLoggerGlobals = TestHelpers.CreateMockLogger();
var configuration = TestHelpers.CreateMockConfiguration();
_variableManager = new VariableManager();
_taskManager = new TaskManager(
_variableManager,
mockScriptResource.Object,
mockLoggerGlobals.Object,
_mockScopeFactory.Object,
mockConsoleHubContext.Object,
configuration);
_missionManager = new MissionManager(
_mockScopeFactory.Object,
_variableManager,
mockScriptResource.Object,
mockLoggerGlobals.Object,
mockConsoleHubContext.Object,
configuration);
_mockServiceProvider.Setup(x => x.GetRequiredService<MissionManager>()).Returns(_missionManager);
_mockServiceProvider.Setup(x => x.GetRequiredService<TaskManager>()).Returns(_taskManager);
_scriptEngineGlobals = new ScriptEngineGlobals(_mockLogger.Object, _mockScopeFactory.Object);
}
[Test]
public void Logger_ShouldReturnProvidedLogger()
{
// Act
var logger = _scriptEngineGlobals.Logger;
// Assert
Assert.That(logger, Is.EqualTo(_mockLogger.Object));
}
[Test]
public void CreateMission_WithValidMission_ShouldReturnMissionId()
{
// Arrange
var script = CSharpScript.Create<IAsyncEnumerable<MissionStatus>>(
"yield return new MissionStatus(100, \"Success\");",
ScriptOptions.Default,
typeof(ScriptGlobals));
var runner = script.CreateDelegate();
var missionModel = new ScriptMissionModel(
"TestMission",
new List<ScriptMissionParameterModel>(),
"code",
100,
false,
false,
runner);
_missionManager.Load([missionModel]);
_missionManager.Start();
// Act
var missionId = _scriptEngineGlobals.CreateMission("TestMission");
// Assert
Assert.That(missionId, Is.Not.EqualTo(Guid.Empty));
}
[Test]
public void CreateMission_WithNonExistentMission_ShouldThrowInvalidOperationException()
{
// Act & Assert
Assert.Throws<InvalidOperationException>(() =>
_scriptEngineGlobals.CreateMission("NonExistentMission"));
}
[Test]
public void CancelMission_WithExistingMission_ShouldReturnTrue()
{
// Arrange
var script = CSharpScript.Create<IAsyncEnumerable<MissionStatus>>(
"yield return new MissionStatus(100, \"Success\");",
ScriptOptions.Default,
typeof(ScriptGlobals));
var runner = script.CreateDelegate();
var missionModel = new ScriptMissionModel(
"TestMission",
new List<ScriptMissionParameterModel>(),
"code",
100,
false,
false,
runner);
_missionManager.Load([missionModel]);
_missionManager.Start();
var missionId = _missionManager.CreateMission("TestMission", Array.Empty<object>()).Data;
// Act
var result = _scriptEngineGlobals.CancelMission(missionId, "Test reason");
// Assert
Assert.That(result, Is.True);
}
[Test]
public void CancelMission_WithNonExistentMission_ShouldReturnFalse()
{
// Act
var result = _scriptEngineGlobals.CancelMission(Guid.NewGuid(), "Test reason");
// Assert
Assert.That(result, Is.False);
}
[Test]
public void EnableTask_WithExistingTask_ShouldSucceed()
{
// Arrange
var script = CSharpScript.Create(
"await Task.Delay(10);",
ScriptOptions.Default,
typeof(ScriptGlobals));
var runner = script.CreateDelegate();
var taskModel = new ScriptTaskModel(
"TestTask",
1000,
false,
"code",
runner);
_taskManager.Load([taskModel]);
_taskManager.Start();
// Act & Assert
Assert.DoesNotThrow(() => _scriptEngineGlobals.EnableTask("TestTask"));
}
[Test]
public void EnableTask_WithNonExistentTask_ShouldThrowInvalidOperationException()
{
// Act & Assert
Assert.Throws<InvalidOperationException>(() =>
_scriptEngineGlobals.EnableTask("NonExistentTask"));
}
[Test]
public void DisableTask_WithExistingTask_ShouldSucceed()
{
// Arrange
var script = CSharpScript.Create(
"await Task.Delay(10);",
ScriptOptions.Default,
typeof(ScriptGlobals));
var runner = script.CreateDelegate();
var taskModel = new ScriptTaskModel(
"TestTask",
1000,
false,
"code",
runner);
_taskManager.Load([taskModel]);
_taskManager.Start();
_taskManager.EnableTask("TestTask");
// Act & Assert
Assert.DoesNotThrow(() => _scriptEngineGlobals.DisableTask("TestTask"));
}
[Test]
public void DisableTask_WithNonExistentTask_ShouldThrowInvalidOperationException()
{
// Act & Assert
Assert.Throws<InvalidOperationException>(() =>
_scriptEngineGlobals.DisableTask("NonExistentTask"));
}
[TearDown]
public void TearDown()
{
_taskManager?.Dispose();
_missionManager?.Dispose();
}
}