test: per-test очистка документов через IntegrationTestBase (CloseAllAsync)
Базовый класс IntegrationTestBase (IAsyncLifetime) закрывает все открытые документы КОМПАС после КАЖДОГО теста (DocumentService.CloseAllAsync) — чтобы не копились вкладки-пустышки и упавший Assert не оставлял открытый документ. Все интеграционные тест-классы переведены на него (: base(fx)); индивидуальные finally CloseAsync сохранены как первичная очистка. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -64,6 +64,26 @@ public sealed class DocumentService
|
||||
=> _dispatcher.InvokeAsync(() => WithActive(d =>
|
||||
d.Close(save ? DocumentCloseOptions.kdSaveChanges : DocumentCloseOptions.kdDoNotSaveChanges)), ct);
|
||||
|
||||
/// <summary>
|
||||
/// Закрыть ВСЕ открытые документы без сохранения; возвращает число закрытых. Применяется для
|
||||
/// очистки между тестами, чтобы не накапливались вкладки-пустышки. Закрываем активный документ
|
||||
/// в цикле (после закрытия активным становится следующий) с защитой от зацикливания: если очередной
|
||||
/// документ закрыть не удалось, прекращаем, чтобы не крутить впустую на одном и том же.
|
||||
/// </summary>
|
||||
public Task<int> CloseAllAsync(CancellationToken ct = default)
|
||||
=> _dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
int closed = 0;
|
||||
for (int guard = 0; guard < 256; guard++)
|
||||
{
|
||||
var doc = _session.Application.ActiveDocument;
|
||||
if (doc is null) break;
|
||||
try { doc.Close(DocumentCloseOptions.kdDoNotSaveChanges); closed++; }
|
||||
finally { ComHelper.Release(doc); }
|
||||
}
|
||||
return closed;
|
||||
}, ct);
|
||||
|
||||
private void WithActive(Action<IKompasDocument> action)
|
||||
=> WithActive(d => { action(d); return true; });
|
||||
|
||||
|
||||
Reference in New Issue
Block a user