Files
mikhail f89ad951ae feat(drawing): линия-выноска с текстом (drawing_add_leader)
Выноска на виде через API7 ISymbols2DContainer.Leaders. Стрелка указывает в (x,y),
текст на полке у (textX,textY). shelfDirection: auto|right|left|up|down.

- DrawingService.AddLeaderAsync + GetViewLeaderCountAsync
- ShelfDirection (enum + Parse/ToKompas), переиспользует DrawingAnnotationResult
- 13 unit + 7 интеграционных тестов (всего 328 зелёных), сборка Release чистая

КЛЮЧ (спайк): новая выноска имеет 0 ответвлений — сначала (IBranchs)bl.AddBranchByPoint(0,x,y)
(остриё), ИНАЧЕ КОМПАС падает RPC_E_SERVERFAULT; затем SetBranchTextPosition (полка),
(ILeader)bl.TextOnShelf.Str (текст), Update. Ревью спека Codex+pi/glm-5.1+pi/kimi-k2.6 учтено
(QI as?? throw, read-back ?? empty, RequireDistinctPoints, RU-алиасы, критический порядок).

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

33 lines
1.2 KiB
C#

using Kompas.Mcp.Core.Drawings;
namespace Kompas.Mcp.Tests;
[Trait("Category", "Unit")]
public sealed class ShelfDirectionsTests
{
[Theory]
[InlineData("auto", ShelfDirection.Auto)]
[InlineData("right", ShelfDirection.Right)]
[InlineData("left", ShelfDirection.Left)]
[InlineData("up", ShelfDirection.Up)]
[InlineData("down", ShelfDirection.Down)]
[InlineData(" RIGHT ", ShelfDirection.Right)]
[InlineData("авто", ShelfDirection.Auto)]
[InlineData("вправо", ShelfDirection.Right)]
[InlineData("влево", ShelfDirection.Left)]
[InlineData("вверх", ShelfDirection.Up)]
[InlineData("вниз", ShelfDirection.Down)]
public void Parse_maps_known(string value, ShelfDirection expected)
=> Assert.Equal(expected, ShelfDirections.Parse(value));
[Fact]
public void Parse_throws_on_unknown()
=> Assert.Throws<ArgumentException>(() => ShelfDirections.Parse("diagonal"));
[Fact]
public void Parse_throws_on_null()
=> Assert.Throws<ArgumentNullException>(() => ShelfDirections.Parse(null!));
// ToKompas (→ ksShelfDirectionEnum) — граница проекта; для Auto бросает (проверяется косвенно).
}