Files
kompas3d-mcp/tests/Kompas.Mcp.Tests/Integration/KompasFixture.cs
T
mikhail 0038790902 feat(core): STA dispatcher + KOMPAS connection session (S3)
- KompasDispatcher: выделенный STA-поток + очередь задач, InvokeAsync<T>,
  inline-выполнение вложенных вызовов, корректный Dispose
- NativeMethods: attach к запущенному COM (CLSIDFromProgID + GetActiveObject,
  замена отсутствующего в .NET 8 Marshal.GetActiveObject)
- KompasSession: подключение через API5 (KompasObject) -> API7 (IApplication),
  attach/launch, версия/редакция, освобождение COM на STA-потоке
- tests: 5 unit-тестов диспетчера + 3 интеграционных теста подключения (зелёные)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 23:42:52 +03:00

36 lines
1.2 KiB
C#

using Kompas.Mcp.Core;
using Kompas.Mcp.Core.Threading;
namespace Kompas.Mcp.Tests.Integration;
/// <summary>
/// Общая фикстура интеграционных тестов: один STA-диспетчер и одно подключение к КОМПАС
/// на весь набор тестов коллекции (КОМПАС присоединяется/запускается единожды).
/// </summary>
public sealed class KompasFixture : IDisposable
{
public KompasDispatcher Dispatcher { get; }
public KompasSession Session { get; }
public KompasConnectionInfo Info { get; }
public KompasFixture()
{
Dispatcher = new KompasDispatcher();
Session = new KompasSession(Dispatcher);
Info = Session.ConnectAsync(visible: true).GetAwaiter().GetResult();
}
public void Dispose()
{
Session.Dispose();
Dispatcher.Dispose();
}
}
/// <summary>Коллекция, позволяющая делить одно подключение между классами интеграционных тестов.</summary>
[CollectionDefinition(Name)]
public sealed class KompasCollection : ICollectionFixture<KompasFixture>
{
public const string Name = "kompas";
}