Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: pkg/analysis_server/test/integration/analysis/get_hover_test.dart

Issue 465513002: Split analysis_domain_int_test.dart into several test files. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/integration/analysis/get_hover_test.dart
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..718b4167c916a449cac640e46285b0c42f8e3677
--- /dev/null
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -0,0 +1,176 @@
+// Copyright (c) 2014, 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.
+
+library test.integration.analysis.get.hover;
+
+import 'dart:async';
+
+import 'package:analysis_testing/reflective_tests.dart';
+import 'package:path/path.dart';
+import 'package:unittest/unittest.dart';
+
+import '../integration_tests.dart';
+
+@ReflectiveTestCase()
+class AnalysisGetHoverIntegrationTest extends
+ AbstractAnalysisServerIntegrationTest {
+ /**
+ * Pathname of the file containing Dart code.
+ */
+ String pathname;
+
+ /**
+ * Dart code under test.
+ */
+ final String text =
+ r'''
+library lib.test;
+
+List topLevelVar;
+
+/**
+ * Documentation for func
+ */
+void func(int param) {
+ num localVar = topLevelVar.length;
+ topLevelVar.length = param;
+ topLevelVar.add(localVar);
+}
+
+main() {
+ // comment
+ func(35);
+}
+''';
+
+ setUp() {
+ return super.setUp().then((_) {
+ pathname = sourcePath('test.dart');
+ });
+ }
+
+ test_getHover() {
+ writeFile(pathname, text);
+ standardAnalysisSetup();
+
+ // Note: analysis.getHover doesn't wait for analysis to complete--it simply
+ // returns the latest results that are available at the time that the
+ // request is made. So wait for analysis to finish before testing anything.
+ return analysisFinished.then((_) {
+ List<Future> tests = [];
+ tests.add(checkHover('topLevelVar;', 11, ['List', 'topLevelVar'],
+ 'top level variable', ['List']));
+ tests.add(checkHover('func(', 4, ['func', 'int', 'param'], 'function',
+ ['int', 'void'], docRegexp: 'Documentation for func'));
+ tests.add(checkHover('int param', 3, ['int'], 'class', ['int'], isCore:
+ true, docRegexp: '.*'));
+ tests.add(checkHover('param)', 5, ['int', 'param'], 'parameter', ['int'],
+ docRegexp: 'Documentation for func'));
+ tests.add(checkHover('num localVar', 3, ['num'], 'class', ['num'], isCore:
+ true, docRegexp: '.*'));
+ tests.add(checkHover('localVar =', 8, ['num', 'localVar'],
+ 'local variable', ['num'], propagatedType: 'int'));
+ tests.add(checkHover('topLevelVar.length;', 11, ['List', 'topLevelVar'],
+ 'top level variable', ['List']));
+ tests.add(checkHover('length;', 6, ['get', 'length', 'int'], 'getter',
+ ['int'], isCore: true, docRegexp: '.*'));
+ tests.add(checkHover('length =', 6, ['set', 'length', 'int'], 'setter',
+ ['int'], isCore: true, docRegexp: '.*'));
+ tests.add(checkHover('param;', 5, ['int', 'param'], 'parameter', ['int'],
+ docRegexp: 'Documentation for func'));
+ tests.add(checkHover('add(', 3, ['List', 'add'], 'method', null, isCore:
+ true, docRegexp: '.*'));
+ tests.add(checkHover('localVar)', 8, ['num', 'localVar'],
+ 'local variable', ['num'], parameterRegexps: ['.*'], propagatedType: 'int'));
+ tests.add(checkHover('func(35', 4, ['func', 'int', 'param'], 'function',
+ null, docRegexp: 'Documentation for func'));
+ tests.add(checkHover('35', 2, null, null, ['int'], isLiteral: true,
+ parameterRegexps: ['int', 'param']));
+ tests.add(checkNoHover('comment'));
+ return Future.wait(tests);
+ });
+ }
+
+ /**
+ * Check that a getHover request on the substring [target] produces a result
+ * which has length [length], has an elementDescription matching every
+ * regexp in [descriptionRegexps], has a kind of [kind], and has a staticType
+ * matching [staticTypeRegexps].
+ *
+ * [isCore] means the hover info should indicate that the element is defined
+ * in dart.core. [docRegexp], if specified, should match the documentation
+ * string of the element. [isLiteral] means the hover should indicate a
+ * literal value. [parameterRegexps] means is a set of regexps which should
+ * match the hover parameters. [propagatedType], if specified, is the
+ * expected propagated type of the element.
+ */
+ checkHover(String target, int length, List<String> descriptionRegexps, String
+ kind, List<String> staticTypeRegexps, {bool isCore: false, String docRegexp:
+ null, bool isLiteral: false, List<String> parameterRegexps:
+ null, propagatedType: null}) {
+ int offset = text.indexOf(target);
+ return sendAnalysisGetHover(pathname, offset).then((result) {
+ expect(result['hovers'], hasLength(1));
+ var info = result['hovers'][0];
+ expect(info['offset'], equals(offset));
+ expect(info['length'], equals(length));
+ if (isCore) {
+ expect(basename(info['containingLibraryPath']), equals('core.dart'));
+ expect(info['containingLibraryName'], equals('dart.core'));
+ } else if (isLiteral) {
+ expect(info['containingLibraryPath'], isNull);
+ expect(info['containingLibraryName'], isNull);
+ } else {
+ expect(info['containingLibraryPath'], equals(pathname));
+ expect(info['containingLibraryName'], equals('lib.test'));
+ }
+ if (docRegexp == null) {
+ expect(info['dartdoc'], isNull);
+ } else {
+ expect(info['dartdoc'], matches(docRegexp));
+ }
+ if (descriptionRegexps == null) {
+ expect(info['elementDescription'], isNull);
+ } else {
+ expect(info['elementDescription'], isString);
+ for (String descriptionRegexp in descriptionRegexps) {
+ expect(info['elementDescription'], matches(descriptionRegexp));
+ }
+ }
+ expect(info['elementKind'], equals(kind));
+ if (parameterRegexps == null) {
+ expect(info['parameter'], isNull);
+ } else {
+ expect(info['parameter'], isString);
+ for (String parameterRegexp in parameterRegexps) {
+ expect(info['parameter'], matches(parameterRegexp));
+ }
+ }
+ expect(info['propagatedType'], equals(propagatedType));
+ if (staticTypeRegexps == null) {
+ expect(info['staticType'], isNull);
+ } else {
+ expect(info['staticType'], isString);
+ for (String staticTypeRegexp in staticTypeRegexps) {
+ expect(info['staticType'], matches(staticTypeRegexp));
+ }
+ }
+ });
+ }
+
+ /**
+ * Check that a getHover request on the substring [target] produces no
+ * results.
+ */
+ Future checkNoHover(String target) {
+ int offset = text.indexOf(target);
+ return sendAnalysisGetHover(pathname, offset).then((result) {
+ expect(result['hovers'], hasLength(0));
+ });
+ }
+}
+
+main() {
+ runReflectiveTests(AnalysisGetHoverIntegrationTest);
+}

Powered by Google App Engine
This is Rietveld 408576698