Files
kompas3d-mcp/tests/Kompas.Mcp.Tests/TextMetricsTests.cs
T
mikhail 31b933e1cc Ответ надписи — габарит глифов; запись на диск создаёт каталог
ksConvertTextToCurve ВОЗВРАЩАЕТ ссылку на кривые, и только по ней ksGetObjGabaritRect
даёт габарит букв: по текстовой ссылке это ячейка строки (Arial h=10 «HH» — 23.75 против
19.97 у глифов, второе совпадает с выдавленным телом). Агент вписывает надпись в поле
по габариту, поэтому в ответе теперь оба числа.

OutputPath.Prepare создаёт каталог назначения и делает путь абсолютным (document_save,
export_step, снимок): КОМПАС в несуществующую папку молча не пишет, а диагностика при
этом винила занятое имя файла — чинили не ту причину. Причины разведены.
2026-07-31 16:36:01 +03:00

46 lines
2.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Kompas.Mcp.Core.Modeling;
namespace Kompas.Mcp.Tests;
/// <summary>
/// Ответ по надписи. Агент вписывает текст в заданное поле, поэтому ему нужен габарит ГЛИФОВ;
/// ширина ячейки (ksGetTextLengthFromReference) больше него на 1–2 % у наборных шрифтов и на
/// 7–9 % у скриптовых — подстановка одного вместо другого промахивается мимо поля.
/// </summary>
[Trait("Category", "Unit")]
public sealed class TextMetricsTests
{
[Fact]
public void Box_and_cell_are_both_reported()
{
var m = new TextMetrics(94.57, (1.0, 12.14, 87.93, 28.94));
var text = m.Describe("OldMan");
Assert.Contains("OldMan", text, StringComparison.Ordinal);
Assert.Contains("1.00…87.93", text, StringComparison.Ordinal); // габарит по X
Assert.Contains("12.14…28.94", text, StringComparison.Ordinal); // габарит по Y
Assert.Contains("86.93 × 16.80", text, StringComparison.Ordinal); // ширина × высота глифов
Assert.Contains("94.57", text, StringComparison.Ordinal); // ячейка — отдельно
}
[Fact]
public void Missing_box_is_stated_instead_of_being_faked()
{
var text = new TextMetrics(50.0, null).Describe("EDITION");
Assert.Contains("50.00", text, StringComparison.Ordinal);
Assert.Contains("не отдал", text, StringComparison.Ordinal);
}
[Fact]
public void Decimal_separator_does_not_depend_on_the_machine_locale()
{
var text = new TextMetrics(1.5, (0, 0, 1, 2)).Describe("x");
// Запятая в строке есть — она разделяет оси; проверяем именно дробную часть числа.
Assert.Contains("1.50", text, StringComparison.Ordinal);
Assert.DoesNotContain("1,50", text, StringComparison.Ordinal);
}
}