diff --git a/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs b/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs index 88fc061f954..3cbecd6617c 100644 --- a/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs +++ b/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs @@ -176,7 +176,7 @@ protected async Task WaitUntilAllStatusAreCompleted(Text bool allowStale = false) { cancellationToken ??= CancellationToken; - if ((!await WaitUntilResolutionFinished(documentId, cancellationToken))) { + if ((!await WaitUntilResolutionFinished(documentId, cancellationToken.Value))) { return null; } @@ -198,11 +198,13 @@ bool FinishedStatus(NamedVerifiableStatus method) { } } - public async Task WaitUntilResolutionFinished(TextDocumentItem documentId, CancellationToken? cancellationToken) { + public async Task WaitUntilResolutionFinished(TextDocumentItem documentId, + CancellationToken cancellationToken = default) { + CompilationStatusParams compilationStatusParams = compilationStatusReceiver.GetLast(s => s.Uri == documentId.Uri); while (compilationStatusParams == null || compilationStatusParams.Version != documentId.Version || compilationStatusParams.Uri != documentId.Uri || compilationStatusParams.Status is CompilationStatus.Parsing or CompilationStatus.ResolutionStarted) { - compilationStatusParams = await compilationStatusReceiver.AwaitNextNotificationAsync(cancellationToken.Value); + compilationStatusParams = await compilationStatusReceiver.AwaitNextNotificationAsync(cancellationToken); } return compilationStatusParams.Status == CompilationStatus.ResolutionSucceeded; diff --git a/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs b/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs index 49f49f724ee..b156adf4b51 100644 --- a/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs +++ b/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs @@ -55,13 +55,15 @@ public async Task AwaitNextNotificationAsync(CancellationToken ca try { await availableNotifications.WaitAsync(cancellationToken); } catch (OperationCanceledException) { - logger.LogInformation($"Waited for {(DateTime.Now - start).Seconds} seconds"); + var last = History.Any() ? History[-1].Stringify() : "none"; + logger.LogInformation($"Waited for {(DateTime.Now - start).Seconds} seconds for new notification.\n" + + $"Last received notification was {last}"); throw; } if (notifications.TryDequeue(out var notification)) { return notification; } - throw new System.InvalidOperationException("got a signal for a received notification but it was not present in the queue"); + throw new InvalidOperationException("got a signal for a received notification but it was not present in the queue"); } } }