461e731857
Имя (name) прокидывается до создания объекта: API5 — ksEntity.name перед Create(), API7-пути (примитив, отверстие, булева, рез, перенос грани) — IModelObject.Name перед Update(). Читается назад через ksFeature.name, который только на чтение. Без имени дерево состоит из «Эскиз:1» и «Элемент выдавливания:3». fillet_edge/chamfer_edge принимают список точек: на теле с сотнями рёбер list_edges неподъёмен, а выбор по точке брал одно ребро — четыре угла давали четыре операции. Ненайденные рёбра перечисляются ВСЕ сразу, модель при этом не мутируется.
51 lines
1.9 KiB
C#
51 lines
1.9 KiB
C#
using Kompas.Mcp.Core.Modeling;
|
|
|
|
namespace Kompas.Mcp.Tests;
|
|
|
|
/// <summary>
|
|
/// Имя операции в дереве построения. Дерево из «Эскиз:1…Эскиз:5» нечитаемо, поэтому имя
|
|
/// принимается у каждой операции — но кривое имя (с переводом строки, гигантское) в дереве
|
|
/// отображается искажённо, и лучше сказать об этом сразу.
|
|
/// </summary>
|
|
[Trait("Category", "Unit")]
|
|
public sealed class FeatureNameTests
|
|
{
|
|
[Fact]
|
|
public void Name_is_trimmed()
|
|
=> Assert.Equal("Контур плашки", FeatureName.Normalize(" Контур плашки "));
|
|
|
|
[Theory]
|
|
[InlineData(null)]
|
|
[InlineData("")]
|
|
[InlineData(" ")]
|
|
public void Empty_name_means_leave_the_kompas_default(string? name)
|
|
=> Assert.Null(FeatureName.Normalize(name));
|
|
|
|
[Fact]
|
|
public void Too_long_name_is_rejected_with_the_limit_in_the_message()
|
|
{
|
|
var ex = Assert.Throws<ArgumentException>(() => FeatureName.Normalize(new string('я', FeatureName.MaxLength + 1)));
|
|
Assert.Contains(FeatureName.MaxLength.ToString(), ex.Message, StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void Name_at_the_limit_is_accepted()
|
|
{
|
|
var name = new string('я', FeatureName.MaxLength);
|
|
Assert.Equal(name, FeatureName.Normalize(name));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("Эскиз\nвторая строка")]
|
|
[InlineData("Эскиз\tтабуляция")]
|
|
public void Control_characters_are_rejected(string name)
|
|
=> Assert.Throws<ArgumentException>(() => FeatureName.Normalize(name));
|
|
|
|
[Fact]
|
|
public void Parameter_name_reaches_the_message()
|
|
{
|
|
var ex = Assert.Throws<ArgumentException>(() => FeatureName.Normalize("a\nb", "sketchName"));
|
|
Assert.Equal("sketchName", ex.ParamName);
|
|
}
|
|
}
|