| Index: pkg/analysis_server/test/analysis_notification_occurrences_test.dart
|
| diff --git a/pkg/analysis_server/test/analysis_notification_occurrences_test.dart b/pkg/analysis_server/test/analysis_notification_occurrences_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5cbde265642b93403ca5ce6405c3ad076b8cdcfb
|
| --- /dev/null
|
| +++ b/pkg/analysis_server/test/analysis_notification_occurrences_test.dart
|
| @@ -0,0 +1,165 @@
|
| +// 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.domain.analysis.notification.occurrences;
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:analysis_server/src/analysis_server.dart';
|
| +import 'package:analysis_server/src/computer/computer_occurrences.dart';
|
| +import 'package:analysis_server/src/computer/element.dart';
|
| +import 'package:analysis_server/src/constants.dart';
|
| +import 'package:analysis_server/src/protocol.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +import 'analysis_abstract.dart';
|
| +import 'reflective_tests.dart';
|
| +
|
| +
|
| +main() {
|
| + group('notification.occurrences', () {
|
| + runReflectiveTests(AnalysisNotificationOccurrencesTest);
|
| + });
|
| +}
|
| +
|
| +
|
| +@ReflectiveTestCase()
|
| +class AnalysisNotificationOccurrencesTest extends AbstractAnalysisTest {
|
| + List<Occurrences> occurrencesList;
|
| + Occurrences testOccurences;
|
| +
|
| + /**
|
| + * Asserts that there is an offset of [search] in [testOccurences].
|
| + */
|
| + void assertHasOffset(String search) {
|
| + int offset = findOffset(search);
|
| + expect(testOccurences.offsets, contains(offset));
|
| + }
|
| +
|
| + /**
|
| + * Validates that there is a region at the offset of [search] in [testFile].
|
| + * If [length] is not specified explicitly, then length of an identifier
|
| + * from [search] is used.
|
| + */
|
| + void assertHasRegion(String search, [int length = -1]) {
|
| + int offset = findOffset(search);
|
| + if (length == -1) {
|
| + length = findIdentifierLength(search);
|
| + }
|
| + findRegion(offset, length, true);
|
| + }
|
| +
|
| + /**
|
| + * Finds an [Occurrences] with the given [offset] and [length].
|
| + *
|
| + * If [exists] is `true`, then fails if such [Occurrences] does not exist.
|
| + * Otherwise remembers this it into [testOccurences].
|
| + *
|
| + * If [exists] is `false`, then fails if such [Occurrences] exists.
|
| + */
|
| + void findRegion(int offset, int length, [bool exists]) {
|
| + for (Occurrences occurrences in occurrencesList) {
|
| + if (occurrences.length != length) {
|
| + continue;
|
| + }
|
| + for (int occurrenceOffset in occurrences.offsets) {
|
| + if (occurrenceOffset == offset) {
|
| + if (exists == false) {
|
| + fail('Not expected to find (offset=$offset; length=$length) in\n'
|
| + '${occurrencesList.join('\n')}');
|
| + }
|
| + testOccurences = occurrences;
|
| + return;
|
| + }
|
| + }
|
| + }
|
| + if (exists == true) {
|
| + fail('Expected to find (offset=$offset; length=$length) in\n'
|
| + '${occurrencesList.join('\n')}');
|
| + }
|
| + }
|
| +
|
| + Future prepareOccurrences(then()) {
|
| + addAnalysisSubscription(AnalysisService.OCCURRENCES, testFile);
|
| + return waitForTasksFinished().then((_) {
|
| + then();
|
| + });
|
| + }
|
| +
|
| + void processNotification(Notification notification) {
|
| + if (notification.event == ANALYSIS_OCCURRENCES) {
|
| + String file = notification.getParameter(FILE);
|
| + if (file == testFile) {
|
| + occurrencesList = <Occurrences>[];
|
| + List<Map<String, Object>> jsonList = notification.getParameter(
|
| + OCCURRENCES);
|
| + for (Map<String, Object> json in jsonList) {
|
| + occurrencesList.add(new Occurrences.fromJson(json));
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + @override
|
| + void setUp() {
|
| + super.setUp();
|
| + createProject();
|
| + }
|
| +
|
| + test_afterAnalysis() {
|
| + addTestFile('''
|
| +main() {
|
| + var vvv = 42;
|
| + print(vvv);
|
| +}
|
| +''');
|
| + return waitForTasksFinished().then((_) {
|
| + return prepareOccurrences(() {
|
| + assertHasRegion('vvv =');
|
| + expect(testOccurences.element.kind, ElementKind.LOCAL_VARIABLE);
|
| + expect(testOccurences.element.name, 'vvv');
|
| + assertHasOffset('vvv = 42');
|
| + assertHasOffset('vvv);');
|
| + });
|
| + });
|
| + }
|
| +
|
| + test_classType() {
|
| + addTestFile('''
|
| +main() {
|
| + int a = 1;
|
| + int b = 2;
|
| + int c = 3;
|
| +}
|
| +int VVV = 4;
|
| +''');
|
| + return prepareOccurrences(() {
|
| + assertHasRegion('int a');
|
| + expect(testOccurences.element.kind, ElementKind.CLASS);
|
| + expect(testOccurences.element.name, 'int');
|
| + assertHasOffset('int a');
|
| + assertHasOffset('int b');
|
| + assertHasOffset('int c');
|
| + assertHasOffset('int VVV');
|
| + });
|
| + }
|
| +
|
| + test_localVariable() {
|
| + addTestFile('''
|
| +main() {
|
| + var vvv = 42;
|
| + vvv += 5;
|
| + print(vvv);
|
| +}
|
| +''');
|
| + return prepareOccurrences(() {
|
| + assertHasRegion('vvv =');
|
| + expect(testOccurences.element.kind, ElementKind.LOCAL_VARIABLE);
|
| + expect(testOccurences.element.name, 'vvv');
|
| + assertHasOffset('vvv = 42');
|
| + assertHasOffset('vvv += 5');
|
| + assertHasOffset('vvv);');
|
| + });
|
| + }
|
| +}
|
|
|