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

Side by Side Diff: pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart

Issue 1233003002: Only send "analysis.analyzedFiles" notification when the set of files changes. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.analysis.notification.analyzedDirectories; 5 library test.analysis.notification.analyzedDirectories;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/constants.dart'; 9 import 'package:analysis_server/src/constants.dart';
10 import 'package:analysis_server/src/protocol.dart'; 10 import 'package:analysis_server/src/protocol.dart';
11 import 'package:test_reflective_loader/test_reflective_loader.dart'; 11 import 'package:test_reflective_loader/test_reflective_loader.dart';
12 import 'package:unittest/unittest.dart'; 12 import 'package:unittest/unittest.dart';
13 13
14 import '../analysis_abstract.dart'; 14 import '../analysis_abstract.dart';
15 import '../mocks.dart';
15 16
16 main() { 17 main() {
17 groupSep = ' | '; 18 groupSep = ' | ';
18 defineReflectiveTests(AnalysisNotificationAnalyzedFilesTest); 19 defineReflectiveTests(AnalysisNotificationAnalyzedFilesTest);
19 } 20 }
20 21
21 @reflectiveTest 22 @reflectiveTest
22 class AnalysisNotificationAnalyzedFilesTest extends AbstractAnalysisTest { 23 class AnalysisNotificationAnalyzedFilesTest extends AbstractAnalysisTest {
23 List<String> analyzedFiles; 24 List<String> analyzedFiles;
25 bool analyzedFilesReceived = false;
24 26
25 void assertHasFile(String filePath) { 27 void assertHasFile(String filePath) {
28 expect(analyzedFilesReceived, isTrue);
26 expect(analyzedFiles, contains(filePath)); 29 expect(analyzedFiles, contains(filePath));
27 } 30 }
28 31
29 Future prepareAnalyzedFiles() { 32 Future prepareAnalyzedFiles() {
30 addGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES); 33 addGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
31 return waitForTasksFinished(); 34 return waitForTasksFinished();
32 } 35 }
33 36
34 void processNotification(Notification notification) { 37 void processNotification(Notification notification) {
35 if (notification.event == ANALYSIS_ANALYZED_FILES) { 38 if (notification.event == ANALYSIS_ANALYZED_FILES) {
36 AnalysisAnalyzedFilesParams params = 39 AnalysisAnalyzedFilesParams params =
37 new AnalysisAnalyzedFilesParams.fromNotification(notification); 40 new AnalysisAnalyzedFilesParams.fromNotification(notification);
41 analyzedFilesReceived = true;
38 analyzedFiles = params.directories; 42 analyzedFiles = params.directories;
39 } 43 }
40 } 44 }
41 45
42 void setUp() { 46 void setUp() {
43 super.setUp(); 47 super.setUp();
44 createProject(); 48 createProject();
45 } 49 }
46 50
47 test_afterAnalysis() { 51 test_afterAnalysis() {
48 addTestFile(''' 52 addTestFile('''
49 class A {} 53 class A {}
50 '''); 54 ''');
51 return waitForTasksFinished().then((_) { 55 return waitForTasksFinished().then((_) {
52 return prepareAnalyzedFiles().then((_) { 56 return prepareAnalyzedFiles().then((_) {
53 assertHasFile(testFile); 57 assertHasFile(testFile);
54 }); 58 });
55 }); 59 });
56 } 60 }
57 61
58 test_definedInInterface_ofInterface() { 62 test_beforeAnalysis() {
59 addTestFile(''' 63 addTestFile('''
60 class A {} 64 class A {}
61 '''); 65 ''');
62 return prepareAnalyzedFiles().then((_) { 66 return prepareAnalyzedFiles().then((_) {
63 assertHasFile(testFile); 67 assertHasFile(testFile);
64 }); 68 });
65 } 69 }
70
71 test_insignificant_change() async {
72 // Making a change that doesn't affect the set of reachable files should
73 // not trigger the notification to be re-sent.
74 addTestFile('class A {}');
75 await prepareAnalyzedFiles();
76 await waitForTasksFinished();
77 expect(analyzedFilesReceived, isTrue);
78 analyzedFilesReceived = false;
79 modifyTestFile('class B {}');
80 await pumpEventQueue();
81 await waitForTasksFinished();
82 expect(analyzedFilesReceived, isFalse);
83 }
84
85 test_resubscribe_no_changes() async {
86 // Unsubscribing and resubscribing should cause the notification to be
87 // re-sent, even if nothing has changed.
88 addTestFile('class A {}');
89 await prepareAnalyzedFiles();
90 await waitForTasksFinished();
91 expect(analyzedFilesReceived, isTrue);
92 unsubscribeAnalyzedFiles();
93 analyzedFilesReceived = false;
94 await prepareAnalyzedFiles();
95 expect(analyzedFilesReceived, isTrue);
96 assertHasFile(testFile);
97 }
98
99 test_significant_change() async {
100 // Making a change that *does* affect the set of reachable files should
101 // trigger the notification to be re-sent.
102 addTestFile('class A {}');
103 addFile('/foo.dart', 'library foo');
104 await prepareAnalyzedFiles();
105 await waitForTasksFinished();
106 expect(analyzedFilesReceived, isTrue);
107 analyzedFilesReceived = false;
108 modifyTestFile('import "/foo.dart";');
109 await pumpEventQueue();
110 await waitForTasksFinished();
111 expect(analyzedFilesReceived, isTrue);
112 assertHasFile('/foo.dart');
113 }
114
115 void unsubscribeAnalyzedFiles() {
116 removeGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
117 }
66 } 118 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/operation/operation_analysis.dart ('k') | pkg/analysis_server/test/analysis_abstract.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698