31b933e1cc
ksConvertTextToCurve ВОЗВРАЩАЕТ ссылку на кривые, и только по ней ksGetObjGabaritRect даёт габарит букв: по текстовой ссылке это ячейка строки (Arial h=10 «HH» — 23.75 против 19.97 у глифов, второе совпадает с выдавленным телом). Агент вписывает надпись в поле по габариту, поэтому в ответе теперь оба числа. OutputPath.Prepare создаёт каталог назначения и делает путь абсолютным (document_save, export_step, снимок): КОМПАС в несуществующую папку молча не пишет, а диагностика при этом винила занятое имя файла — чинили не ту причину. Причины разведены.
46 lines
2.0 KiB
C#
46 lines
2.0 KiB
C#
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);
|
||
}
|
||
}
|