ThreatSourceLibaray/ThreatSource.Tests/src/Indicator/LaserDesignatorTests.cs

134 lines
4.4 KiB
C#

using Xunit;
using ThreatSource.Indicator;
using ThreatSource.Simulation;
using ThreatSource.Utils;
using ThreatSource.Tests.Simulation;
using ThreatSource.Equipment;
using ThreatSource.Jammer;
namespace ThreatSource.Tests.Indicator
{
public class LaserDesignatorTests
{
private readonly SimulationManager _simulationManager;
private readonly TestSimulationAdapter _testAdapter;
private readonly LaserDesignator _laserDesignator;
private readonly LaserDesignatorConfig _config;
private readonly Tank _tank;
public LaserDesignatorTests()
{
_simulationManager = new SimulationManager();
_testAdapter = new TestSimulationAdapter(_simulationManager);
_simulationManager.SetSimulationAdapter(_testAdapter);
_config = new LaserDesignatorConfig
{
LaserPower = 1000,
LaserDivergenceAngle = 0.001,
JammingResistanceThreshold = 1.0,
LaserWavelength = 1.06
};
var tankInitialMotion = new MotionParameters
{
Position = new Vector3D(100, 0, 0),
Orientation = new Orientation(0, 0, 0),
InitialSpeed = 0
};
var tankProperties = new EquipmentProperties
{
RadarCrossSection = 1.0,
InfraredRadiationIntensity = 10.0,
UltravioletRadiationIntensity = 10.0,
MillimeterWaveRadiationIntensity = 10.0
};
_tank = new Tank("target1", tankProperties, tankInitialMotion, _simulationManager);
_simulationManager.RegisterEntity("target1", _tank);
var designatorInitialMotion = new MotionParameters
{
Position = new Vector3D(0, 100, 0),
Orientation = new Orientation(0, 0, 0),
InitialSpeed = 0
};
_laserDesignator = new LaserDesignator(
"laser1",
"target1",
"missile1",
_config,
designatorInitialMotion,
_simulationManager
);
_simulationManager.RegisterEntity("laser1", _laserDesignator);
}
[Fact]
public void Constructor_InitializesPropertiesCorrectly()
{
Assert.Equal("laser1", _laserDesignator.Id);
Assert.Equal("target1", _laserDesignator.TargetId);
Assert.Equal("missile1", _laserDesignator.MissileId);
Assert.Equal(1000, _laserDesignator.config.LaserPower);
Assert.Equal(0.001, _laserDesignator.config.LaserDivergenceAngle);
Assert.False(_laserDesignator.IsActive);
Assert.False(_laserDesignator.IsIlluminationOn);
Assert.False(_laserDesignator.IsJammed);
}
[Fact]
public void Activate_SetsCorrectState()
{
// Act
_laserDesignator.Activate();
// Assert
Assert.True(_laserDesignator.IsActive);
}
[Fact]
public void Deactivate_SetsCorrectState()
{
// Arrange
_laserDesignator.Activate();
// Act
_laserDesignator.Deactivate();
// Assert
Assert.False(_laserDesignator.IsActive);
}
[Theory]
[InlineData(1000000, true)] // 高功率干扰
[InlineData(1, false)] // 低功率干扰
public void LaserJamming_SetsCorrectJammedState(double jammingPower, bool expectedJammedState)
{
// Arrange
_laserDesignator.Activate();
// Act
_simulationManager.PublishEvent(new JammingEvent
{
Parameters = new JammingParameters
{
JammerId = "jammer1",
Power = jammingPower,
Wavelength = 1.06,
SourcePosition = new Vector3D(0, 10, 0),
Direction = new Vector3D(0, 1, 0),
AngleRange = Math.PI / 4,
Mode = JammingMode.Blocking,
Type = JammingType.Laser,
Duration = null
}
});
_laserDesignator.Update(0.1);
// Assert
Assert.Equal(expectedJammedState, _laserDesignator.IsJammed);
}
}
}