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

Side by Side Diff: pkg/analyzer/test/generated/engine_test.dart

Issue 807993002: Ensure that AnalysisContext futures are completed when context disposed. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Handle case of computeAsync called after dispose Created 6 years 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 | Annotate | Revision Log
« no previous file with comments | « pkg/analyzer/lib/src/generated/engine.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // This code was auto-generated, is not intended to be edited, and is subject to 5 // This code was auto-generated, is not intended to be edited, and is subject to
6 // significant change. Please see the README file for more information. 6 // significant change. Please see the README file for more information.
7 7
8 library engine.engine_test; 8 library engine.engine_test;
9 9
10 import 'dart:async'; 10 import 'dart:async';
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 void test_computeResolvableCompilationUnit_valid() { 662 void test_computeResolvableCompilationUnit_valid() {
663 Source source = _addSource("/lib.dart", "library lib;"); 663 Source source = _addSource("/lib.dart", "library lib;");
664 CompilationUnit parsedUnit = _context.parseCompilationUnit(source); 664 CompilationUnit parsedUnit = _context.parseCompilationUnit(source);
665 expect(parsedUnit, isNotNull); 665 expect(parsedUnit, isNotNull);
666 CompilationUnit resolvedUnit = 666 CompilationUnit resolvedUnit =
667 _context.computeResolvableCompilationUnit(source); 667 _context.computeResolvableCompilationUnit(source);
668 expect(resolvedUnit, isNotNull); 668 expect(resolvedUnit, isNotNull);
669 expect(resolvedUnit, same(parsedUnit)); 669 expect(resolvedUnit, same(parsedUnit));
670 } 670 }
671 671
672 Future test_computeResolvedCompilationUnitAsync() {
673 _context = AnalysisContextFactory.contextWithCore();
674 _sourceFactory = _context.sourceFactory;
675 Source source = _addSource("/lib.dart", "library lib;");
676 // Complete all pending analysis tasks and flush the AST so that it won't
677 // be available immediately.
678 _performPendingAnalysisTasks();
679 DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source);
680 dartEntry.flushAstStructures();
681 bool completed = false;
682 _context.computeResolvedCompilationUnitAsync(
683 source,
684 source).then((CompilationUnit unit) {
685 expect(unit, isNotNull);
686 completed = true;
687 });
688 return pumpEventQueue().then((_) {
689 expect(completed, isFalse);
690 _performPendingAnalysisTasks();
691 }).then((_) => pumpEventQueue()).then((_) {
692 expect(completed, isTrue);
693 });
694 }
695
696 Future test_computeResolvedCompilationUnitAsync_afterDispose() {
697 _context = AnalysisContextFactory.contextWithCore();
698 _sourceFactory = _context.sourceFactory;
699 Source source = _addSource("/lib.dart", "library lib;");
700 // Complete all pending analysis tasks and flush the AST so that it won't
701 // be available immediately.
702 _performPendingAnalysisTasks();
703 DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source);
704 dartEntry.flushAstStructures();
705 // Dispose of the context.
706 _context.dispose();
707 // Any attempt to start an asynchronous computation should return a future
708 // which completes with error.
709 CancelableFuture<CompilationUnit> future =
710 _context.computeResolvedCompilationUnitAsync(source, source);
711 bool completed = false;
712 future.then((CompilationUnit unit) {
713 fail('Future should have completed with error');
714 }, onError: (error) {
715 expect(error, new isInstanceOf<AnalysisNotScheduledError>());
716 completed = true;
717 });
718 return pumpEventQueue().then((_) {
719 expect(completed, isTrue);
720 });
721 }
722
723 Future test_computeResolvedCompilationUnitAsync_cancel() {
724 _context = AnalysisContextFactory.contextWithCore();
725 _sourceFactory = _context.sourceFactory;
726 Source source = _addSource("/lib.dart", "library lib;");
727 // Complete all pending analysis tasks and flush the AST so that it won't
728 // be available immediately.
729 _performPendingAnalysisTasks();
730 DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source);
731 dartEntry.flushAstStructures();
732 CancelableFuture<CompilationUnit> future =
733 _context.computeResolvedCompilationUnitAsync(source, source);
734 bool completed = false;
735 future.then((CompilationUnit unit) {
736 fail('Future should have been canceled');
737 }, onError: (error) {
738 expect(error, new isInstanceOf<FutureCanceledError>());
739 completed = true;
740 });
741 expect(completed, isFalse);
742 expect(_context.pendingFutureSources_forTesting, isNotEmpty);
743 future.cancel();
744 expect(_context.pendingFutureSources_forTesting, isEmpty);
745 return pumpEventQueue().then((_) {
746 expect(completed, isTrue);
747 expect(_context.pendingFutureSources_forTesting, isEmpty);
748 });
749 }
750
751 Future test_computeResolvedCompilationUnitAsync_dispose() {
752 _context = AnalysisContextFactory.contextWithCore();
753 _sourceFactory = _context.sourceFactory;
754 Source source = _addSource("/lib.dart", "library lib;");
755 // Complete all pending analysis tasks and flush the AST so that it won't
756 // be available immediately.
757 _performPendingAnalysisTasks();
758 DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source);
759 dartEntry.flushAstStructures();
760 CancelableFuture<CompilationUnit> future =
761 _context.computeResolvedCompilationUnitAsync(source, source);
762 bool completed = false;
763 future.then((CompilationUnit unit) {
764 fail('Future should have completed with error');
765 }, onError: (error) {
766 expect(error, new isInstanceOf<AnalysisNotScheduledError>());
767 completed = true;
768 });
769 expect(completed, isFalse);
770 expect(_context.pendingFutureSources_forTesting, isNotEmpty);
771 // Disposing of the context should cause all pending futures to complete
772 // with AnalysisNotScheduled, so that no clients are left hanging.
773 _context.dispose();
774 expect(_context.pendingFutureSources_forTesting, isEmpty);
775 return pumpEventQueue().then((_) {
776 expect(completed, isTrue);
777 expect(_context.pendingFutureSources_forTesting, isEmpty);
778 });
779 }
780
781 Future test_computeResolvedCompilationUnitAsync_unrelatedLibrary() {
782 _context = AnalysisContextFactory.contextWithCore();
783 _sourceFactory = _context.sourceFactory;
784 Source librarySource = _addSource("/lib.dart", "library lib;");
785 Source partSource = _addSource("/part.dart", "part of foo;");
786 bool completed = false;
787 _context.computeResolvedCompilationUnitAsync(
788 partSource,
789 librarySource).then((_) {
790 fail('Expected resolution to fail');
791 }, onError: (e) {
792 expect(e, new isInstanceOf<AnalysisNotScheduledError>());
793 completed = true;
794 });
795 return pumpEventQueue().then((_) {
796 expect(completed, isFalse);
797 _performPendingAnalysisTasks();
798 }).then((_) => pumpEventQueue()).then((_) {
799 expect(completed, isTrue);
800 });
801 }
802
672 void test_dispose() { 803 void test_dispose() {
673 expect(_context.isDisposed, isFalse); 804 expect(_context.isDisposed, isFalse);
674 _context.dispose(); 805 _context.dispose();
675 expect(_context.isDisposed, isTrue); 806 expect(_context.isDisposed, isTrue);
676 } 807 }
677 808
678 void test_exists_false() { 809 void test_exists_false() {
679 TestSource source = new TestSource(); 810 TestSource source = new TestSource();
680 source.exists2 = false; 811 source.exists2 = false;
681 expect(_context.exists(source), isFalse); 812 expect(_context.exists(source), isFalse);
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 1253
1123 void test_getResolvedCompilationUnit_source_html() { 1254 void test_getResolvedCompilationUnit_source_html() {
1124 _context = AnalysisContextFactory.contextWithCore(); 1255 _context = AnalysisContextFactory.contextWithCore();
1125 _sourceFactory = _context.sourceFactory; 1256 _sourceFactory = _context.sourceFactory;
1126 Source source = _addSource("/test.html", "<html></html>"); 1257 Source source = _addSource("/test.html", "<html></html>");
1127 expect(_context.getResolvedCompilationUnit2(source, source), isNull); 1258 expect(_context.getResolvedCompilationUnit2(source, source), isNull);
1128 expect(_context.resolveCompilationUnit2(source, source), isNull); 1259 expect(_context.resolveCompilationUnit2(source, source), isNull);
1129 expect(_context.getResolvedCompilationUnit2(source, source), isNull); 1260 expect(_context.getResolvedCompilationUnit2(source, source), isNull);
1130 } 1261 }
1131 1262
1132 Future test_getResolvedCompilationUnitFuture() {
1133 _context = AnalysisContextFactory.contextWithCore();
1134 _sourceFactory = _context.sourceFactory;
1135 Source source = _addSource("/lib.dart", "library lib;");
1136 // Complete all pending analysis tasks and flush the AST so that it won't
1137 // be available immediately.
1138 _performPendingAnalysisTasks();
1139 DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source);
1140 dartEntry.flushAstStructures();
1141 bool completed = false;
1142 _context.computeResolvedCompilationUnitAsync(
1143 source,
1144 source).then((CompilationUnit unit) {
1145 expect(unit, isNotNull);
1146 completed = true;
1147 });
1148 return pumpEventQueue().then((_) {
1149 expect(completed, isFalse);
1150 _performPendingAnalysisTasks();
1151 }).then((_) => pumpEventQueue()).then((_) {
1152 expect(completed, isTrue);
1153 });
1154 }
1155
1156 Future test_getResolvedCompilationUnitFuture_cancel() {
1157 _context = AnalysisContextFactory.contextWithCore();
1158 _sourceFactory = _context.sourceFactory;
1159 Source source = _addSource("/lib.dart", "library lib;");
1160 // Complete all pending analysis tasks and flush the AST so that it won't
1161 // be available immediately.
1162 _performPendingAnalysisTasks();
1163 DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source);
1164 dartEntry.flushAstStructures();
1165 CancelableFuture<CompilationUnit> future =
1166 _context.computeResolvedCompilationUnitAsync(source, source);
1167 bool completed = false;
1168 future.then((CompilationUnit unit) {
1169 fail('Future should have been canceled');
1170 }, onError: (error) {
1171 expect(error, new isInstanceOf<FutureCanceledError>());
1172 completed = true;
1173 });
1174 expect(completed, isFalse);
1175 expect(_context.pendingFutureSources_forTesting, isNotEmpty);
1176 future.cancel();
1177 expect(_context.pendingFutureSources_forTesting, isEmpty);
1178 return pumpEventQueue().then((_) {
1179 expect(completed, isTrue);
1180 expect(_context.pendingFutureSources_forTesting, isEmpty);
1181 });
1182 }
1183
1184 Future test_getResolvedCompilationUnitFuture_unrelatedLibrary() {
1185 _context = AnalysisContextFactory.contextWithCore();
1186 _sourceFactory = _context.sourceFactory;
1187 Source librarySource = _addSource("/lib.dart", "library lib;");
1188 Source partSource = _addSource("/part.dart", "part of foo;");
1189 bool completed = false;
1190 _context.computeResolvedCompilationUnitAsync(
1191 partSource,
1192 librarySource).then((_) {
1193 fail('Expected resolution to fail');
1194 }, onError: (e) {
1195 expect(e, new isInstanceOf<AnalysisNotScheduledError>());
1196 completed = true;
1197 });
1198 return pumpEventQueue().then((_) {
1199 expect(completed, isFalse);
1200 _performPendingAnalysisTasks();
1201 }).then((_) => pumpEventQueue()).then((_) {
1202 expect(completed, isTrue);
1203 });
1204 }
1205
1206 void test_getResolvedHtmlUnit() { 1263 void test_getResolvedHtmlUnit() {
1207 _context = AnalysisContextFactory.contextWithCore(); 1264 _context = AnalysisContextFactory.contextWithCore();
1208 _sourceFactory = _context.sourceFactory; 1265 _sourceFactory = _context.sourceFactory;
1209 Source source = _addSource("/test.html", "<html></html>"); 1266 Source source = _addSource("/test.html", "<html></html>");
1210 expect(_context.getResolvedHtmlUnit(source), isNull); 1267 expect(_context.getResolvedHtmlUnit(source), isNull);
1211 _context.resolveHtmlUnit(source); 1268 _context.resolveHtmlUnit(source);
1212 expect(_context.getResolvedHtmlUnit(source), isNotNull); 1269 expect(_context.getResolvedHtmlUnit(source), isNotNull);
1213 } 1270 }
1214 1271
1215 void test_getSourceFactory() { 1272 void test_getSourceFactory() {
(...skipping 5875 matching lines...) Expand 10 before | Expand all | Expand 10 after
7091 bool contains(Source source) => source == libB; 7148 bool contains(Source source) => source == libB;
7092 } 7149 }
7093 7150
7094 7151
7095 class _UniversalCachePartitionTest_test_setMaxCacheSize implements 7152 class _UniversalCachePartitionTest_test_setMaxCacheSize implements
7096 CacheRetentionPolicy { 7153 CacheRetentionPolicy {
7097 @override 7154 @override
7098 RetentionPriority getAstPriority(Source source, SourceEntry sourceEntry) => 7155 RetentionPriority getAstPriority(Source source, SourceEntry sourceEntry) =>
7099 RetentionPriority.LOW; 7156 RetentionPriority.LOW;
7100 } 7157 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/engine.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698