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

Unified Diff: pkg/analysis_server/test/integration/analysis_domain_inttest.dart

Issue 405473006: Three new analysis server integration tests (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 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
« no previous file with comments | « no previous file | pkg/analysis_server/test/integration/integration_tests.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/test/integration/analysis_domain_inttest.dart
diff --git a/pkg/analysis_server/test/integration/analysis_domain_inttest.dart b/pkg/analysis_server/test/integration/analysis_domain_inttest.dart
new file mode 100644
index 0000000000000000000000000000000000000000..f239f6fdb2fbbfc482f6b2f332ffe9bab5cd0de4
--- /dev/null
+++ b/pkg/analysis_server/test/integration/analysis_domain_inttest.dart
@@ -0,0 +1,166 @@
+// 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.domain;
+
+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 AnalysisDomainIntegrationTest extends
+ AbstractAnalysisServerIntegrationTest {
+ test_getHover() {
+ String filename = 'test.dart';
+ String pathname = normalizePath(filename);
+ 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() {
+ func(35);
+}
+''';
+ writeFile(filename, text);
+ setAnalysisRoots(['']);
+
+ testHover(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 server.send('analysis.getHover', {
scheglov 2014/07/18 00:03:38 Should we use constants?
Paul Berry 2014/07/18 02:21:15 Yeah, good point. Fixed.
+ 'file': pathname,
+ 'offset': offset
+ }).then((result) {
+ expect(result, isAnalysisGetHoverResult);
+ 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));
+ }
+ }
+ });
+ }
+
+ // 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(testHover('topLevelVar;', 11, ['List', 'topLevelVar'],
+ 'top level variable', ['List']));
+ tests.add(testHover('func(', 4, ['func', 'int', 'param'], 'function',
+ ['int', 'void'], docRegexp: 'Documentation for func'));
+ tests.add(testHover('int param', 3, ['int'], 'class', ['int'], isCore:
+ true, docRegexp: '.*'));
+ tests.add(testHover('param)', 5, ['int', 'param'], 'parameter', ['int'],
+ docRegexp: 'Documentation for func'));
+ tests.add(testHover('num localVar', 3, ['num'], 'class', ['num'], isCore:
+ true, docRegexp: '.*'));
+ tests.add(testHover('localVar =', 8, ['num', 'localVar'],
+ 'local variable', ['num'], propagatedType: 'int'));
+ tests.add(testHover('topLevelVar.length;', 11, ['List', 'topLevelVar'],
+ 'top level variable', ['List']));
+ tests.add(testHover('length;', 6, ['get', 'length', 'int'], 'getter',
+ ['int'], isCore: true, docRegexp: '.*'));
+ tests.add(testHover('length =', 6, ['set', 'length', 'int'], 'setter',
+ ['int'], isCore: true, docRegexp: '.*'));
+ tests.add(testHover('param;', 5, ['int', 'param'], 'parameter', ['int'],
+ docRegexp: 'Documentation for func'));
+ tests.add(testHover('add(', 3, ['List', 'add'], 'method', null, isCore:
+ true, docRegexp: '.*'));
+ tests.add(testHover('localVar)', 8, ['num', 'localVar'], 'local variable',
+ ['num'], parameterRegexps: ['.*'], propagatedType: 'int'));
+ tests.add(testHover('func(35', 4, ['func', 'int', 'param'], 'function',
+ null, docRegexp: 'Documentation for func'));
+ tests.add(testHover('35', 2, null, null, ['int'], isLiteral: true,
+ parameterRegexps: ['int', 'param']));
+ return Future.wait(tests);
+ });
+ }
+
+ fail_test_getHover_noInfo() {
+ String filename = 'test.dart';
+ String pathname = normalizePath(filename);
+ String text =
+ r'''
+main() {
+ // no code
+}
+''';
+ writeFile(filename, text);
+ setAnalysisRoots(['']);
+
+ // 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((_) {
+ return server.send('analysis.getHover', {
+ 'file': pathname,
+ 'offset': text.indexOf('no code')
+ }).then((result) {
+ expect(result, isAnalysisGetHoverResult);
+ expect(result['hovers'], hasLength(0));
+ });
+ });
+ }
+}
+
+main() {
+ runReflectiveTests(AnalysisDomainIntegrationTest);
+}
« no previous file with comments | « no previous file | pkg/analysis_server/test/integration/integration_tests.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698