using System; using System.Collections.Generic; using Moq; using XP.Common.Logging.Interfaces; using XP.Hardware.RaySource.Services; using XplorePlane.Models; using XplorePlane.Services.AppState; using XplorePlane.Services.Cnc; using XplorePlane.Services.Permission; using Xunit; namespace XplorePlane.Tests.Services { public class CncProgramServiceTests { [Fact] public void SerializeDeserialize_SavePosition_PreservesSaveImage() { var appState = new Mock(); appState.SetupGet(s => s.MotionState).Returns(MotionState.Default); appState.SetupGet(s => s.RaySourceState).Returns(RaySourceState.Default); appState.SetupGet(s => s.DetectorState).Returns(DetectorState.Default); var raySource = new Mock(); var logger = new Mock(); logger.Setup(l => l.ForModule()).Returns(logger.Object); var permissionService = new Mock(); permissionService.Setup(p => p.HasPermission(It.IsAny())).Returns(true); var service = new CncProgramService(appState.Object, raySource.Object, logger.Object, permissionService.Object); var program = new CncProgram( Guid.NewGuid(), "Program", DateTime.UtcNow, DateTime.UtcNow, new List { new SavePositionNode(Guid.NewGuid(), 0, "保存位置_0", MotionState.Default, SaveImage: true) }.AsReadOnly()); var json = service.Serialize(program); var deserialized = service.Deserialize(json); var savePosition = Assert.IsType(Assert.Single(deserialized.Nodes)); Assert.True(savePosition.SaveImage); } } }