CNC编码窗体名称不统一,保持与右侧属性面板中算子名称
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Moq;
|
||||
using Prism.Events;
|
||||
using XP.Common.Logging.Interfaces;
|
||||
using XP.Hardware.MotionControl.Abstractions;
|
||||
using XP.Hardware.MotionControl.Abstractions.Enums;
|
||||
using Xunit;
|
||||
using XplorePlane.Models;
|
||||
using XplorePlane.Services.Cnc;
|
||||
using XplorePlane.Services.Matrix;
|
||||
using XplorePlane.ViewModels.Cnc;
|
||||
|
||||
namespace XplorePlane.Tests.ViewModels
|
||||
{
|
||||
public class MatrixEditorViewModelTests
|
||||
{
|
||||
[Fact]
|
||||
public void Constructor_CreatesTwoByTwoLayoutByDefault()
|
||||
{
|
||||
var fixture = CreateFixture();
|
||||
|
||||
Assert.Equal(2, fixture.ViewModel.Rows);
|
||||
Assert.Equal(2, fixture.ViewModel.Columns);
|
||||
Assert.Equal(4, fixture.ViewModel.Cells.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RecordCurrentPosition_RefreshesMotionAxesAndRecordsLatestCoordinates()
|
||||
{
|
||||
var fixture = CreateFixture(stageXmm: 12.3456, stageYmm: -3.2546);
|
||||
var teachPoint = fixture.ViewModel.CurrentTeachPoint;
|
||||
|
||||
fixture.ViewModel.RecordCurrentPositionCommand.Execute();
|
||||
|
||||
fixture.StageX.Verify(axis => axis.UpdateStatus(), Times.Once);
|
||||
fixture.StageY.Verify(axis => axis.UpdateStatus(), Times.Once);
|
||||
Assert.True(teachPoint.HasRecorded);
|
||||
Assert.Equal(12.346, teachPoint.RecordedX);
|
||||
Assert.Equal(-3.255, teachPoint.RecordedY);
|
||||
Assert.Equal("X:12.346 Y:-3.255 mm", teachPoint.CoordinateLabel);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AutoGenerate_UsesRecordedMillimeterCoordinatesWithoutUnitScaling()
|
||||
{
|
||||
var fixture = CreateFixture(stageXmm: 10.1234, stageYmm: 20.1234);
|
||||
|
||||
fixture.ViewModel.RecordCurrentPositionCommand.Execute();
|
||||
fixture.StageX.SetupGet(axis => axis.ActualPosition).Returns(11.2345);
|
||||
fixture.StageY.SetupGet(axis => axis.ActualPosition).Returns(25.6789);
|
||||
fixture.ViewModel.RecordCurrentPositionCommand.Execute();
|
||||
|
||||
fixture.ViewModel.AutoGenerateCommand.Execute();
|
||||
|
||||
var bottomLeft = fixture.ViewModel.Cells[2];
|
||||
var bottomRight = fixture.ViewModel.Cells[3];
|
||||
Assert.Equal(1.112, bottomLeft.OffsetX);
|
||||
Assert.Equal(5.556, bottomLeft.OffsetY);
|
||||
Assert.Equal(51.112, bottomRight.OffsetX);
|
||||
Assert.Equal(5.556, bottomRight.OffsetY);
|
||||
Assert.Equal("X:11.235 Y:25.679", bottomLeft.CoordinateLabel);
|
||||
}
|
||||
|
||||
private static Fixture CreateFixture(double stageXmm = 0, double stageYmm = 0)
|
||||
{
|
||||
var matrixService = new Mock<IMatrixService>();
|
||||
matrixService
|
||||
.Setup(service => service.CreateLayout(
|
||||
It.IsAny<int>(), It.IsAny<int>(), It.IsAny<double>(), It.IsAny<double>()))
|
||||
.Returns<int, int, double, double>(CreateLayout);
|
||||
|
||||
var stageX = new Mock<ILinearAxis>();
|
||||
stageX.SetupGet(axis => axis.ActualPosition).Returns(stageXmm);
|
||||
var stageY = new Mock<ILinearAxis>();
|
||||
stageY.SetupGet(axis => axis.ActualPosition).Returns(stageYmm);
|
||||
|
||||
var motionSystem = new Mock<IMotionSystem>();
|
||||
motionSystem.Setup(system => system.GetLinearAxis(AxisId.StageX)).Returns(stageX.Object);
|
||||
motionSystem.Setup(system => system.GetLinearAxis(AxisId.StageY)).Returns(stageY.Object);
|
||||
|
||||
var logger = new Mock<ILoggerService>();
|
||||
logger.Setup(service => service.ForModule<MatrixEditorViewModel>()).Returns(logger.Object);
|
||||
|
||||
var viewModel = new MatrixEditorViewModel(
|
||||
matrixService.Object,
|
||||
Mock.Of<ICncProgramService>(),
|
||||
Mock.Of<IMatrixOrchestrationService>(),
|
||||
motionSystem.Object,
|
||||
Mock.Of<IEventAggregator>(),
|
||||
logger.Object);
|
||||
|
||||
return new Fixture(viewModel, stageX, stageY);
|
||||
}
|
||||
|
||||
private static MatrixLayout CreateLayout(int rows, int columns, double rowSpacing, double columnSpacing)
|
||||
{
|
||||
var cells = new List<MatrixCell>();
|
||||
for (var row = 0; row < rows; row++)
|
||||
{
|
||||
for (var column = 0; column < columns; column++)
|
||||
{
|
||||
cells.Add(new MatrixCell(
|
||||
row,
|
||||
column,
|
||||
column * columnSpacing,
|
||||
row * rowSpacing,
|
||||
true,
|
||||
MatrixCellStatus.NotExecuted,
|
||||
null));
|
||||
}
|
||||
}
|
||||
|
||||
return new MatrixLayout(
|
||||
Guid.NewGuid(), rows, columns, rowSpacing, columnSpacing,
|
||||
0, 0, string.Empty, cells.AsReadOnly());
|
||||
}
|
||||
|
||||
private sealed record Fixture(
|
||||
MatrixEditorViewModel ViewModel,
|
||||
Mock<ILinearAxis> StageX,
|
||||
Mock<ILinearAxis> StageY);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user