Add some tests of the listTokenDetails request

Change-Id: I5dc2ae390777454128f18bef95bb00dcbce18f66
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/100600
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/edit/test_all.dart b/pkg/analysis_server/test/edit/test_all.dart
index 70251a6..62595d3 100644
--- a/pkg/analysis_server/test/edit/test_all.dart
+++ b/pkg/analysis_server/test/edit/test_all.dart
@@ -12,6 +12,7 @@
 import 'refactoring_test.dart' as refactoring;
 import 'sort_members_test.dart' as sort_members;
 import 'statement_completion_test.dart' as statement_completion;
+import 'token_details_test.dart' as token_details;
 
 main() {
   defineReflectiveSuite(() {
@@ -23,5 +24,6 @@
     refactoring.main();
     sort_members.main();
     statement_completion.main();
+    token_details.main();
   }, name: 'edit');
 }
diff --git a/pkg/analysis_server/test/edit/token_details_test.dart b/pkg/analysis_server/test/edit/token_details_test.dart
new file mode 100644
index 0000000..5d1be56
--- /dev/null
+++ b/pkg/analysis_server/test/edit/token_details_test.dart
@@ -0,0 +1,54 @@
+// 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 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/domain_completion.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../analysis_abstract.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(CompletionListTokenDetailsTest);
+  });
+}
+
+@reflectiveTest
+class CompletionListTokenDetailsTest extends AbstractAnalysisTest {
+  CompletionDomainHandler completionHandler;
+
+  Future<CompletionListTokenDetailsResult> getTokenDetails() async {
+    CompletionListTokenDetailsParams params =
+        new CompletionListTokenDetailsParams(testFile);
+    await completionHandler.listTokenDetails(params.toRequest('0'));
+    Response response = await serverChannel.responseController.stream.first;
+    return CompletionListTokenDetailsResult.fromResponse(response);
+  }
+
+  @override
+  void setUp() {
+    super.setUp();
+    completionHandler = new CompletionDomainHandler(server);
+  }
+
+  test_packageUri() async {
+    newFile('/project/.packages', content: ''''
+project:lib/
+''');
+    newFile('/project/lib/c.dart', content: ''''
+class C {}
+''');
+    addTestFile('''
+import 'package:project/c.dart';
+
+C c;
+''');
+    createProject();
+    CompletionListTokenDetailsResult result = await getTokenDetails();
+    List<TokenDetails> tokens = result.tokens;
+    expect(tokens, hasLength(6));
+  }
+}
diff --git a/pkg/analysis_server/test/integration/completion/list_token_details_test.dart b/pkg/analysis_server/test/integration/completion/list_token_details_test.dart
new file mode 100644
index 0000000..04df740
--- /dev/null
+++ b/pkg/analysis_server/test/integration/completion/list_token_details_test.dart
@@ -0,0 +1,60 @@
+// 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 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../support/integration_tests.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ListTokenDetailsTest);
+  });
+}
+
+@reflectiveTest
+class ListTokenDetailsTest extends AbstractAnalysisServerIntegrationTest {
+  String testPackagePath;
+
+  Future setUp() async {
+    await super.setUp();
+    testPackagePath = path.join(sourceDirectory.path, 'test_package');
+  }
+
+  @override
+  Future standardAnalysisSetup({bool subscribeStatus: true}) {
+    List<Future> futures = <Future>[];
+    if (subscribeStatus) {
+      futures.add(sendServerSetSubscriptions([ServerService.STATUS]));
+    }
+    futures.add(sendAnalysisSetAnalysisRoots([testPackagePath], []));
+    return Future.wait(futures);
+  }
+
+  test_getSuggestions() async {
+    String aPath = path.join(sourceDirectory.path, 'a');
+    String aLibPath = path.join(aPath, 'lib');
+    writeFile(path.join(aLibPath, 'a.dart'), '''
+class A {}
+''');
+    writeFile(path.join(testPackagePath, '.packages'), '''
+a:file://$aLibPath
+test_package:lib/
+''');
+    String testFilePath = path.join(testPackagePath, 'lib', 'test.dart');
+    writeFile(testFilePath, '''
+import 'package:a/a.dart';
+class B {}
+String f(A a, B b) => a.toString() + b.toString();
+''');
+    await standardAnalysisSetup();
+    await analysisFinished;
+
+    CompletionListTokenDetailsResult result =
+        await sendCompletionListTokenDetails(testFilePath);
+    expect(result, isNotNull);
+  }
+}
diff --git a/pkg/analysis_server/test/integration/completion/test_all.dart b/pkg/analysis_server/test/integration/completion/test_all.dart
index 1b5962b..11ed77f 100644
--- a/pkg/analysis_server/test/integration/completion/test_all.dart
+++ b/pkg/analysis_server/test/integration/completion/test_all.dart
@@ -4,13 +4,12 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'get_suggestions_test.dart' as get_suggestions_test;
+import 'get_suggestions_test.dart' as get_suggestions;
+import 'list_token_details_test.dart' as list_token_details;
 
-/**
- * Utility for manually running all integration tests.
- */
 main() {
   defineReflectiveSuite(() {
-    get_suggestions_test.main();
+    get_suggestions.main();
+    list_token_details.main();
   }, name: 'completion');
 }
diff --git a/pkg/analysis_server/test/integration/coverage.md b/pkg/analysis_server/test/integration/coverage.md
index 1728314..6331b59 100644
--- a/pkg/analysis_server/test/integration/coverage.md
+++ b/pkg/analysis_server/test/integration/coverage.md
@@ -33,7 +33,7 @@
 - [ ] completion.availableSuggestions
 - [ ] completion.getSuggestionDetails
 - [x] completion.getSuggestions
-- [ ] completion.listTokenDetails
+- [x] completion.listTokenDetails
 - [ ] completion.registerLibraryPaths
 - [ ] completion.results
 - [ ] completion.setSubscriptions