Files
kompas3d-mcp/tests/Kompas.Mcp.Tests/DimensionOrientationsTests.cs
mikhail 910d120c8a feat: drawing_add_diametral_dimension — диаметральный размер на виде (API7)
Веха 2D-ЧЕРТЁЖ, инкремент 4. DrawingService.AddDiametralDimensionAsync:
(ISymbols2DContainer)view.DiametralDimensions.Add → Xc/Yc/Radius/Angle(рад) +
AutoNominalValue → Update → Valid → NominalValue (= диаметр 2R). angle в градусах
(DimensionAngles.ToRadians). Новый инструмент drawing_add_diametral_dimension.

Рефактор по ревью Codex: извлечён RequireSymbols2DContainer(viewNumber) (общий для
линейных/диаметральных размеров); AutoNominalValue выставляется явно (как у линейного);
DimensionType — COM-дефолт; ToRadians — чистый helper с unit-тестом.

Валидаторы: RequirePositiveRadius (новый). Тесты: +10 unit (ToRadians,
RequirePositiveRadius), +4 integration (DrawingDiametralTests: диаметр=2R, адресация
вида, radius<=0, нет видов). Итого 141 unit + 76 integration = 217.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:30:04 +03:00

37 lines
1.5 KiB
C#

using Kompas.Mcp.Core.Drawings;
namespace Kompas.Mcp.Tests;
[Trait("Category", "Unit")]
public sealed class DimensionOrientationsTests
{
[Theory]
[InlineData("horizontal", DimensionOrientation.Horizontal)]
[InlineData("vertical", DimensionOrientation.Vertical)]
[InlineData("parallel", DimensionOrientation.Parallel)]
[InlineData("ГОРИЗОНТАЛЬНЫЙ", DimensionOrientation.Horizontal)]
[InlineData(" vertical ", DimensionOrientation.Vertical)]
public void Parse_maps_known(string value, DimensionOrientation expected)
=> Assert.Equal(expected, DimensionOrientations.Parse(value));
[Fact]
public void Parse_throws_on_unknown()
=> Assert.Throws<ArgumentException>(() => DimensionOrientations.Parse("diagonal"));
// ToKompas (→ ksLineDimensionOrientationEnum) намеренно НЕ покрыт unit-тестом: тестовый проект
// не ссылается на Kompas6Constants (граница проекта). Маппинг тривиален и проверяется интеграцией
// (horizontal → |X2-X1|, vertical → |Y2-Y1|).
[Theory]
[InlineData(0, 0)]
[InlineData(90, Math.PI / 2)]
[InlineData(180, Math.PI)]
[InlineData(-45, -Math.PI / 4)]
public void ToRadians_converts_degrees(double degrees, double expected)
=> Assert.Equal(expected, DimensionAngles.ToRadians(degrees), 9);
[Fact]
public void ToRadians_throws_on_non_finite()
=> Assert.Throws<ArgumentException>(() => DimensionAngles.ToRadians(double.NaN));
}