c92af46433
Bug: https://github.com/dart-lang/sdk/issues/36900 Change-Id: I1306b2df7c789597e49d2033b660a3ea62d6c1a4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104525 Commit-Queue: Todd Volkert <tvolkert@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
100 lines
3.3 KiB
Dart
100 lines
3.3 KiB
Dart
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:test/test.dart';
|
|
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
|
|
|
import 'integration_tests.dart';
|
|
|
|
main() {
|
|
defineReflectiveSuite(() {
|
|
defineReflectiveTests(ServerTest);
|
|
});
|
|
}
|
|
|
|
@reflectiveTest
|
|
class ServerTest extends AbstractLspAnalysisServerIntegrationTest {
|
|
test_diagnosticServer() async {
|
|
await initialize();
|
|
|
|
// Send the custom request to the LSP server to get the Dart diagnostic
|
|
// server info.
|
|
final server = await getDiagnosticServer();
|
|
|
|
expect(server.port, isNotNull);
|
|
expect(server.port, isNonZero);
|
|
expect(server.port, isPositive);
|
|
|
|
// Ensure the server was actually started.
|
|
final client = new HttpClient();
|
|
HttpClientRequest request = await client
|
|
.getUrl(Uri.parse('http://localhost:${server.port}/status'));
|
|
final response = await request.close();
|
|
final responseBody = await utf8.decodeStream(response.cast<List<int>>());
|
|
expect(responseBody, contains('<title>Analysis Server</title>'));
|
|
}
|
|
|
|
test_exit_inintializedWithShutdown() async {
|
|
await initialize();
|
|
await sendShutdown();
|
|
sendExit();
|
|
|
|
await client.channel.closed.timeout(const Duration(seconds: 10),
|
|
onTimeout: () =>
|
|
fail('Server channel did not close within 10 seconds'));
|
|
|
|
final exitCode = await client.exitCode.timeout(const Duration(seconds: 10),
|
|
onTimeout: () => fail('Server process did not exit within 10 seconds'));
|
|
|
|
expect(exitCode, equals(0));
|
|
}
|
|
|
|
test_exit_initializedWithoutShutdown() async {
|
|
// Send a request that we can wait for, to ensure the server is fully ready
|
|
// before we send exit. Otherwise the exit notification won't be handled for
|
|
// a long time (while the server starts up) and will exceed the 10s timeout.
|
|
await initialize();
|
|
sendExit();
|
|
|
|
await client.channel.closed.timeout(const Duration(seconds: 10),
|
|
onTimeout: () =>
|
|
fail('Server channel did not close within 10 seconds'));
|
|
|
|
final exitCode = await client.exitCode.timeout(const Duration(seconds: 10),
|
|
onTimeout: () => fail('Server process did not exit within 10 seconds'));
|
|
|
|
expect(exitCode, equals(1));
|
|
}
|
|
|
|
test_exit_uninintializedWithShutdown() async {
|
|
await sendShutdown();
|
|
sendExit();
|
|
|
|
await client.channel.closed.timeout(const Duration(seconds: 10),
|
|
onTimeout: () =>
|
|
fail('Server channel did not close within 10 seconds'));
|
|
|
|
final exitCode = await client.exitCode.timeout(const Duration(seconds: 10),
|
|
onTimeout: () => fail('Server process did not exit within 10 seconds'));
|
|
|
|
expect(exitCode, equals(0));
|
|
}
|
|
|
|
test_exit_uninitializedWithoutShutdown() async {
|
|
// This tests the same as test_exit_withoutShutdown but without sending
|
|
// initialize. It can't be as strict with the timeout as the server may take
|
|
// time to start up (we can't tell when it's ready without sending a request).
|
|
|
|
sendExit();
|
|
|
|
await client.channel.closed;
|
|
final exitCode = await client.exitCode;
|
|
|
|
expect(exitCode, equals(1));
|
|
}
|
|
}
|