// 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. // This code was auto-generated, is not intended to be edited, and is subject to // significant change. Please see the README file for more information. library engine.engine_test; import 'dart:async'; import 'dart:collection'; import 'package:analyzer/src/cancelable_future.dart'; import 'package:analyzer/src/generated/ast.dart'; import 'package:analyzer/src/generated/constant.dart'; import 'package:analyzer/src/generated/element.dart'; import 'package:analyzer/src/generated/engine.dart'; import 'package:analyzer/src/generated/error.dart'; import 'package:analyzer/src/generated/html.dart' as ht; import 'package:analyzer/src/generated/java_core.dart'; import 'package:analyzer/src/generated/java_engine.dart'; import 'package:analyzer/src/generated/java_engine_io.dart'; import 'package:analyzer/src/generated/parser.dart'; import 'package:analyzer/src/generated/resolver.dart'; import 'package:analyzer/src/generated/scanner.dart'; import 'package:analyzer/src/generated/sdk.dart'; import 'package:analyzer/src/generated/sdk_io.dart'; import 'package:analyzer/src/generated/source_io.dart'; import 'package:analyzer/src/generated/testing/ast_factory.dart'; import 'package:analyzer/src/generated/testing/element_factory.dart'; import 'package:analyzer/src/generated/utilities_collection.dart'; import 'package:analyzer/src/services/lint.dart'; import 'package:analyzer/src/string_source.dart'; import 'package:analyzer/src/task/task_dart.dart'; import 'package:typed_mock/typed_mock.dart'; import 'package:unittest/unittest.dart'; import 'package:watcher/src/utils.dart'; import '../reflective_tests.dart'; import 'all_the_rest_test.dart'; import 'resolver_test.dart'; import 'test_support.dart'; main() { groupSep = ' | '; runReflectiveTests(AnalysisCacheTest); runReflectiveTests(AnalysisContextImplTest); runReflectiveTests(AnalysisTaskTest); runReflectiveTests(AnalysisOptionsImplTest); runReflectiveTests(DartEntryTest); runReflectiveTests(GenerateDartErrorsTaskTest); runReflectiveTests(GenerateDartHintsTaskTest); runReflectiveTests(GenerateDartLintsTaskTest); runReflectiveTests(GetContentTaskTest); runReflectiveTests(HtmlEntryTest); runReflectiveTests(IncrementalAnalysisCacheTest); runReflectiveTests(IncrementalAnalysisTaskTest); runReflectiveTests(LintGeneratorTest); runReflectiveTests(ParseDartTaskTest); runReflectiveTests(ParseHtmlTaskTest); runReflectiveTests(PartitionManagerTest); runReflectiveTests(ResolveDartLibraryTaskTest); runReflectiveTests(ResolveDartUnitTaskTest); runReflectiveTests(ResolveHtmlTaskTest); runReflectiveTests(ScanDartTaskTest); runReflectiveTests(SdkCachePartitionTest); runReflectiveTests(SourcesChangedEventTest); runReflectiveTests(UniversalCachePartitionTest); runReflectiveTests(WorkManagerTest); } @reflectiveTest class AnalysisCacheTest extends EngineTestCase { void test_creation() { expect(new AnalysisCache(new List(0)), isNotNull); } void test_get() { AnalysisCache cache = new AnalysisCache(new List(0)); TestSource source = new TestSource(); expect(cache.get(source), isNull); } void test_iterator() { CachePartition partition = new UniversalCachePartition(null, 8, new DefaultRetentionPolicy()); AnalysisCache cache = new AnalysisCache([partition]); TestSource source = new TestSource(); DartEntry entry = new DartEntry(); cache.put(source, entry); MapIterator iterator = cache.iterator(); expect(iterator.moveNext(), isTrue); expect(iterator.key, same(source)); expect(iterator.value, same(entry)); expect(iterator.moveNext(), isFalse); } void test_put_noFlush() { CachePartition partition = new UniversalCachePartition(null, 8, new DefaultRetentionPolicy()); AnalysisCache cache = new AnalysisCache([partition]); TestSource source = new TestSource(); DartEntry entry = new DartEntry(); cache.put(source, entry); expect(cache.get(source), same(entry)); } void test_setMaxCacheSize() { CachePartition partition = new UniversalCachePartition( null, 8, new _AnalysisCacheTest_test_setMaxCacheSize()); AnalysisCache cache = new AnalysisCache([partition]); int size = 6; for (int i = 0; i < size; i++) { Source source = new TestSource("/test$i.dart"); DartEntry entry = new DartEntry(); entry.setValue(DartEntry.PARSED_UNIT, null); cache.put(source, entry); cache.accessedAst(source); } _assertNonFlushedCount(size, cache); int newSize = size - 2; partition.maxCacheSize = newSize; _assertNonFlushedCount(newSize, cache); } void test_size() { CachePartition partition = new UniversalCachePartition(null, 8, new DefaultRetentionPolicy()); AnalysisCache cache = new AnalysisCache([partition]); int size = 4; for (int i = 0; i < size; i++) { Source source = new TestSource("/test$i.dart"); cache.put(source, new DartEntry()); cache.accessedAst(source); } expect(cache.size(), size); } void _assertNonFlushedCount(int expectedCount, AnalysisCache cache) { int nonFlushedCount = 0; MapIterator iterator = cache.iterator(); while (iterator.moveNext()) { if (iterator.value.getState(DartEntry.PARSED_UNIT) != CacheState.FLUSHED) { nonFlushedCount++; } } expect(nonFlushedCount, expectedCount); } } @reflectiveTest class AnalysisContextImplTest extends EngineTestCase { /** * An analysis context whose source factory is [sourceFactory]. */ AnalysisContextImpl _context; /** * The source factory associated with the analysis [context]. */ SourceFactory _sourceFactory; void fail_extractContext() { fail("Implement this"); } void fail_mergeContext() { fail("Implement this"); } void fail_performAnalysisTask_importedLibraryDelete_html() { Source htmlSource = _addSource("/page.html", r''' '''); Source libBSource = _addSource("/libB.dart", "library libB;"); _analyzeAll_assertFinished(); expect( _context.getResolvedHtmlUnit(htmlSource), isNotNull, reason: "htmlUnit resolved 1"); expect( _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, reason: "libB resolved 1"); expect( !_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)), isTrue, reason: "htmlSource doesn't have errors"); // remove libB.dart content and analyze _context.setContents(libBSource, null); _analyzeAll_assertFinished(); expect( _context.getResolvedHtmlUnit(htmlSource), isNotNull, reason: "htmlUnit resolved 1"); AnalysisErrorInfo errors = _context.getErrors(htmlSource); expect( _hasAnalysisErrorWithErrorSeverity(errors), isTrue, reason: "htmlSource has an error"); } void fail_recordLibraryElements() { fail("Implement this"); } @override void setUp() { _context = new AnalysisContextImpl(); _sourceFactory = new SourceFactory( [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk), new FileUriResolver()]); _context.sourceFactory = _sourceFactory; AnalysisOptionsImpl options = new AnalysisOptionsImpl.con1(_context.analysisOptions); options.cacheSize = 256; _context.analysisOptions = options; } @override void tearDown() { _context = null; _sourceFactory = null; super.tearDown(); } Future test_applyChanges_add() { SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); ChangeSet changeSet = new ChangeSet(); changeSet.addedSource(source); _context.applyChanges(changeSet); expect(_context.sourcesNeedingProcessing.contains(source), isTrue); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertNoMoreEvents(); }); } Future test_applyChanges_change() { SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); ChangeSet changeSet1 = new ChangeSet(); changeSet1.addedSource(source); _context.applyChanges(changeSet1); expect(_context.sourcesNeedingProcessing.contains(source), isTrue); Source source2 = new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); ChangeSet changeSet2 = new ChangeSet(); changeSet2.addedSource(source2); changeSet2.changedSource(source); _context.applyChanges(changeSet2); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); listener.assertNoMoreEvents(); }); } Future test_applyChanges_change_content() { SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); ChangeSet changeSet1 = new ChangeSet(); changeSet1.addedSource(source); _context.applyChanges(changeSet1); expect(_context.sourcesNeedingProcessing.contains(source), isTrue); Source source2 = new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); ChangeSet changeSet2 = new ChangeSet(); changeSet2.addedSource(source2); changeSet2.changedContent(source, 'library test;'); _context.applyChanges(changeSet2); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); listener.assertNoMoreEvents(); }); } void test_applyChanges_change_flush_element() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source librarySource = _addSource("/lib.dart", r''' library lib; int a = 0;'''); expect(_context.computeLibraryElement(librarySource), isNotNull); _context.setContents(librarySource, r''' library lib; int aa = 0;'''); expect(_context.getLibraryElement(librarySource), isNull); } Future test_applyChanges_change_multiple() { _context = AnalysisContextFactory.contextWithCore(); SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); _sourceFactory = _context.sourceFactory; String libraryContents1 = r''' library lib; part 'part.dart'; int a = 0;'''; Source librarySource = _addSource("/lib.dart", libraryContents1); String partContents1 = r''' part of lib; int b = a;'''; Source partSource = _addSource("/part.dart", partContents1); _context.computeLibraryElement(librarySource); String libraryContents2 = r''' library lib; part 'part.dart'; int aa = 0;'''; _context.setContents(librarySource, libraryContents2); String partContents2 = r''' part of lib; int b = aa;'''; _context.setContents(partSource, partContents2); _context.computeLibraryElement(librarySource); CompilationUnit libraryUnit = _context.resolveCompilationUnit2(librarySource, librarySource); CompilationUnit partUnit = _context.resolveCompilationUnit2(partSource, librarySource); TopLevelVariableDeclaration declaration = libraryUnit.declarations[0] as TopLevelVariableDeclaration; Element declarationElement = declaration.variables.variables[0].element; TopLevelVariableDeclaration use = partUnit.declarations[0] as TopLevelVariableDeclaration; Element useElement = (use.variables.variables[0].initializer as SimpleIdentifier).staticElement; expect( (useElement as PropertyAccessorElement).variable, same(declarationElement)); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [librarySource]); listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [partSource]); listener.assertEvent(changedSources: [librarySource]); listener.assertEvent(changedSources: [partSource]); listener.assertNoMoreEvents(); }); } Future test_applyChanges_change_range() { SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); ChangeSet changeSet1 = new ChangeSet(); changeSet1.addedSource(source); _context.applyChanges(changeSet1); expect(_context.sourcesNeedingProcessing.contains(source), isTrue); Source source2 = new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); ChangeSet changeSet2 = new ChangeSet(); changeSet2.addedSource(source2); changeSet2.changedRange(source, 'library test;', 0, 0, 13); _context.applyChanges(changeSet2); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(wereSourcesAdded: true, changedSources: [source]); listener.assertNoMoreEvents(); }); } void test_applyChanges_empty() { _context.applyChanges(new ChangeSet()); expect(_context.performAnalysisTask().changeNotices, isNull); } void test_applyChanges_overriddenSource() { // Note: addSource adds the source to the contentCache. Source source = _addSource("/test.dart", "library test;"); _context.computeErrors(source); while (!_context.sourcesNeedingProcessing.isEmpty) { _context.performAnalysisTask(); } // Adding the source as a changedSource should have no effect since // it is already overridden in the content cache. ChangeSet changeSet = new ChangeSet(); changeSet.changedSource(source); _context.applyChanges(changeSet); expect(_context.sourcesNeedingProcessing, hasLength(0)); } Future test_applyChanges_remove() { _context = AnalysisContextFactory.contextWithCore(); SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); _sourceFactory = _context.sourceFactory; String libAContents = r''' library libA; import 'libB.dart';'''; Source libA = _addSource("/libA.dart", libAContents); String libBContents = "library libB;"; Source libB = _addSource("/libB.dart", libBContents); LibraryElement libAElement = _context.computeLibraryElement(libA); List importedLibraries = libAElement.importedLibraries; expect(importedLibraries, hasLength(2)); _context.computeErrors(libA); _context.computeErrors(libB); expect(_context.sourcesNeedingProcessing, hasLength(0)); _context.setContents(libB, null); _removeSource(libB); List sources = _context.sourcesNeedingProcessing; expect(sources, hasLength(1)); expect(sources[0], same(libA)); libAElement = _context.computeLibraryElement(libA); importedLibraries = libAElement.importedLibraries; expect(importedLibraries, hasLength(1)); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [libA]); listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [libB]); listener.assertEvent(changedSources: [libB]); listener.assertEvent(wereSourcesRemovedOrDeleted: true); listener.assertNoMoreEvents(); }); } Future test_applyChanges_removeContainer() { _context = AnalysisContextFactory.contextWithCore(); SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); _sourceFactory = _context.sourceFactory; String libAContents = r''' library libA; import 'libB.dart';'''; Source libA = _addSource("/libA.dart", libAContents); String libBContents = "library libB;"; Source libB = _addSource("/libB.dart", libBContents); _context.computeLibraryElement(libA); _context.computeErrors(libA); _context.computeErrors(libB); expect(_context.sourcesNeedingProcessing, hasLength(0)); ChangeSet changeSet = new ChangeSet(); SourceContainer removedContainer = new _AnalysisContextImplTest_test_applyChanges_removeContainer(libB); changeSet.removedContainer(removedContainer); _context.applyChanges(changeSet); List sources = _context.sourcesNeedingProcessing; expect(sources, hasLength(1)); expect(sources[0], same(libA)); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [libA]); listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [libB]); listener.assertEvent(wereSourcesRemovedOrDeleted: true); listener.assertNoMoreEvents(); }); } void test_computeDocumentationComment_block() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; String comment = "/** Comment */"; Source source = _addSource("/test.dart", """ $comment class A {}"""); LibraryElement libraryElement = _context.computeLibraryElement(source); expect(libraryElement, isNotNull); ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; expect(libraryElement, isNotNull); expect(_context.computeDocumentationComment(classElement), comment); } void test_computeDocumentationComment_none() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/test.dart", "class A {}"); LibraryElement libraryElement = _context.computeLibraryElement(source); expect(libraryElement, isNotNull); ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; expect(libraryElement, isNotNull); expect(_context.computeDocumentationComment(classElement), isNull); } void test_computeDocumentationComment_null() { expect(_context.computeDocumentationComment(null), isNull); } void test_computeDocumentationComment_singleLine_multiple_EOL_n() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; String comment = "/// line 1\n/// line 2\n/// line 3\n"; Source source = _addSource("/test.dart", "${comment}class A {}"); LibraryElement libraryElement = _context.computeLibraryElement(source); expect(libraryElement, isNotNull); ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; expect(libraryElement, isNotNull); String actual = _context.computeDocumentationComment(classElement); expect(actual, "/// line 1\n/// line 2\n/// line 3"); } void test_computeDocumentationComment_singleLine_multiple_EOL_rn() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; String comment = "/// line 1\r\n/// line 2\r\n/// line 3\r\n"; Source source = _addSource("/test.dart", "${comment}class A {}"); LibraryElement libraryElement = _context.computeLibraryElement(source); expect(libraryElement, isNotNull); ClassElement classElement = libraryElement.definingCompilationUnit.types[0]; expect(libraryElement, isNotNull); String actual = _context.computeDocumentationComment(classElement); expect(actual, "/// line 1\n/// line 2\n/// line 3"); } void test_computeErrors_dart_none() { Source source = _addSource("/lib.dart", "library lib;"); List errors = _context.computeErrors(source); expect(errors, hasLength(0)); } void test_computeErrors_dart_part() { Source librarySource = _addSource("/lib.dart", "library lib; part 'part.dart';"); Source partSource = _addSource("/part.dart", "part of 'lib';"); _context.parseCompilationUnit(librarySource); List errors = _context.computeErrors(partSource); expect(errors, isNotNull); expect(errors.length > 0, isTrue); } void test_computeErrors_dart_some() { Source source = _addSource("/lib.dart", "library 'lib';"); List errors = _context.computeErrors(source); expect(errors, isNotNull); expect(errors.length > 0, isTrue); } void test_computeErrors_html_none() { Source source = _addSource("/test.html", ""); List errors = _context.computeErrors(source); expect(errors, hasLength(0)); } void test_computeExportedLibraries_none() { Source source = _addSource("/test.dart", "library test;"); expect(_context.computeExportedLibraries(source), hasLength(0)); } void test_computeExportedLibraries_some() { // addSource("/lib1.dart", "library lib1;"); // addSource("/lib2.dart", "library lib2;"); Source source = _addSource( "/test.dart", "library test; export 'lib1.dart'; export 'lib2.dart';"); expect(_context.computeExportedLibraries(source), hasLength(2)); } void test_computeHtmlElement_nonHtml() { Source source = _addSource("/test.dart", "library test;"); expect(_context.computeHtmlElement(source), isNull); } void test_computeHtmlElement_valid() { Source source = _addSource("/test.html", ""); HtmlElement element = _context.computeHtmlElement(source); expect(element, isNotNull); expect(_context.computeHtmlElement(source), same(element)); } void test_computeImportedLibraries_none() { Source source = _addSource("/test.dart", "library test;"); expect(_context.computeImportedLibraries(source), hasLength(0)); } void test_computeImportedLibraries_some() { // addSource("/lib1.dart", "library lib1;"); // addSource("/lib2.dart", "library lib2;"); Source source = _addSource( "/test.dart", "library test; import 'lib1.dart'; import 'lib2.dart';"); expect(_context.computeImportedLibraries(source), hasLength(2)); } void test_computeKindOf_html() { Source source = _addSource("/test.html", ""); expect(_context.computeKindOf(source), same(SourceKind.HTML)); } void test_computeKindOf_library() { Source source = _addSource("/test.dart", "library lib;"); expect(_context.computeKindOf(source), same(SourceKind.LIBRARY)); } void test_computeKindOf_libraryAndPart() { Source source = _addSource("/test.dart", "library lib; part of lib;"); expect(_context.computeKindOf(source), same(SourceKind.LIBRARY)); } void test_computeKindOf_part() { Source source = _addSource("/test.dart", "part of lib;"); expect(_context.computeKindOf(source), same(SourceKind.PART)); } void test_computeLibraryElement() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/test.dart", "library lib;"); LibraryElement element = _context.computeLibraryElement(source); expect(element, isNotNull); } void test_computeLineInfo_dart() { Source source = _addSource("/test.dart", r''' library lib; main() {}'''); LineInfo info = _context.computeLineInfo(source); expect(info, isNotNull); } void test_computeLineInfo_html() { Source source = _addSource("/test.html", r'''

A

'''); LineInfo info = _context.computeLineInfo(source); expect(info, isNotNull); } void test_computeResolvableCompilationUnit_dart_exception() { TestSource source = _addSourceWithException("/test.dart"); try { _context.computeResolvableCompilationUnit(source); fail("Expected AnalysisException"); } on AnalysisException catch (exception) { // Expected } } void test_computeResolvableCompilationUnit_html_exception() { Source source = _addSource("/lib.html", ""); try { _context.computeResolvableCompilationUnit(source); fail("Expected AnalysisException"); } on AnalysisException catch (exception) { // Expected } } void test_computeResolvableCompilationUnit_valid() { Source source = _addSource("/lib.dart", "library lib;"); CompilationUnit parsedUnit = _context.parseCompilationUnit(source); expect(parsedUnit, isNotNull); CompilationUnit resolvedUnit = _context.computeResolvableCompilationUnit(source); expect(resolvedUnit, isNotNull); expect(resolvedUnit, same(parsedUnit)); } Future test_computeResolvedCompilationUnitAsync() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/lib.dart", "library lib;"); // Complete all pending analysis tasks and flush the AST so that it won't // be available immediately. _performPendingAnalysisTasks(); DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source); dartEntry.flushAstStructures(); bool completed = false; _context.computeResolvedCompilationUnitAsync( source, source).then((CompilationUnit unit) { expect(unit, isNotNull); completed = true; }); return pumpEventQueue().then((_) { expect(completed, isFalse); _performPendingAnalysisTasks(); }).then((_) => pumpEventQueue()).then((_) { expect(completed, isTrue); }); } Future test_computeResolvedCompilationUnitAsync_afterDispose() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/lib.dart", "library lib;"); // Complete all pending analysis tasks and flush the AST so that it won't // be available immediately. _performPendingAnalysisTasks(); DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source); dartEntry.flushAstStructures(); // Dispose of the context. _context.dispose(); // Any attempt to start an asynchronous computation should return a future // which completes with error. CancelableFuture future = _context.computeResolvedCompilationUnitAsync(source, source); bool completed = false; future.then((CompilationUnit unit) { fail('Future should have completed with error'); }, onError: (error) { expect(error, new isInstanceOf()); completed = true; }); return pumpEventQueue().then((_) { expect(completed, isTrue); }); } Future test_computeResolvedCompilationUnitAsync_cancel() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/lib.dart", "library lib;"); // Complete all pending analysis tasks and flush the AST so that it won't // be available immediately. _performPendingAnalysisTasks(); DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source); dartEntry.flushAstStructures(); CancelableFuture future = _context.computeResolvedCompilationUnitAsync(source, source); bool completed = false; future.then((CompilationUnit unit) { fail('Future should have been canceled'); }, onError: (error) { expect(error, new isInstanceOf()); completed = true; }); expect(completed, isFalse); expect(_context.pendingFutureSources_forTesting, isNotEmpty); future.cancel(); expect(_context.pendingFutureSources_forTesting, isEmpty); return pumpEventQueue().then((_) { expect(completed, isTrue); expect(_context.pendingFutureSources_forTesting, isEmpty); }); } Future test_computeResolvedCompilationUnitAsync_dispose() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/lib.dart", "library lib;"); // Complete all pending analysis tasks and flush the AST so that it won't // be available immediately. _performPendingAnalysisTasks(); DartEntry dartEntry = _context.getReadableSourceEntryOrNull(source); dartEntry.flushAstStructures(); CancelableFuture future = _context.computeResolvedCompilationUnitAsync(source, source); bool completed = false; future.then((CompilationUnit unit) { fail('Future should have completed with error'); }, onError: (error) { expect(error, new isInstanceOf()); completed = true; }); expect(completed, isFalse); expect(_context.pendingFutureSources_forTesting, isNotEmpty); // Disposing of the context should cause all pending futures to complete // with AnalysisNotScheduled, so that no clients are left hanging. _context.dispose(); expect(_context.pendingFutureSources_forTesting, isEmpty); return pumpEventQueue().then((_) { expect(completed, isTrue); expect(_context.pendingFutureSources_forTesting, isEmpty); }); } Future test_computeResolvedCompilationUnitAsync_unrelatedLibrary() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source librarySource = _addSource("/lib.dart", "library lib;"); Source partSource = _addSource("/part.dart", "part of foo;"); bool completed = false; _context.computeResolvedCompilationUnitAsync( partSource, librarySource).then((_) { fail('Expected resolution to fail'); }, onError: (e) { expect(e, new isInstanceOf()); completed = true; }); return pumpEventQueue().then((_) { expect(completed, isFalse); _performPendingAnalysisTasks(); }).then((_) => pumpEventQueue()).then((_) { expect(completed, isTrue); }); } void test_dispose() { expect(_context.isDisposed, isFalse); _context.dispose(); expect(_context.isDisposed, isTrue); } void test_exists_false() { TestSource source = new TestSource(); source.exists2 = false; expect(_context.exists(source), isFalse); } void test_exists_null() { expect(_context.exists(null), isFalse); } void test_exists_overridden() { Source source = new TestSource(); _context.setContents(source, ""); expect(_context.exists(source), isTrue); } void test_exists_true() { expect( _context.exists(new AnalysisContextImplTest_Source_exists_true()), isTrue); } void test_getAnalysisOptions() { expect(_context.analysisOptions, isNotNull); } void test_getContents_fromSource() { String content = "library lib;"; TimestampedData contents = _context.getContents(new TestSource('/test.dart', content)); expect(contents.data.toString(), content); } void test_getContents_overridden() { String content = "library lib;"; Source source = new TestSource(); _context.setContents(source, content); TimestampedData contents = _context.getContents(source); expect(contents.data.toString(), content); } void test_getContents_unoverridden() { String content = "library lib;"; Source source = new TestSource('/test.dart', content); _context.setContents(source, "part of lib;"); _context.setContents(source, null); TimestampedData contents = _context.getContents(source); expect(contents.data.toString(), content); } void test_getDeclaredVariables() { _context = AnalysisContextFactory.contextWithCore(); expect(_context.declaredVariables, isNotNull); } void test_getElement() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; LibraryElement core = _context.computeLibraryElement(_sourceFactory.forUri("dart:core")); expect(core, isNotNull); ClassElement classObject = _findClass(core.definingCompilationUnit, "Object"); expect(classObject, isNotNull); ElementLocation location = classObject.location; Element element = _context.getElement(location); expect(element, same(classObject)); } void test_getElement_constructor_named() { Source source = _addSource("/lib.dart", r''' class A { A.named() {} }'''); _analyzeAll_assertFinished(); LibraryElement library = _context.computeLibraryElement(source); ClassElement classA = _findClass(library.definingCompilationUnit, "A"); ConstructorElement constructor = classA.constructors[0]; ElementLocation location = constructor.location; Element element = _context.getElement(location); expect(element, same(constructor)); } void test_getElement_constructor_unnamed() { Source source = _addSource("/lib.dart", r''' class A { A() {} }'''); _analyzeAll_assertFinished(); LibraryElement library = _context.computeLibraryElement(source); ClassElement classA = _findClass(library.definingCompilationUnit, "A"); ConstructorElement constructor = classA.constructors[0]; ElementLocation location = constructor.location; Element element = _context.getElement(location); expect(element, same(constructor)); } void test_getElement_enum() { Source source = _addSource('/test.dart', 'enum MyEnum {A, B, C}'); _analyzeAll_assertFinished(); LibraryElement library = _context.computeLibraryElement(source); ClassElement myEnum = library.definingCompilationUnit.getEnum('MyEnum'); ElementLocation location = myEnum.location; Element element = _context.getElement(location); expect(element, same(myEnum)); } void test_getErrors_dart_none() { Source source = _addSource("/lib.dart", "library lib;"); List errors = _context.getErrors(source).errors; expect(errors, hasLength(0)); _context.computeErrors(source); errors = _context.getErrors(source).errors; expect(errors, hasLength(0)); } void test_getErrors_dart_some() { Source source = _addSource("/lib.dart", "library 'lib';"); List errors = _context.getErrors(source).errors; expect(errors, hasLength(0)); _context.computeErrors(source); errors = _context.getErrors(source).errors; expect(errors, hasLength(1)); } void test_getErrors_html_none() { Source source = _addSource("/test.html", ""); List errors = _context.getErrors(source).errors; expect(errors, hasLength(0)); _context.computeErrors(source); errors = _context.getErrors(source).errors; expect(errors, hasLength(0)); } void test_getErrors_html_some() { Source source = _addSource("/test.html", r''' '''); ht.HtmlUnit unit = _context.parseHtmlUnit(source); // import directive should be resolved ht.XmlTagNode htmlNode = unit.tagNodes[0]; ht.XmlTagNode headNode = htmlNode.tagNodes[0]; ht.HtmlScriptTagNode scriptNode = headNode.tagNodes[0]; CompilationUnit script = scriptNode.script; ImportDirective importNode = script.directives[0] as ImportDirective; expect(importNode.uriContent, isNotNull); expect(importNode.source, libSource); } void test_performAnalysisTask_addPart() { Source libSource = _addSource("/lib.dart", r''' library lib; part 'part.dart';'''); // run all tasks without part _analyzeAll_assertFinished(); // add part and run all tasks Source partSource = _addSource("/part.dart", r''' part of lib; '''); _analyzeAll_assertFinished(); // "libSource" should be here List librariesWithPart = _context.getLibrariesContaining(partSource); expect(librariesWithPart, unorderedEquals([libSource])); } void test_performAnalysisTask_changeLibraryContents() { Source libSource = _addSource("/test.dart", "library lib; part 'test-part.dart';"); Source partSource = _addSource("/test-part.dart", "part of lib;"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 1"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 1"); // update and analyze #1 _context.setContents(libSource, "library lib;"); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNull, reason: "library changed 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part changed 2"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part resolved 2"); // update and analyze #2 _context.setContents(libSource, "library lib; part 'test-part.dart';"); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNull, reason: "library changed 3"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part changed 3"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 3"); } void test_performAnalysisTask_changeLibraryThenPartContents() { Source libSource = _addSource("/test.dart", "library lib; part 'test-part.dart';"); Source partSource = _addSource("/test-part.dart", "part of lib;"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 1"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 1"); // update and analyze #1 _context.setContents(libSource, "library lib;"); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNull, reason: "library changed 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part changed 2"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part resolved 2"); // update and analyze #2 _context.setContents(partSource, "part of lib; // 1"); // Assert that changing the part's content does not effect the library // now that it is no longer part of that library expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library changed 3"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part changed 3"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 3"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part resolved 3"); } void test_performAnalysisTask_changePartContents_makeItAPart() { Source libSource = _addSource("/lib.dart", r''' library lib; part 'part.dart'; void f(x) {}'''); Source partSource = _addSource("/part.dart", "void g() { f(null); }"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 1"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 1"); // update and analyze _context.setContents(partSource, r''' part of lib; void g() { f(null); }'''); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNull, reason: "library changed 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part changed 2"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 2"); expect(_context.getErrors(libSource).errors, hasLength(0)); expect(_context.getErrors(partSource).errors, hasLength(0)); } /** * https://code.google.com/p/dart/issues/detail?id=12424 */ void test_performAnalysisTask_changePartContents_makeItNotPart() { Source libSource = _addSource("/lib.dart", r''' library lib; part 'part.dart'; void f(x) {}'''); Source partSource = _addSource("/part.dart", r''' part of lib; void g() { f(null); }'''); _analyzeAll_assertFinished(); expect(_context.getErrors(libSource).errors, hasLength(0)); expect(_context.getErrors(partSource).errors, hasLength(0)); // Remove 'part' directive, which should make "f(null)" an error. _context.setContents(partSource, r''' //part of lib; void g() { f(null); }'''); _analyzeAll_assertFinished(); expect(_context.getErrors(libSource).errors.length != 0, isTrue); } void test_performAnalysisTask_changePartContents_noSemanticChanges() { Source libSource = _addSource("/test.dart", "library lib; part 'test-part.dart';"); Source partSource = _addSource("/test-part.dart", "part of lib;"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 1"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 1"); // update and analyze #1 _context.setContents(partSource, "part of lib; // 1"); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNull, reason: "library changed 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part changed 2"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 2"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 2"); // update and analyze #2 _context.setContents(partSource, "part of lib; // 12"); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNull, reason: "library changed 3"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNull, reason: "part changed 3"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull, reason: "library resolved 3"); expect( _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull, reason: "part resolved 3"); } void test_performAnalysisTask_getContentException_dart() { // add source that throw an exception on "get content" Source source = new _Source_getContent_throwException('test.dart'); { ChangeSet changeSet = new ChangeSet(); changeSet.addedSource(source); _context.applyChanges(changeSet); } // prepare errors _analyzeAll_assertFinished(); List errors = _context.getErrors(source).errors; // validate errors expect(errors, hasLength(1)); AnalysisError error = errors[0]; expect(error.source, same(source)); expect(error.errorCode, ScannerErrorCode.UNABLE_GET_CONTENT); } void test_performAnalysisTask_getContentException_html() { // add source that throw an exception on "get content" Source source = new _Source_getContent_throwException('test.html'); { ChangeSet changeSet = new ChangeSet(); changeSet.addedSource(source); _context.applyChanges(changeSet); } // prepare errors _analyzeAll_assertFinished(); List errors = _context.getErrors(source).errors; // validate errors expect(errors, hasLength(1)); AnalysisError error = errors[0]; expect(error.source, same(source)); expect(error.errorCode, ScannerErrorCode.UNABLE_GET_CONTENT); } void test_performAnalysisTask_importedLibraryAdd() { Source libASource = _addSource("/libA.dart", "library libA; import 'libB.dart';"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, reason: "libA resolved 1"); expect( _hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), isTrue, reason: "libA has an error"); // add libB.dart and analyze Source libBSource = _addSource("/libB.dart", "library libB;"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, reason: "libA resolved 2"); expect( _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, reason: "libB resolved 2"); expect( !_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), isTrue, reason: "libA doesn't have errors"); } void test_performAnalysisTask_importedLibraryAdd_html() { Source htmlSource = _addSource("/page.html", r''' '''); _analyzeAll_assertFinished(); expect( _context.getResolvedHtmlUnit(htmlSource), isNotNull, reason: "htmlUnit resolved 1"); expect( _hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)), isTrue, reason: "htmlSource has an error"); // add libB.dart and analyze Source libBSource = _addSource("/libB.dart", "library libB;"); _analyzeAll_assertFinished(); expect( _context.getResolvedHtmlUnit(htmlSource), isNotNull, reason: "htmlUnit resolved 1"); expect( _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, reason: "libB resolved 2"); // TODO (danrubel) commented out to fix red bots // AnalysisErrorInfo errors = _context.getErrors(htmlSource); // expect( // !_hasAnalysisErrorWithErrorSeverity(errors), // isTrue, // reason: "htmlSource doesn't have errors"); } void test_performAnalysisTask_importedLibraryDelete() { Source libASource = _addSource("/libA.dart", "library libA; import 'libB.dart';"); Source libBSource = _addSource("/libB.dart", "library libB;"); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, reason: "libA resolved 1"); expect( _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull, reason: "libB resolved 1"); expect( !_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), isTrue, reason: "libA doesn't have errors"); // remove libB.dart content and analyze _context.setContents(libBSource, null); _analyzeAll_assertFinished(); expect( _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull, reason: "libA resolved 2"); expect( _hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)), isTrue, reason: "libA has an error"); } void test_performAnalysisTask_IOException() { TestSource source = _addSourceWithException2("/test.dart", "library test;"); int oldTimestamp = _context.getModificationStamp(source); source.generateExceptionOnRead = false; _analyzeAll_assertFinished(); expect(source.readCount, 1); source.generateExceptionOnRead = true; do { _changeSource(source, ""); // Ensure that the timestamp differs, // so that analysis engine notices the change } while (oldTimestamp == _context.getModificationStamp(source)); _analyzeAll_assertFinished(); expect(source.readCount, 2); } void test_performAnalysisTask_missingPart() { Source source = _addSource("/test.dart", "library lib; part 'no-such-file.dart';"); _analyzeAll_assertFinished(); expect( _context.getLibraryElement(source), isNotNull, reason: "performAnalysisTask failed to compute an element model"); } void test_performAnalysisTask_modifiedAfterParse() { // TODO(scheglov) no threads in Dart // Source source = _addSource("/test.dart", "library lib;"); // int initialTime = _context.getModificationStamp(source); // List sources = new List(); // sources.add(source); // _context.analysisPriorityOrder = sources; // _context.parseCompilationUnit(source); // while (initialTime == JavaSystem.currentTimeMillis()) { // Thread.sleep(1); // // Force the modification time to be different. // } // _context.setContents(source, "library test;"); // JUnitTestCase.assertTrue(initialTime != _context.getModificationStamp(source)); // _analyzeAll_assertFinished(); // JUnitTestCase.assertNotNullMsg("performAnalysisTask failed to compute an element model", _context.getLibraryElement(source)); } void test_resolveCompilationUnit_import_relative() { _context = AnalysisContextFactory.contextWithCore(); Source sourceA = _addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); _addSource("/libB.dart", "library libB; class B{}"); CompilationUnit compilationUnit = _context.resolveCompilationUnit2(sourceA, sourceA); LibraryElement library = compilationUnit.element.library; List importedLibraries = library.importedLibraries; assertNamedElements(importedLibraries, ["dart.core", "libB"]); List visibleLibraries = library.visibleLibraries; assertNamedElements(visibleLibraries, ["dart.core", "libA", "libB"]); } void test_resolveCompilationUnit_import_relative_cyclic() { _context = AnalysisContextFactory.contextWithCore(); Source sourceA = _addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); _addSource("/libB.dart", "library libB; import 'libA.dart'; class B{}"); CompilationUnit compilationUnit = _context.resolveCompilationUnit2(sourceA, sourceA); LibraryElement library = compilationUnit.element.library; List importedLibraries = library.importedLibraries; assertNamedElements(importedLibraries, ["dart.core", "libB"]); List visibleLibraries = library.visibleLibraries; assertNamedElements(visibleLibraries, ["dart.core", "libA", "libB"]); } void test_resolveCompilationUnit_library() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/lib.dart", "library lib;"); LibraryElement library = _context.computeLibraryElement(source); CompilationUnit compilationUnit = _context.resolveCompilationUnit(source, library); expect(compilationUnit, isNotNull); expect(compilationUnit.element, isNotNull); } void test_resolveCompilationUnit_source() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source source = _addSource("/lib.dart", "library lib;"); CompilationUnit compilationUnit = _context.resolveCompilationUnit2(source, source); expect(compilationUnit, isNotNull); } void test_resolveCompilationUnit_sourceChangeDuringResolution() { _context = new _AnalysisContext_sourceChangeDuringResolution(); AnalysisContextFactory.initContextWithCore(_context); _sourceFactory = _context.sourceFactory; Source source = _addSource("/lib.dart", "library lib;"); CompilationUnit compilationUnit = _context.resolveCompilationUnit2(source, source); expect(compilationUnit, isNotNull); expect(_context.getLineInfo(source), isNotNull); } void test_resolveHtmlUnit() { Source source = _addSource("/lib.html", ""); ht.HtmlUnit unit = _context.resolveHtmlUnit(source); expect(unit, isNotNull); } void test_setAnalysisOptions() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); options.cacheSize = 42; options.dart2jsHint = false; options.hint = false; _context.analysisOptions = options; AnalysisOptions result = _context.analysisOptions; expect(result.cacheSize, options.cacheSize); expect(result.dart2jsHint, options.dart2jsHint); expect(result.hint, options.hint); } void test_setAnalysisOptions_reduceAnalysisPriorityOrder() { AnalysisOptionsImpl options = new AnalysisOptionsImpl.con1(_context.analysisOptions); List sources = new List(); for (int index = 0; index < options.cacheSize; index++) { sources.add(_addSource("/lib.dart$index", "")); } _context.analysisPriorityOrder = sources; int oldPriorityOrderSize = _getPriorityOrder(_context).length; options.cacheSize = options.cacheSize - 10; _context.analysisOptions = options; expect(oldPriorityOrderSize > _getPriorityOrder(_context).length, isTrue); } void test_setAnalysisPriorityOrder_empty() { _context.analysisPriorityOrder = new List(); } void test_setAnalysisPriorityOrder_lessThanCacheSize() { AnalysisOptions options = _context.analysisOptions; List sources = new List(); for (int index = 0; index < options.cacheSize; index++) { sources.add(_addSource("/lib.dart$index", "")); } _context.analysisPriorityOrder = sources; expect(options.cacheSize > _getPriorityOrder(_context).length, isTrue); } void test_setAnalysisPriorityOrder_nonEmpty() { List sources = new List(); sources.add(_addSource("/lib.dart", "library lib;")); _context.analysisPriorityOrder = sources; } Future test_setChangedContents_libraryWithPart() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); options.incremental = true; _context = AnalysisContextFactory.contextWithCoreAndOptions(options); SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); _sourceFactory = _context.sourceFactory; String oldCode = r''' library lib; part 'part.dart'; int a = 0;'''; Source librarySource = _addSource("/lib.dart", oldCode); String partContents = r''' part of lib; int b = a;'''; Source partSource = _addSource("/part.dart", partContents); LibraryElement element = _context.computeLibraryElement(librarySource); CompilationUnit unit = _context.getResolvedCompilationUnit(librarySource, element); expect(unit, isNotNull); int offset = oldCode.indexOf("int a") + 4; String newCode = r''' library lib; part 'part.dart'; int ya = 0;'''; expect(_getIncrementalAnalysisCache(_context), isNull); _context.setChangedContents(librarySource, newCode, offset, 0, 1); expect(_context.getContents(librarySource).data, newCode); IncrementalAnalysisCache incrementalCache = _getIncrementalAnalysisCache(_context); expect(incrementalCache.librarySource, librarySource); expect(incrementalCache.resolvedUnit, same(unit)); expect( _context.getResolvedCompilationUnit2(partSource, librarySource), isNull); expect(incrementalCache.newContents, newCode); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [librarySource]); listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [partSource]); listener.assertEvent(changedSources: [librarySource]); listener.assertNoMoreEvents(); }); } void test_setChangedContents_notResolved() { _context = AnalysisContextFactory.contextWithCore(); AnalysisOptionsImpl options = new AnalysisOptionsImpl.con1(_context.analysisOptions); options.incremental = true; _context.analysisOptions = options; _sourceFactory = _context.sourceFactory; String oldCode = r''' library lib; int a = 0;'''; Source librarySource = _addSource("/lib.dart", oldCode); int offset = oldCode.indexOf("int a") + 4; String newCode = r''' library lib; int ya = 0;'''; _context.setChangedContents(librarySource, newCode, offset, 0, 1); expect(_context.getContents(librarySource).data, newCode); expect(_getIncrementalAnalysisCache(_context), isNull); } Future test_setContents_libraryWithPart() { _context = AnalysisContextFactory.contextWithCore(); SourcesChangedListener listener = new SourcesChangedListener(); _context.onSourcesChanged.listen(listener.onData); _sourceFactory = _context.sourceFactory; String libraryContents1 = r''' library lib; part 'part.dart'; int a = 0;'''; Source librarySource = _addSource("/lib.dart", libraryContents1); String partContents1 = r''' part of lib; int b = a;'''; Source partSource = _addSource("/part.dart", partContents1); _context.computeLibraryElement(librarySource); IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache( librarySource, librarySource, null, null, null, 0, 0, 0); _setIncrementalAnalysisCache(_context, incrementalCache); expect(_getIncrementalAnalysisCache(_context), same(incrementalCache)); String libraryContents2 = r''' library lib; part 'part.dart'; int aa = 0;'''; _context.setContents(librarySource, libraryContents2); expect( _context.getResolvedCompilationUnit2(partSource, librarySource), isNull); expect(_getIncrementalAnalysisCache(_context), isNull); return pumpEventQueue().then((_) { listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [librarySource]); listener.assertEvent(wereSourcesAdded: true); listener.assertEvent(changedSources: [partSource]); listener.assertEvent(changedSources: [librarySource]); listener.assertNoMoreEvents(); }); } void test_setContents_null() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source librarySource = _addSource("/lib.dart", r''' library lib; int a = 0;'''); _context.computeLibraryElement(librarySource); IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache( librarySource, librarySource, null, null, null, 0, 0, 0); _setIncrementalAnalysisCache(_context, incrementalCache); expect(_getIncrementalAnalysisCache(_context), same(incrementalCache)); _context.setContents(librarySource, null); expect( _context.getResolvedCompilationUnit2(librarySource, librarySource), isNull); expect(_getIncrementalAnalysisCache(_context), isNull); } void test_setContents_unchanged_consistentModificationTime() { String contents = "// foo"; Source source = _addSource("/test.dart", contents); // do all, no tasks _analyzeAll_assertFinished(); { AnalysisResult result = _context.performAnalysisTask(); expect(result.changeNotices, isNull); } // set the same contents, still no tasks _context.setContents(source, contents); { AnalysisResult result = _context.performAnalysisTask(); expect(result.changeNotices, isNull); } } void test_setSourceFactory() { expect(_context.sourceFactory, _sourceFactory); SourceFactory factory = new SourceFactory([]); _context.sourceFactory = factory; expect(_context.sourceFactory, factory); } void test_unreadableSource() { _context = AnalysisContextFactory.contextWithCore(); _sourceFactory = _context.sourceFactory; Source test1 = _addSource("/test1.dart", r''' import 'test2.dart'; library test1;'''); Source test2 = _addSource("/test2.dart", r''' import 'test1.dart'; import 'test3.dart'; library test2;'''); Source test3 = _addSourceWithException("/test3.dart"); _analyzeAll_assertFinished(); // test1 and test2 should have been successfully analyzed // despite the fact that test3 couldn't be read. expect(_context.computeLibraryElement(test1), isNotNull); expect(_context.computeLibraryElement(test2), isNotNull); expect(_context.computeLibraryElement(test3), isNull); } void test_updateAnalysis() { expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); AnalysisDelta delta = new AnalysisDelta(); delta.setAnalysisLevel(source, AnalysisLevel.ALL); _context.applyAnalysisDelta(delta); expect(_context.sourcesNeedingProcessing.contains(source), isTrue); delta = new AnalysisDelta(); delta.setAnalysisLevel(source, AnalysisLevel.NONE); _context.applyAnalysisDelta(delta); expect(_context.sourcesNeedingProcessing.contains(source), isFalse); } void xtest_performAnalysisTask_stress() { int maxCacheSize = 4; AnalysisOptionsImpl options = new AnalysisOptionsImpl.con1(_context.analysisOptions); options.cacheSize = maxCacheSize; _context.analysisOptions = options; int sourceCount = maxCacheSize + 2; List sources = new List(); ChangeSet changeSet = new ChangeSet(); for (int i = 0; i < sourceCount; i++) { Source source = _addSource("/lib$i.dart", "library lib$i;"); sources.add(source); changeSet.addedSource(source); } _context.applyChanges(changeSet); _context.analysisPriorityOrder = sources; for (int i = 0; i < 1000; i++) { List notice = _context.performAnalysisTask().changeNotices; if (notice == null) { //System.out.println("test_performAnalysisTask_stress: " + i); break; } } List notice = _context.performAnalysisTask().changeNotices; if (notice != null) { fail( "performAnalysisTask failed to terminate after analyzing all sources"); } } Source _addSource(String fileName, String contents) { Source source = new FileBasedSource.con1(FileUtilities2.createFile(fileName)); ChangeSet changeSet = new ChangeSet(); changeSet.addedSource(source); _context.applyChanges(changeSet); _context.setContents(source, contents); return source; } TestSource _addSourceWithException(String fileName) { return _addSourceWithException2(fileName, ""); } TestSource _addSourceWithException2(String fileName, String contents) { TestSource source = new TestSource(fileName, contents); source.generateExceptionOnRead = true; ChangeSet changeSet = new ChangeSet(); changeSet.addedSource(source); _context.applyChanges(changeSet); return source; } /** * Perform analysis tasks up to 512 times and asserts that that was enough. */ void _analyzeAll_assertFinished() { _analyzeAll_assertFinished2(512); } /** * Perform analysis tasks up to the given number of times and asserts that that was enough. * * @param maxIterations the maximum number of tasks to perform */ void _analyzeAll_assertFinished2(int maxIterations) { for (int i = 0; i < maxIterations; i++) { List notice = _context.performAnalysisTask().changeNotices; if (notice == null) { return; } } fail("performAnalysisTask failed to terminate after analyzing all sources"); } void _changeSource(TestSource source, String contents) { source.setContents(contents); ChangeSet changeSet = new ChangeSet(); changeSet.changedSource(source); _context.applyChanges(changeSet); } /** * Search the given compilation unit for a class with the given name. Return the class with the * given name, or `null` if the class cannot be found. * * @param unit the compilation unit being searched * @param className the name of the class being searched for * @return the class with the given name */ ClassElement _findClass(CompilationUnitElement unit, String className) { for (ClassElement classElement in unit.types) { if (classElement.displayName == className) { return classElement; } } return null; } IncrementalAnalysisCache _getIncrementalAnalysisCache(AnalysisContextImpl context2) { return context2.test_incrementalAnalysisCache; } List _getPriorityOrder(AnalysisContextImpl context2) { return context2.test_priorityOrder; } void _performPendingAnalysisTasks([int maxTasks = 20]) { for (int i = 0; _context.performAnalysisTask().hasMoreWork; i++) { if (i > maxTasks) { fail('Analysis did not terminate.'); } } } void _removeSource(Source source) { ChangeSet changeSet = new ChangeSet(); changeSet.removedSource(source); _context.applyChanges(changeSet); } void _setIncrementalAnalysisCache(AnalysisContextImpl context, IncrementalAnalysisCache incrementalCache) { context.test_incrementalAnalysisCache = incrementalCache; } /** * Returns `true` if there is an [AnalysisError] with [ErrorSeverity.ERROR] in * the given [AnalysisErrorInfo]. */ static bool _hasAnalysisErrorWithErrorSeverity(AnalysisErrorInfo errorInfo) { List errors = errorInfo.errors; for (AnalysisError analysisError in errors) { if (analysisError.errorCode.errorSeverity == ErrorSeverity.ERROR) { return true; } } return false; } } class AnalysisContextImplTest_Source_exists_true extends TestSource { @override bool exists() => true; } class AnalysisContextImplTest_Source_getModificationStamp_fromSource extends TestSource { int stamp; AnalysisContextImplTest_Source_getModificationStamp_fromSource(this.stamp); @override int get modificationStamp => stamp; } class AnalysisContextImplTest_Source_getModificationStamp_overridden extends TestSource { int stamp; AnalysisContextImplTest_Source_getModificationStamp_overridden(this.stamp); @override int get modificationStamp => stamp; } @reflectiveTest class AnalysisOptionsImplTest extends EngineTestCase { void test_AnalysisOptionsImpl_copy() { bool booleanValue = true; for (int i = 0; i < 2; i++, booleanValue = !booleanValue) { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); options.analyzeFunctionBodies = booleanValue; options.cacheSize = i; options.dart2jsHint = booleanValue; options.generateSdkErrors = booleanValue; options.hint = booleanValue; options.incremental = booleanValue; options.preserveComments = booleanValue; AnalysisOptionsImpl copy = new AnalysisOptionsImpl.con1(options); expect(copy.analyzeFunctionBodies, options.analyzeFunctionBodies); expect(copy.cacheSize, options.cacheSize); expect(copy.dart2jsHint, options.dart2jsHint); expect(copy.generateSdkErrors, options.generateSdkErrors); expect(copy.hint, options.hint); expect(copy.incremental, options.incremental); expect(copy.preserveComments, options.preserveComments); } } void test_getAnalyzeFunctionBodies() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); bool value = !options.analyzeFunctionBodies; options.analyzeFunctionBodies = value; expect(options.analyzeFunctionBodies, value); } void test_getCacheSize() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); expect(options.cacheSize, AnalysisOptionsImpl.DEFAULT_CACHE_SIZE); int value = options.cacheSize + 1; options.cacheSize = value; expect(options.cacheSize, value); } void test_getDart2jsHint() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); bool value = !options.dart2jsHint; options.dart2jsHint = value; expect(options.dart2jsHint, value); } void test_getGenerateSdkErrors() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); bool value = !options.generateSdkErrors; options.generateSdkErrors = value; expect(options.generateSdkErrors, value); } void test_getHint() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); bool value = !options.hint; options.hint = value; expect(options.hint, value); } void test_getIncremental() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); bool value = !options.incremental; options.incremental = value; expect(options.incremental, value); } void test_getPreserveComments() { AnalysisOptionsImpl options = new AnalysisOptionsImpl(); bool value = !options.preserveComments; options.preserveComments = value; expect(options.preserveComments, value); } } class AnalysisTask_test_perform_exception extends AnalysisTask { AnalysisTask_test_perform_exception(InternalAnalysisContext arg0) : super(arg0); @override String get taskDescription => null; @override accept(AnalysisTaskVisitor visitor) { expect(exception, isNotNull); return null; } @override void internalPerform() { throw new AnalysisException("Forced exception"); } } @reflectiveTest class AnalysisTaskTest extends EngineTestCase { void test_perform_exception() { InternalAnalysisContext context = new AnalysisContextImpl(); context.sourceFactory = new SourceFactory([new FileUriResolver()]); AnalysisTask task = new AnalysisTask_test_perform_exception(context); task.perform(new TestTaskVisitor()); } } class CompilationUnitMock extends TypedMock implements CompilationUnit { noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); } @reflectiveTest class DartEntryTest extends EngineTestCase { void test_allErrors() { Source source = new TestSource(); DartEntry entry = new DartEntry(); expect(entry.allErrors, hasLength(0)); entry.setValue( SourceEntry.CONTENT_ERRORS, [ new AnalysisError.con1(source, ScannerErrorCode.UNABLE_GET_CONTENT)]); entry.setValue( DartEntry.SCAN_ERRORS, [ new AnalysisError.con1(source, ScannerErrorCode.UNTERMINATED_STRING_LITERAL)]); entry.setValue( DartEntry.PARSE_ERRORS, [ new AnalysisError.con1(source, ParserErrorCode.ABSTRACT_CLASS_MEMBER)]); entry.setValueInLibrary( DartEntry.RESOLUTION_ERRORS, source, [ new AnalysisError.con1( source, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)]); entry.setValueInLibrary( DartEntry.VERIFICATION_ERRORS, source, [ new AnalysisError.con1(source, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)]); entry.setValueInLibrary( DartEntry.HINTS, source, [new AnalysisError.con1(source, HintCode.DEAD_CODE)]); expect(entry.allErrors, hasLength(6)); } void test_creation() { Source librarySource = new TestSource(); DartEntry entry = new DartEntry(); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.INVALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.INVALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.INVALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.INVALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.INVALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.INVALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.INVALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.INVALID)); expect( entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.INVALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.INVALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource), same(CacheState.INVALID)); } void test_getResolvableCompilationUnit_none() { DartEntry entry = new DartEntry(); expect(entry.resolvableCompilationUnit, isNull); } void test_getResolvableCompilationUnit_parsed_accessed() { Source librarySource = new TestSource("/lib.dart"); String importUri = "/f1.dart"; Source importSource = new TestSource(importUri); ImportDirective importDirective = AstFactory.importDirective3(importUri, null); importDirective.source = importSource; importDirective.uriContent = importUri; String exportUri = "/f2.dart"; Source exportSource = new TestSource(exportUri); ExportDirective exportDirective = AstFactory.exportDirective2(exportUri); exportDirective.source = exportSource; exportDirective.uriContent = exportUri; String partUri = "/f3.dart"; Source partSource = new TestSource(partUri); PartDirective partDirective = AstFactory.partDirective2(partUri); partDirective.source = partSource; partDirective.uriContent = partUri; CompilationUnit unit = AstFactory.compilationUnit3([importDirective, exportDirective, partDirective]); DartEntry entry = new DartEntry(); entry.setValue(DartEntry.PARSED_UNIT, unit); entry.getValue(DartEntry.PARSED_UNIT); CompilationUnit result = entry.resolvableCompilationUnit; expect(result, same(unit)); entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource, unit); result = entry.resolvableCompilationUnit; expect(result, isNot(same(unit))); NodeList directives = result.directives; ImportDirective resultImportDirective = directives[0] as ImportDirective; expect(resultImportDirective.uriContent, importUri); expect(resultImportDirective.source, same(importSource)); ExportDirective resultExportDirective = directives[1] as ExportDirective; expect(resultExportDirective.uriContent, exportUri); expect(resultExportDirective.source, same(exportSource)); PartDirective resultPartDirective = directives[2] as PartDirective; expect(resultPartDirective.uriContent, partUri); expect(resultPartDirective.source, same(partSource)); } void test_getResolvableCompilationUnit_parsed_notAccessed() { CompilationUnit unit = AstFactory.compilationUnit(); DartEntry entry = new DartEntry(); entry.setValue(DartEntry.PARSED_UNIT, unit); expect(entry.resolvableCompilationUnit, same(unit)); } void test_getResolvableCompilationUnit_resolved() { String importUri = "f1.dart"; Source importSource = new TestSource(importUri); ImportDirective importDirective = AstFactory.importDirective3(importUri, null); importDirective.source = importSource; importDirective.uriContent = importUri; String exportUri = "f2.dart"; Source exportSource = new TestSource(exportUri); ExportDirective exportDirective = AstFactory.exportDirective2(exportUri); exportDirective.source = exportSource; exportDirective.uriContent = exportUri; String partUri = "f3.dart"; Source partSource = new TestSource(partUri); PartDirective partDirective = AstFactory.partDirective2(partUri); partDirective.source = partSource; partDirective.uriContent = partUri; CompilationUnit unit = AstFactory.compilationUnit3([importDirective, exportDirective, partDirective]); DartEntry entry = new DartEntry(); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, new TestSource("lib.dart"), unit); CompilationUnit result = entry.resolvableCompilationUnit; expect(result, isNot(same(unit))); NodeList directives = result.directives; ImportDirective resultImportDirective = directives[0] as ImportDirective; expect(resultImportDirective.uriContent, importUri); expect(resultImportDirective.source, same(importSource)); ExportDirective resultExportDirective = directives[1] as ExportDirective; expect(resultExportDirective.uriContent, exportUri); expect(resultExportDirective.source, same(exportSource)); PartDirective resultPartDirective = directives[2] as PartDirective; expect(resultPartDirective.uriContent, partUri); expect(resultPartDirective.source, same(partSource)); } void test_getState_invalid_resolutionErrors() { DartEntry entry = new DartEntry(); try { entry.getState(DartEntry.RESOLUTION_ERRORS); fail("Expected IllegalArgumentException for RESOLUTION_ERRORS"); } on ArgumentError catch (exception) { // Expected } } void test_getState_invalid_verificationErrors() { DartEntry entry = new DartEntry(); try { entry.getState(DartEntry.VERIFICATION_ERRORS); fail("Expected IllegalArgumentException for VERIFICATION_ERRORS"); } on ArgumentError catch (exception) { // Expected } } void test_getStateInLibrary_invalid_element() { DartEntry entry = new DartEntry(); try { entry.getStateInLibrary(DartEntry.ELEMENT, new TestSource()); fail("Expected IllegalArgumentException for ELEMENT"); } on ArgumentError catch (exception) { // Expected } } void test_getValue_containingLibraries() { Source testSource = new TestSource(); DartEntry entry = new DartEntry(); List value = entry.containingLibraries; expect(value, hasLength(0)); entry.addContainingLibrary(testSource); value = entry.containingLibraries; expect(value, hasLength(1)); expect(value[0], testSource); entry.removeContainingLibrary(testSource); value = entry.containingLibraries; expect(value, hasLength(0)); } void test_getValue_invalid_resolutionErrors() { DartEntry entry = new DartEntry(); try { entry.getValue(DartEntry.RESOLUTION_ERRORS); fail("Expected IllegalArgumentException for RESOLUTION_ERRORS"); } on ArgumentError catch (exception) { } } void test_getValue_invalid_verificationErrors() { DartEntry entry = new DartEntry(); try { entry.getValue(DartEntry.VERIFICATION_ERRORS); fail("Expected IllegalArgumentException for VERIFICATION_ERRORS"); } on ArgumentError catch (exception) { // Expected } } void test_getValueInLibrary_invalid_element() { DartEntry entry = new DartEntry(); try { entry.getValueInLibrary(DartEntry.ELEMENT, new TestSource()); fail("Expected IllegalArgumentException for ELEMENT"); } on ArgumentError catch (exception) { // Expected } } void test_getValueInLibrary_invalid_resolutionErrors_multiple() { Source source1 = new TestSource(); Source source2 = new TestSource(); Source source3 = new TestSource(); DartEntry entry = new DartEntry(); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit()); try { entry.getValueInLibrary(DartEntry.ELEMENT, source3); fail("Expected IllegalArgumentException for ELEMENT"); } on ArgumentError catch (exception) { // Expected } } void test_hasInvalidData_false() { DartEntry entry = new DartEntry(); entry.recordScanError(new CaughtException(new AnalysisException(), null)); expect(entry.hasInvalidData(DartEntry.ELEMENT), isFalse); expect(entry.hasInvalidData(DartEntry.EXPORTED_LIBRARIES), isFalse); expect(entry.hasInvalidData(DartEntry.HINTS), isFalse); expect(entry.hasInvalidData(DartEntry.IMPORTED_LIBRARIES), isFalse); expect(entry.hasInvalidData(DartEntry.INCLUDED_PARTS), isFalse); expect(entry.hasInvalidData(DartEntry.IS_CLIENT), isFalse); expect(entry.hasInvalidData(DartEntry.IS_LAUNCHABLE), isFalse); expect(entry.hasInvalidData(SourceEntry.LINE_INFO), isFalse); expect(entry.hasInvalidData(DartEntry.PARSE_ERRORS), isFalse); expect(entry.hasInvalidData(DartEntry.PARSED_UNIT), isFalse); expect(entry.hasInvalidData(DartEntry.PUBLIC_NAMESPACE), isFalse); expect(entry.hasInvalidData(DartEntry.SOURCE_KIND), isFalse); expect(entry.hasInvalidData(DartEntry.RESOLUTION_ERRORS), isFalse); expect(entry.hasInvalidData(DartEntry.RESOLVED_UNIT), isFalse); expect(entry.hasInvalidData(DartEntry.VERIFICATION_ERRORS), isFalse); } void test_hasInvalidData_true() { DartEntry entry = new DartEntry(); expect(entry.hasInvalidData(DartEntry.ELEMENT), isTrue); expect(entry.hasInvalidData(DartEntry.EXPORTED_LIBRARIES), isTrue); expect(entry.hasInvalidData(DartEntry.HINTS), isTrue); expect(entry.hasInvalidData(DartEntry.IMPORTED_LIBRARIES), isTrue); expect(entry.hasInvalidData(DartEntry.INCLUDED_PARTS), isTrue); expect(entry.hasInvalidData(DartEntry.IS_CLIENT), isTrue); expect(entry.hasInvalidData(DartEntry.IS_LAUNCHABLE), isTrue); expect(entry.hasInvalidData(SourceEntry.LINE_INFO), isTrue); expect(entry.hasInvalidData(DartEntry.PARSE_ERRORS), isTrue); expect(entry.hasInvalidData(DartEntry.PARSED_UNIT), isTrue); expect(entry.hasInvalidData(DartEntry.PUBLIC_NAMESPACE), isTrue); expect(entry.hasInvalidData(DartEntry.SOURCE_KIND), isTrue); expect(entry.hasInvalidData(DartEntry.RESOLUTION_ERRORS), isTrue); expect(entry.hasInvalidData(DartEntry.RESOLVED_UNIT), isTrue); expect(entry.hasInvalidData(DartEntry.VERIFICATION_ERRORS), isTrue); } void test_invalidateAllInformation() { Source librarySource = new TestSource(); DartEntry entry = _entryWithValidState(librarySource); entry.invalidateAllInformation(); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.INVALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.INVALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.INVALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.INVALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.INVALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.INVALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.INVALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.INVALID)); expect( entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.INVALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.INVALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource), same(CacheState.INVALID)); } void test_invalidateAllResolutionInformation() { Source librarySource = new TestSource(); DartEntry entry = _entryWithValidState(librarySource); entry.invalidateAllResolutionInformation(false); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect( entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource), same(CacheState.INVALID)); } void test_invalidateAllResolutionInformation_includingUris() { Source librarySource = new TestSource(); DartEntry entry = _entryWithValidState(librarySource); entry.invalidateAllResolutionInformation(true); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.INVALID)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.INVALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.INVALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.INVALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect( entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.INVALID)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource), same(CacheState.INVALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, librarySource), same(CacheState.INVALID)); } void test_isClient() { DartEntry entry = new DartEntry(); // true entry.setValue(DartEntry.IS_CLIENT, true); expect(entry.getValue(DartEntry.IS_CLIENT), isTrue); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID)); // invalidate entry.setState(DartEntry.IS_CLIENT, CacheState.INVALID); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.INVALID)); // false entry.setValue(DartEntry.IS_CLIENT, false); expect(entry.getValue(DartEntry.IS_CLIENT), isFalse); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID)); } void test_isLaunchable() { DartEntry entry = new DartEntry(); // true entry.setValue(DartEntry.IS_LAUNCHABLE, true); expect(entry.getValue(DartEntry.IS_LAUNCHABLE), isTrue); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID)); // invalidate entry.setState(DartEntry.IS_LAUNCHABLE, CacheState.INVALID); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.INVALID)); // false entry.setValue(DartEntry.IS_LAUNCHABLE, false); expect(entry.getValue(DartEntry.IS_LAUNCHABLE), isFalse); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID)); } void test_recordBuildElementError() { Source firstLibrary = new TestSource('first.dart'); Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary); entry.recordBuildElementErrorInLibrary( firstLibrary, new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.VALID)); } void test_recordContentError() { Source firstLibrary = new TestSource('first.dart'); // Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary); entry.recordContentError( new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.ERROR)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.ERROR)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.ERROR)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.ERROR)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.ERROR)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.ERROR)); // The following lines are commented out because we don't currently have // any way of setting the state for data associated with a library we // don't know anything about. // expect(entry.getStateInLibrary(DartEntry.ANGULAR_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.ERROR)); } void test_recordHintErrorInLibrary() { Source firstLibrary = new TestSource('first.dart'); Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary); entry.recordHintErrorInLibrary( firstLibrary, new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.VALID)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.VALID)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.VALID)); } void test_recordParseError() { Source firstLibrary = new TestSource('first.dart'); // Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary); entry.recordParseError(new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.ERROR)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.ERROR)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.ERROR)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.ERROR)); // The following lines are commented out because we don't currently have // any way of setting the state for data associated with a library we // don't know anything about. // expect(entry.getStateInLibrary(DartEntry.ANGULAR_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.ERROR)); } void test_recordResolutionError() { Source firstLibrary = new TestSource('first.dart'); // Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary); entry.recordResolutionError( new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.ERROR)); // The following lines are commented out because we don't currently have // any way of setting the state for data associated with a library we // don't know anything about. // expect(entry.getStateInLibrary(DartEntry.ANGULAR_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.ERROR)); } void test_recordResolutionErrorInLibrary() { Source firstLibrary = new TestSource('first.dart'); Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary); entry.recordResolutionErrorInLibrary( firstLibrary, new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.VALID)); } void test_recordScanError() { Source firstLibrary = new TestSource('first.dart'); // Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary); entry.recordScanError(new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.ERROR)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.ERROR)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.ERROR)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.ERROR)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.ERROR)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.ERROR)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.ERROR)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.ERROR)); // The following lines are commented out because we don't currently have // any way of setting the state for data associated with a library we // don't know anything about. // expect(entry.getStateInLibrary(DartEntry.ANGULAR_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.ERROR)); // expect(entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.ERROR)); } void test_recordVerificationErrorInLibrary() { Source firstLibrary = new TestSource('first.dart'); Source secondLibrary = new TestSource('second.dart'); DartEntry entry = _entryWithValidState(firstLibrary, secondLibrary); entry.recordVerificationErrorInLibrary( firstLibrary, new CaughtException(new AnalysisException(), null)); expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.VALID)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.VALID)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.ERROR)); expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.VALID)); } void test_removeResolution_multiple_first() { Source source1 = new TestSource('first.dart'); Source source2 = new TestSource('second.dart'); Source source3 = new TestSource('third.dart'); DartEntry entry = new DartEntry(); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit()); entry.removeResolution(source1); } void test_removeResolution_multiple_last() { Source source1 = new TestSource('first.dart'); Source source2 = new TestSource('second.dart'); Source source3 = new TestSource('third.dart'); DartEntry entry = new DartEntry(); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit()); entry.removeResolution(source3); } void test_removeResolution_multiple_middle() { Source source1 = new TestSource('first.dart'); Source source2 = new TestSource('second.dart'); Source source3 = new TestSource('third.dart'); DartEntry entry = new DartEntry(); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source2, AstFactory.compilationUnit()); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source3, AstFactory.compilationUnit()); entry.removeResolution(source2); } void test_removeResolution_single() { Source source1 = new TestSource(); DartEntry entry = new DartEntry(); entry.setValueInLibrary( DartEntry.RESOLVED_UNIT, source1, AstFactory.compilationUnit()); entry.removeResolution(source1); } void test_resolvableCompilationUnit_builtUnit() { Source librarySource = new TestSource('/lib.dart'); CompilationUnit unit = AstFactory.compilationUnit(); CompilationUnitElement element = ElementFactory.compilationUnit('test.dart'); unit.element = element; DartEntry entry = new DartEntry(); entry.setState(DartEntry.PARSED_UNIT, CacheState.FLUSHED); entry.setValueInLibrary(DartEntry.BUILT_UNIT, librarySource, unit); entry.invalidateAllResolutionInformation(false); CompilationUnit resolvableUnit = entry.resolvableCompilationUnit; expect(resolvableUnit, isNotNull); expect(resolvableUnit.element, isNull); expect(entry.resolvableCompilationUnit, isNull); } void test_resolvableCompilationUnit_none() { DartEntry entry = new DartEntry(); expect(entry.resolvableCompilationUnit, isNull); } void test_resolvableCompilationUnit_parsed() { CompilationUnit unit = AstFactory.compilationUnit(); DartEntry entry = new DartEntry(); entry.setValue(DartEntry.PARSED_UNIT, unit); expect(entry.resolvableCompilationUnit, unit); expect(entry.resolvableCompilationUnit, isNull); } void test_resolvableCompilationUnit_resolved() { Source librarySource = new TestSource('/lib.dart'); CompilationUnit unit = AstFactory.compilationUnit(); CompilationUnitElement element = ElementFactory.compilationUnit('test.dart'); unit.element = element; DartEntry entry = new DartEntry(); entry.setState(DartEntry.PARSED_UNIT, CacheState.FLUSHED); entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource, unit); entry.invalidateAllResolutionInformation(false); CompilationUnit resolvableUnit = entry.resolvableCompilationUnit; expect(resolvableUnit, isNotNull); expect(resolvableUnit.element, isNull); expect(entry.resolvableCompilationUnit, isNull); } void test_setState_element() { _setState(DartEntry.ELEMENT); } void test_setState_exportedLibraries() { _setState(DartEntry.EXPORTED_LIBRARIES); } void test_setState_hints() { _setStateInLibrary(DartEntry.HINTS); } void test_setState_importedLibraries() { _setState(DartEntry.IMPORTED_LIBRARIES); } void test_setState_includedParts() { _setState(DartEntry.INCLUDED_PARTS); } void test_setState_invalid_element() { DartEntry entry = new DartEntry(); try { entry.setStateInLibrary(DartEntry.ELEMENT, null, CacheState.FLUSHED); fail("Expected IllegalArgumentException for ELEMENT"); } on ArgumentError catch (exception) { // Expected } } void test_setState_invalid_resolutionErrors() { DartEntry entry = new DartEntry(); try { entry.setState(DartEntry.RESOLUTION_ERRORS, CacheState.FLUSHED); fail("Expected IllegalArgumentException for RESOLUTION_ERRORS"); } on ArgumentError catch (exception) { // Expected } } void test_setState_invalid_validState() { DartEntry entry = new DartEntry(); try { entry.setState(SourceEntry.LINE_INFO, CacheState.VALID); fail("Expected ArgumentError for a state of VALID"); } on ArgumentError catch (exception) { } } void test_setState_invalid_verificationErrors() { DartEntry entry = new DartEntry(); try { entry.setState(DartEntry.VERIFICATION_ERRORS, CacheState.FLUSHED); fail("Expected IllegalArgumentException for VERIFICATION_ERRORS"); } on ArgumentError catch (exception) { // Expected } } void test_setState_isClient() { _setState(DartEntry.IS_CLIENT); } void test_setState_isLaunchable() { _setState(DartEntry.IS_LAUNCHABLE); } void test_setState_lineInfo() { _setState(SourceEntry.LINE_INFO); } void test_setState_parsedUnit() { _setState(DartEntry.PARSED_UNIT); } void test_setState_parseErrors() { _setState(DartEntry.PARSE_ERRORS); } void test_setState_publicNamespace() { _setState(DartEntry.PUBLIC_NAMESPACE); } void test_setState_resolutionErrors() { _setStateInLibrary(DartEntry.RESOLUTION_ERRORS); } void test_setState_resolvedUnit() { _setStateInLibrary(DartEntry.RESOLVED_UNIT); } void test_setState_scanErrors() { _setState(DartEntry.SCAN_ERRORS); } void test_setState_sourceKind() { _setState(DartEntry.SOURCE_KIND); } void test_setState_tokenStream() { _setState(DartEntry.TOKEN_STREAM); } void test_setState_verificationErrors() { _setStateInLibrary(DartEntry.VERIFICATION_ERRORS); } void test_setValue_element() { _setValue( DartEntry.ELEMENT, new LibraryElementImpl.forNode(null, AstFactory.libraryIdentifier2(["lib"]))); } void test_setValue_exportedLibraries() { _setValue(DartEntry.EXPORTED_LIBRARIES, [new TestSource()]); } void test_setValue_hints() { _setValueInLibrary( DartEntry.HINTS, [new AnalysisError.con1(null, HintCode.DEAD_CODE)]); } void test_setValue_importedLibraries() { _setValue(DartEntry.IMPORTED_LIBRARIES, [new TestSource()]); } void test_setValue_includedParts() { _setValue(DartEntry.INCLUDED_PARTS, [new TestSource()]); } void test_setValue_isClient() { _setValue(DartEntry.IS_CLIENT, true); } void test_setValue_isLaunchable() { _setValue(DartEntry.IS_LAUNCHABLE, true); } void test_setValue_lineInfo() { _setValue(SourceEntry.LINE_INFO, new LineInfo([0])); } void test_setValue_parsedUnit() { _setValue(DartEntry.PARSED_UNIT, AstFactory.compilationUnit()); } void test_setValue_parseErrors() { _setValue( DartEntry.PARSE_ERRORS, [ new AnalysisError.con1(null, ParserErrorCode.ABSTRACT_CLASS_MEMBER)]); } void test_setValue_publicNamespace() { _setValue( DartEntry.PUBLIC_NAMESPACE, new Namespace(new HashMap())); } void test_setValue_resolutionErrors() { _setValueInLibrary( DartEntry.RESOLUTION_ERRORS, [ new AnalysisError.con1( null, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)]); } void test_setValue_resolvedUnit() { _setValueInLibrary(DartEntry.RESOLVED_UNIT, AstFactory.compilationUnit()); } void test_setValue_scanErrors() { _setValue( DartEntry.SCAN_ERRORS, [ new AnalysisError.con1( null, ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT)]); } void test_setValue_sourceKind() { _setValue(DartEntry.SOURCE_KIND, SourceKind.LIBRARY); } void test_setValue_tokenStream() { _setValue(DartEntry.TOKEN_STREAM, new Token(TokenType.LT, 5)); } void test_setValue_verificationErrors() { _setValueInLibrary( DartEntry.VERIFICATION_ERRORS, [ new AnalysisError.con1(null, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)]); } DartEntry _entryWithValidState([Source firstLibrary, Source secondLibrary]) { DartEntry entry = new DartEntry(); entry.setValue(SourceEntry.CONTENT, null); entry.setValue(SourceEntry.CONTENT_ERRORS, null); entry.setValue(SourceEntry.LINE_INFO, null); entry.setValue(DartEntry.CONTAINING_LIBRARIES, null); entry.setValue(DartEntry.ELEMENT, null); entry.setValue(DartEntry.EXPORTED_LIBRARIES, null); entry.setValue(DartEntry.IMPORTED_LIBRARIES, null); entry.setValue(DartEntry.INCLUDED_PARTS, null); entry.setValue(DartEntry.IS_CLIENT, null); entry.setValue(DartEntry.IS_LAUNCHABLE, null); entry.setValue(DartEntry.PARSE_ERRORS, null); entry.setValue(DartEntry.PARSED_UNIT, null); entry.setValue(DartEntry.PUBLIC_NAMESPACE, null); entry.setValue(DartEntry.SCAN_ERRORS, null); entry.setValue(DartEntry.SOURCE_KIND, null); entry.setValue(DartEntry.TOKEN_STREAM, null); if (firstLibrary != null) { entry.setValueInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary, null); entry.setValueInLibrary(DartEntry.BUILT_UNIT, firstLibrary, null); entry.setValueInLibrary(DartEntry.HINTS, firstLibrary, null); entry.setValueInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary, null); entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary, null); entry.setValueInLibrary( DartEntry.VERIFICATION_ERRORS, firstLibrary, null); } if (secondLibrary != null) { entry.setValueInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary, null); entry.setValueInLibrary(DartEntry.BUILT_UNIT, secondLibrary, null); entry.setValueInLibrary(DartEntry.HINTS, secondLibrary, null); entry.setValueInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary, null); entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary, null); entry.setValueInLibrary( DartEntry.VERIFICATION_ERRORS, secondLibrary, null); } // // Validate that the state was set correctly. // expect(entry.getState(SourceEntry.CONTENT), same(CacheState.VALID)); expect(entry.getState(SourceEntry.CONTENT_ERRORS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect( entry.getState(DartEntry.CONTAINING_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.ELEMENT), same(CacheState.VALID)); expect( entry.getState(DartEntry.EXPORTED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(DartEntry.IMPORTED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(DartEntry.INCLUDED_PARTS), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_CLIENT), same(CacheState.VALID)); expect(entry.getState(DartEntry.IS_LAUNCHABLE), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.PARSED_UNIT), same(CacheState.VALID)); expect(entry.getState(DartEntry.PUBLIC_NAMESPACE), same(CacheState.VALID)); expect(entry.getState(DartEntry.SCAN_ERRORS), same(CacheState.VALID)); expect(entry.getState(DartEntry.SOURCE_KIND), same(CacheState.VALID)); expect(entry.getState(DartEntry.TOKEN_STREAM), same(CacheState.VALID)); if (firstLibrary != null) { expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, firstLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, firstLibrary), same(CacheState.VALID)); } if (secondLibrary != null) { expect( entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.BUILT_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.HINTS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, secondLibrary), same(CacheState.VALID)); expect( entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, secondLibrary), same(CacheState.VALID)); } return entry; } void _setState(DataDescriptor descriptor) { DartEntry entry = new DartEntry(); expect(entry.getState(descriptor), isNot(same(CacheState.FLUSHED))); entry.setState(descriptor, CacheState.FLUSHED); expect(entry.getState(descriptor), same(CacheState.FLUSHED)); } void _setStateInLibrary(DataDescriptor descriptor) { Source source = new TestSource(); DartEntry entry = new DartEntry(); expect( entry.getStateInLibrary(descriptor, source), isNot(same(CacheState.FLUSHED))); entry.setStateInLibrary(descriptor, source, CacheState.FLUSHED); expect( entry.getStateInLibrary(descriptor, source), same(CacheState.FLUSHED)); } void _setValue(DataDescriptor descriptor, Object newValue) { DartEntry entry = new DartEntry(); Object value = entry.getValue(descriptor); expect(newValue, isNot(same(value))); entry.setValue(descriptor, newValue); expect(entry.getState(descriptor), same(CacheState.VALID)); expect(entry.getValue(descriptor), same(newValue)); } void _setValueInLibrary(DataDescriptor descriptor, Object newValue) { Source source = new TestSource(); DartEntry entry = new DartEntry(); Object value = entry.getValueInLibrary(descriptor, source); expect(newValue, isNot(same(value))); entry.setValueInLibrary(descriptor, source, newValue); expect(entry.getStateInLibrary(descriptor, source), same(CacheState.VALID)); expect(entry.getValueInLibrary(descriptor, source), same(newValue)); } } @reflectiveTest class GenerateDartErrorsTaskTest extends EngineTestCase { void test_accept() { GenerateDartErrorsTask task = new GenerateDartErrorsTask(null, null, null, null); expect(task.accept(new GenerateDartErrorsTaskTestTV_accept()), isTrue); } void test_getException() { GenerateDartErrorsTask task = new GenerateDartErrorsTask(null, null, null, null); expect(task.exception, isNull); } void test_getLibraryElement() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); LibraryElement element = ElementFactory.library(context, "lib"); GenerateDartErrorsTask task = new GenerateDartErrorsTask(context, null, null, element); expect(task.libraryElement, same(element)); } void test_getSource() { Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); GenerateDartErrorsTask task = new GenerateDartErrorsTask(null, source, null, null); expect(task.source, same(source)); } void test_perform() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); ChangeSet changeSet = new ChangeSet(); changeSet.addedSource(source); context.applyChanges(changeSet); context.setContents(source, r''' library lib; class A { int f = new A(); }'''); LibraryElement libraryElement = context.computeLibraryElement(source); CompilationUnit unit = context.getResolvedCompilationUnit(source, libraryElement); GenerateDartErrorsTask task = new GenerateDartErrorsTask(context, source, unit, libraryElement); task.perform( new GenerateDartErrorsTaskTestTV_perform(libraryElement, source)); } void test_perform_validateDirectives() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); Source source = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); ChangeSet changeSet = new ChangeSet(); changeSet.addedSource(source); context.applyChanges(changeSet); // TODO(scheglov) "import" causes second error reported // context.setContents(source, EngineTestCase.createSource([ // "library lib;", // "import 'invaliduri^.dart';", // "export '\${a}lib3.dart';", // "part '/does/not/exist.dart';", // "class A {}"])); context.setContents(source, r''' library lib; part '/does/not/exist.dart'; class A {}'''); LibraryElement libraryElement = context.computeLibraryElement(source); CompilationUnit unit = context.getResolvedCompilationUnit(source, libraryElement); GenerateDartErrorsTask task = new GenerateDartErrorsTask(context, source, unit, libraryElement); task.perform( new GenerateDartErrorsTaskTestTV_perform_validateDirectives( libraryElement, source)); } } class GenerateDartErrorsTaskTestTV_accept extends TestTaskVisitor { @override bool visitGenerateDartErrorsTask(GenerateDartErrorsTask task) => true; } class GenerateDartErrorsTaskTestTV_perform extends TestTaskVisitor { LibraryElement libraryElement; Source source; GenerateDartErrorsTaskTestTV_perform(this.libraryElement, this.source); @override bool visitGenerateDartErrorsTask(GenerateDartErrorsTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.libraryElement, same(libraryElement)); expect(task.source, same(source)); List errors = task.errors; expect(errors, hasLength(1)); return true; } } class GenerateDartErrorsTaskTestTV_perform_validateDirectives extends TestTaskVisitor { LibraryElement libraryElement; Source source; GenerateDartErrorsTaskTestTV_perform_validateDirectives(this.libraryElement, this.source); @override bool visitGenerateDartErrorsTask(GenerateDartErrorsTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.libraryElement, same(libraryElement)); expect(task.source, same(source)); List errors = task.errors; expect(errors, hasLength(1)); expect(errors[0].errorCode, same(CompileTimeErrorCode.URI_DOES_NOT_EXIST)); return true; } } @reflectiveTest class GenerateDartHintsTaskTest extends EngineTestCase { void test_accept() { GenerateDartHintsTask task = new GenerateDartHintsTask(null, null, null); expect(task.accept(new GenerateDartHintsTaskTestTV_accept()), isTrue); } void test_getException() { GenerateDartHintsTask task = new GenerateDartHintsTask(null, null, null); expect(task.exception, isNull); } void test_getHintMap() { GenerateDartHintsTask task = new GenerateDartHintsTask(null, null, null); expect(task.hintMap, isNull); } void test_getLibraryElement() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); LibraryElement element = ElementFactory.library(context, "lib"); GenerateDartHintsTask task = new GenerateDartHintsTask(context, null, element); expect(task.libraryElement, same(element)); } void test_perform() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); ChangeSet changeSet = new ChangeSet(); Source librarySource = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); changeSet.addedSource(librarySource); Source unusedSource = new FileBasedSource.con1(FileUtilities2.createFile("/unused.dart")); changeSet.addedSource(unusedSource); Source partSource = new FileBasedSource.con1(FileUtilities2.createFile("/part.dart")); changeSet.addedSource(partSource); context.applyChanges(changeSet); context.setContents(librarySource, r''' library lib; import 'unused.dart'; part 'part.dart';'''); context.setContents(unusedSource, "library unused;"); context.setContents(partSource, "part of lib;"); List> units = new List(2); units[0] = new TimestampedData( context.getModificationStamp(librarySource), context.resolveCompilationUnit2(librarySource, librarySource)); units[1] = new TimestampedData( context.getModificationStamp(partSource), context.resolveCompilationUnit2(partSource, librarySource)); GenerateDartHintsTask task = new GenerateDartHintsTask( context, units, context.computeLibraryElement(librarySource)); task.perform( new GenerateDartHintsTaskTestTV_perform(librarySource, partSource)); } } class GenerateDartHintsTaskTestTV_accept extends TestTaskVisitor { @override bool visitGenerateDartHintsTask(GenerateDartHintsTask task) => true; } class GenerateDartHintsTaskTestTV_perform extends TestTaskVisitor { Source librarySource; Source partSource; GenerateDartHintsTaskTestTV_perform(this.librarySource, this.partSource); @override bool visitGenerateDartHintsTask(GenerateDartHintsTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.libraryElement, isNotNull); HashMap> hintMap = task.hintMap; expect(hintMap, hasLength(2)); expect(hintMap[librarySource], hasLength(1)); expect(hintMap[partSource], hasLength(0)); return true; } } @reflectiveTest class GenerateDartLintsTaskTest extends EngineTestCase { void test_accept() { GenerateDartLintsTask task = new GenerateDartLintsTask(null, null, null); expect(task.accept(new GenerateDartLintsTaskTestTV_accept()), isTrue); } void test_exception() { GenerateDartLintsTask task = new GenerateDartLintsTask(null, null, null); expect(task.exception, isNull); } void test_libraryElement() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); LibraryElement element = ElementFactory.library(context, "lib"); GenerateDartLintsTask task = new GenerateDartLintsTask(context, null, element); expect(task.libraryElement, same(element)); } void test_lintMap() { GenerateDartLintsTask task = new GenerateDartLintsTask(null, null, null); expect(task.lintMap, isNull); } void test_perform() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); ChangeSet changeSet = new ChangeSet(); Source librarySource = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); changeSet.addedSource(librarySource); context.applyChanges(changeSet); context.setContents(librarySource, r''' library lib; '''); List> units = new List(1); units[0] = new TimestampedData( context.getModificationStamp(librarySource), context.resolveCompilationUnit2(librarySource, librarySource)); GenerateDartLintsTask task = new GenerateDartLintsTask( context, units, context.computeLibraryElement(librarySource)); task.perform(new GenerateDartLintsTaskTestTV_perform(librarySource)); } } class GenerateDartLintsTaskTestTV_accept extends TestTaskVisitor { @override bool visitGenerateDartLintsTask(GenerateDartLintsTask task) => true; } class GenerateDartLintsTaskTestTV_perform extends TestTaskVisitor { Source librarySource; GenerateDartLintsTaskTestTV_perform(this.librarySource); @override bool visitGenerateDartLintsTask(GenerateDartLintsTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.libraryElement, isNotNull); return true; } } @reflectiveTest class GetContentTaskTest extends EngineTestCase { void test_accept() { Source source = new TestSource('/test.dart', ''); GetContentTask task = new GetContentTask(null, source); expect(task.accept(new GetContentTaskTestTV_accept()), isTrue); } void test_getException() { Source source = new TestSource('/test.dart', ''); GetContentTask task = new GetContentTask(null, source); expect(task.exception, isNull); } void test_getModificationTime() { Source source = new TestSource('/test.dart', ''); GetContentTask task = new GetContentTask(null, source); expect(task.modificationTime, -1); } void test_getSource() { Source source = new TestSource('/test.dart', ''); GetContentTask task = new GetContentTask(null, source); expect(task.source, same(source)); } void test_perform_exception() { TestSource source = new TestSource(); source.generateExceptionOnRead = true; // final InternalAnalysisContext context = new AnalysisContextImpl(); // context.setSourceFactory(new SourceFactory(new FileUriResolver())); GetContentTask task = new GetContentTask(null, source); task.perform(new GetContentTaskTestTV_perform_exception()); } void test_perform_valid() { Source source = new TestSource('/test.dart', 'class A {}'); InternalAnalysisContext context = new AnalysisContextImpl(); context.sourceFactory = new SourceFactory([new FileUriResolver()]); GetContentTask task = new GetContentTask(context, source); task.perform(new GetContentTaskTestTV_perform_valid(context, source)); } } class GetContentTaskTestTV_accept extends TestTaskVisitor { @override bool visitGetContentTask(GetContentTask task) => true; } class GetContentTaskTestTV_perform_exception extends TestTaskVisitor { @override bool visitGetContentTask(GetContentTask task) { expect(task.exception, isNotNull); return true; } } class GetContentTaskTestTV_perform_valid extends TestTaskVisitor { InternalAnalysisContext context; Source source; GetContentTaskTestTV_perform_valid(this.context, this.source); @override bool visitGetContentTask(GetContentTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.modificationTime, context.getModificationStamp(source)); expect(task.source, same(source)); return true; } } @reflectiveTest class HtmlEntryTest extends EngineTestCase { void set state(DataDescriptor descriptor) { HtmlEntry entry = new HtmlEntry(); expect(entry.getState(descriptor), isNot(same(CacheState.FLUSHED))); entry.setState(descriptor, CacheState.FLUSHED); expect(entry.getState(descriptor), same(CacheState.FLUSHED)); } void test_creation() { HtmlEntry entry = new HtmlEntry(); expect(entry, isNotNull); } void test_getAllErrors() { Source source = new TestSource(); HtmlEntry entry = new HtmlEntry(); expect(entry.allErrors, hasLength(0)); entry.setValue( HtmlEntry.PARSE_ERRORS, [ new AnalysisError.con1(source, ParserErrorCode.EXPECTED_TOKEN, [";"])]); entry.setValue( HtmlEntry.RESOLUTION_ERRORS, [ new AnalysisError.con1(source, HtmlWarningCode.INVALID_URI, ["-"])]); entry.setValue( HtmlEntry.HINTS, [new AnalysisError.con1(source, HintCode.DEAD_CODE)]); expect(entry.allErrors, hasLength(3)); } void test_invalidateAllResolutionInformation() { HtmlEntry entry = _entryWithValidState(); entry.invalidateAllResolutionInformation(false); expect(entry.getState(HtmlEntry.ELEMENT), same(CacheState.INVALID)); expect(entry.getState(HtmlEntry.HINTS), same(CacheState.INVALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.PARSED_UNIT), same(CacheState.VALID)); expect( entry.getState(HtmlEntry.REFERENCED_LIBRARIES), same(CacheState.VALID)); expect( entry.getState(HtmlEntry.RESOLUTION_ERRORS), same(CacheState.INVALID)); } void test_invalidateAllResolutionInformation_includingUris() { HtmlEntry entry = _entryWithValidState(); entry.invalidateAllResolutionInformation(true); expect(entry.getState(HtmlEntry.ELEMENT), same(CacheState.INVALID)); expect(entry.getState(HtmlEntry.HINTS), same(CacheState.INVALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.PARSED_UNIT), same(CacheState.VALID)); expect( entry.getState(HtmlEntry.REFERENCED_LIBRARIES), same(CacheState.INVALID)); expect( entry.getState(HtmlEntry.RESOLUTION_ERRORS), same(CacheState.INVALID)); } void test_setState_element() { state = HtmlEntry.ELEMENT; } void test_setState_hints() { state = HtmlEntry.HINTS; } void test_setState_lineInfo() { state = SourceEntry.LINE_INFO; } void test_setState_parsedUnit() { state = HtmlEntry.PARSED_UNIT; } void test_setState_parseErrors() { state = HtmlEntry.PARSE_ERRORS; } void test_setState_referencedLibraries() { state = HtmlEntry.REFERENCED_LIBRARIES; } void test_setState_resolutionErrors() { state = HtmlEntry.RESOLUTION_ERRORS; } void test_setValue_element() { _setValue(HtmlEntry.ELEMENT, new HtmlElementImpl(null, "test.html")); } void test_setValue_hints() { _setValue( HtmlEntry.HINTS, [new AnalysisError.con1(null, HintCode.DEAD_CODE)]); } void test_setValue_illegal() { HtmlEntry entry = new HtmlEntry(); try { entry.setValue(DartEntry.ELEMENT, null); fail("Expected IllegalArgumentException for DartEntry.ELEMENT"); } on ArgumentError catch (exception) { } } void test_setValue_lineInfo() { _setValue(SourceEntry.LINE_INFO, new LineInfo([0])); } void test_setValue_parsedUnit() { _setValue(HtmlEntry.PARSED_UNIT, new ht.HtmlUnit(null, null, null)); } void test_setValue_parseErrors() { _setValue( HtmlEntry.PARSE_ERRORS, [ new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])]); } void test_setValue_referencedLibraries() { _setValue(HtmlEntry.REFERENCED_LIBRARIES, [new TestSource()]); } void test_setValue_resolutionErrors() { _setValue( HtmlEntry.RESOLUTION_ERRORS, [ new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])]); } HtmlEntry _entryWithValidState() { HtmlEntry entry = new HtmlEntry(); entry.setValue(HtmlEntry.ELEMENT, null); entry.setValue(HtmlEntry.HINTS, null); entry.setValue(SourceEntry.LINE_INFO, null); entry.setValue(HtmlEntry.PARSE_ERRORS, null); entry.setValue(HtmlEntry.PARSED_UNIT, null); entry.setValue(HtmlEntry.REFERENCED_LIBRARIES, null); entry.setValue(HtmlEntry.RESOLUTION_ERRORS, null); expect(entry.getState(HtmlEntry.ELEMENT), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.HINTS), same(CacheState.VALID)); expect(entry.getState(SourceEntry.LINE_INFO), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.PARSE_ERRORS), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.PARSED_UNIT), same(CacheState.VALID)); expect( entry.getState(HtmlEntry.REFERENCED_LIBRARIES), same(CacheState.VALID)); expect(entry.getState(HtmlEntry.RESOLUTION_ERRORS), same(CacheState.VALID)); return entry; } void _setValue(DataDescriptor descriptor, Object newValue) { HtmlEntry entry = new HtmlEntry(); Object value = entry.getValue(descriptor); expect(newValue, isNot(same(value))); entry.setValue(descriptor, newValue); expect(entry.getState(descriptor), same(CacheState.VALID)); expect(entry.getValue(descriptor), same(newValue)); } } @reflectiveTest class IncrementalAnalysisCacheTest { Source _source = new TestSource(); DartEntry _entry = new DartEntry(); CompilationUnit _unit = new CompilationUnitMock(); IncrementalAnalysisCache _result; void setUp() { _entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, _unit); } void test_cacheResult() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); CompilationUnit newUnit = new CompilationUnitMock(); _result = IncrementalAnalysisCache.cacheResult(cache, newUnit); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(newUnit)); expect(_result.oldContents, "hbazlo"); expect(_result.newContents, "hbazlo"); expect(_result.offset, 0); expect(_result.oldLength, 0); expect(_result.newLength, 0); } void test_cacheResult_noCache() { IncrementalAnalysisCache cache = null; CompilationUnit newUnit = new CompilationUnitMock(); _result = IncrementalAnalysisCache.cacheResult(cache, newUnit); expect(_result, isNull); } void test_cacheResult_noCacheNoResult() { IncrementalAnalysisCache cache = null; CompilationUnit newUnit = null; _result = IncrementalAnalysisCache.cacheResult(cache, newUnit); expect(_result, isNull); } void test_cacheResult_noResult() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); CompilationUnit newUnit = null; _result = IncrementalAnalysisCache.cacheResult(cache, newUnit); expect(_result, isNull); } void test_clear_differentSource() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); Source otherSource = new TestSource("blat.dart", "blat"); _result = IncrementalAnalysisCache.clear(cache, otherSource); expect(_result, same(cache)); } void test_clear_nullCache() { IncrementalAnalysisCache cache = null; _result = IncrementalAnalysisCache.clear(cache, _source); expect(_result, isNull); } void test_clear_sameSource() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); _result = IncrementalAnalysisCache.clear(cache, _source); expect(_result, isNull); } void test_update_append() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); DartEntry newEntry = new DartEntry(); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(_unit)); expect(_result.oldContents, "hello"); expect(_result.newContents, "hbazxlo"); expect(_result.offset, 1); expect(_result.oldLength, 2); expect(_result.newLength, 4); } void test_update_appendToCachedResult() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); CompilationUnit newUnit = new CompilationUnitMock(); cache = IncrementalAnalysisCache.cacheResult(cache, newUnit); expect(cache, isNotNull); DartEntry newEntry = new DartEntry(); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(newUnit)); expect(_result.oldContents, "hbazlo"); expect(_result.newContents, "hbazxlo"); expect(_result.offset, 4); expect(_result.oldLength, 0); expect(_result.newLength, 1); } void test_update_appendWithNewResolvedUnit() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); DartEntry newEntry = new DartEntry(); CompilationUnit newUnit = new CompilationUnitMock(); newEntry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, newUnit); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(newUnit)); expect(_result.oldContents, "hbazlo"); expect(_result.newContents, "hbazxlo"); expect(_result.offset, 4); expect(_result.oldLength, 0); expect(_result.newLength, 1); } void test_update_appendWithNoNewResolvedUnit() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); DartEntry newEntry = new DartEntry(); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "hbazxlo", 4, 0, 1, newEntry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(_unit)); expect(_result.oldContents, "hello"); expect(_result.newContents, "hbazxlo"); expect(_result.offset, 1); expect(_result.oldLength, 2); expect(_result.newLength, 4); } void test_update_delete() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); DartEntry newEntry = new DartEntry(); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "hzlo", 1, 2, 0, newEntry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(_unit)); expect(_result.oldContents, "hello"); expect(_result.newContents, "hzlo"); expect(_result.offset, 1); expect(_result.oldLength, 2); expect(_result.newLength, 1); } void test_update_insert_nonContiguous_after() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); DartEntry newEntry = new DartEntry(); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "hbazlox", 6, 0, 1, newEntry); expect(_result, isNull); } void test_update_insert_nonContiguous_before() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); DartEntry newEntry = new DartEntry(); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "xhbazlo", 0, 0, 1, newEntry); expect(_result, isNull); } void test_update_newSource_entry() { Source oldSource = new TestSource("blat.dart", "blat"); DartEntry oldEntry = new DartEntry(); CompilationUnit oldUnit = new CompilationUnitMock(); oldEntry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, oldUnit); IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, oldSource, "hello", "hbazlo", 1, 2, 3, oldEntry); expect(cache.source, same(oldSource)); expect(cache.resolvedUnit, same(oldUnit)); _result = IncrementalAnalysisCache.update( cache, _source, "foo", "foobz", 3, 0, 2, _entry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(_unit)); expect(_result.oldContents, "foo"); expect(_result.newContents, "foobz"); expect(_result.offset, 3); expect(_result.oldLength, 0); expect(_result.newLength, 2); } void test_update_newSource_noEntry() { Source oldSource = new TestSource("blat.dart", "blat"); DartEntry oldEntry = new DartEntry(); CompilationUnit oldUnit = new CompilationUnitMock(); oldEntry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, oldUnit); IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, oldSource, "hello", "hbazlo", 1, 2, 3, oldEntry); expect(cache.source, same(oldSource)); expect(cache.resolvedUnit, same(oldUnit)); _result = IncrementalAnalysisCache.update( cache, _source, "foo", "foobar", 3, 0, 3, null); expect(_result, isNull); } void test_update_noCache_entry() { _result = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(_unit)); expect(_result.oldContents, "hello"); expect(_result.newContents, "hbazlo"); expect(_result.offset, 1); expect(_result.oldLength, 2); expect(_result.newLength, 3); expect(_result.hasWork, isTrue); } void test_update_noCache_entry_noOldSource_append() { _result = IncrementalAnalysisCache.update( null, _source, null, "hellxo", 4, 0, 1, _entry); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(_unit)); expect(_result.oldContents, "hello"); expect(_result.newContents, "hellxo"); expect(_result.offset, 4); expect(_result.oldLength, 0); expect(_result.newLength, 1); expect(_result.hasWork, isTrue); } void test_update_noCache_entry_noOldSource_delete() { _result = IncrementalAnalysisCache.update(null, _source, null, "helo", 4, 1, 0, _entry); expect(_result, isNull); } void test_update_noCache_entry_noOldSource_replace() { _result = IncrementalAnalysisCache.update(null, _source, null, "helxo", 4, 1, 1, _entry); expect(_result, isNull); } void test_update_noCache_noEntry() { _result = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, null); expect(_result, isNull); } void test_update_replace() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); _result = IncrementalAnalysisCache.update( cache, _source, "hbazlo", "hbarrlo", 3, 1, 2, null); expect(_result, isNotNull); expect(_result.source, same(_source)); expect(_result.resolvedUnit, same(_unit)); expect(_result.oldContents, "hello"); expect(_result.newContents, "hbarrlo"); expect(_result.offset, 1); expect(_result.oldLength, 2); expect(_result.newLength, 4); } void test_verifyStructure_invalidUnit() { String oldCode = "main() {foo;}"; String newCode = "main() {boo;}"; CompilationUnit badUnit = _parse("main() {bad;}"); _entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, badUnit); IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, oldCode, newCode, 8, 1, 1, _entry); CompilationUnit newUnit = _parse(newCode); _result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit); expect(_result, isNull); } void test_verifyStructure_noCache() { IncrementalAnalysisCache cache = null; CompilationUnit newUnit = new CompilationUnitMock(); _result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit); expect(_result, isNull); } void test_verifyStructure_noCacheNoUnit() { IncrementalAnalysisCache cache = null; CompilationUnit newUnit = null; _result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit); expect(_result, isNull); } void test_verifyStructure_noUnit() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); CompilationUnit newUnit = null; _result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit); expect(_result, same(cache)); expect(_result.resolvedUnit, same(_unit)); } void test_verifyStructure_otherSource() { IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, "hello", "hbazlo", 1, 2, 3, _entry); CompilationUnit newUnit = new CompilationUnitMock(); Source otherSource = new TestSource("blat.dart", "blat"); _result = IncrementalAnalysisCache.verifyStructure(cache, otherSource, newUnit); expect(_result, same(cache)); expect(_result.resolvedUnit, same(_unit)); } void test_verifyStructure_validUnit() { String oldCode = "main() {foo;}"; String newCode = "main() {boo;}"; CompilationUnit goodUnit = _parse(newCode); _entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, _source, goodUnit); IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, _source, oldCode, newCode, 1, 2, 3, _entry); CompilationUnit newUnit = _parse(newCode); _result = IncrementalAnalysisCache.verifyStructure(cache, _source, newUnit); expect(_result, same(cache)); expect(_result.resolvedUnit, same(goodUnit)); } CompilationUnit _parse(String code) { Scanner scanner = new Scanner( _source, new CharSequenceReader(code), AnalysisErrorListener.NULL_LISTENER); Parser parser = new Parser(_source, AnalysisErrorListener.NULL_LISTENER); return parser.parseCompilationUnit(scanner.tokenize()); } } @reflectiveTest class IncrementalAnalysisTaskTest extends EngineTestCase { void test_accept() { IncrementalAnalysisTask task = new IncrementalAnalysisTask(null, null); expect(task.accept(new IncrementalAnalysisTaskTestTV_accept()), isTrue); } void test_perform() { // main() {} String foo; // main() {String} String foo; CompilationUnit newUnit = _assertTask("main() {", "", "String", "} String foo;"); NodeList declarations = newUnit.declarations; FunctionDeclaration main = declarations[0] as FunctionDeclaration; expect(main.name.name, "main"); BlockFunctionBody body = main.functionExpression.body as BlockFunctionBody; ExpressionStatement statement = body.block.statements[0] as ExpressionStatement; expect(statement.toSource(), "String;"); SimpleIdentifier identifier = statement.expression as SimpleIdentifier; expect(identifier.name, "String"); expect(identifier.staticElement, isNotNull); TopLevelVariableDeclaration fooDecl = declarations[1] as TopLevelVariableDeclaration; SimpleIdentifier fooName = fooDecl.variables.variables[0].name; expect(fooName.name, "foo"); expect(fooName.staticElement, isNotNull); // assert element reference is preserved } CompilationUnit _assertTask(String prefix, String removed, String added, String suffix) { String oldCode = "$prefix$removed$suffix"; String newCode = "$prefix$added$suffix"; InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); Source source = new TestSource("/test.dart", oldCode); DartEntry entry = new DartEntry(); CompilationUnit oldUnit = context.resolveCompilationUnit2(source, source); expect(oldUnit, isNotNull); entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, source, oldUnit); IncrementalAnalysisCache cache = IncrementalAnalysisCache.update( null, source, oldCode, newCode, prefix.length, removed.length, added.length, entry); expect(cache, isNotNull); IncrementalAnalysisTask task = new IncrementalAnalysisTask(context, cache); CompilationUnit newUnit = task.perform(new IncrementalAnalysisTaskTestTV_assertTask(task)); expect(newUnit, isNotNull); return newUnit; } } class IncrementalAnalysisTaskTestTV_accept extends TestTaskVisitor { @override bool visitIncrementalAnalysisTask(IncrementalAnalysisTask task) => true; } class IncrementalAnalysisTaskTestTV_assertTask extends TestTaskVisitor { IncrementalAnalysisTask task; IncrementalAnalysisTaskTestTV_assertTask(this.task); @override CompilationUnit visitIncrementalAnalysisTask(IncrementalAnalysisTask incrementalAnalysisTask) => task.compilationUnit; } @reflectiveTest class LintGeneratorTest extends EngineTestCase { void test_generate() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); ChangeSet changeSet = new ChangeSet(); Source librarySource = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); changeSet.addedSource(librarySource); context.applyChanges(changeSet); context.setContents(librarySource, r''' library lib; '''); CompilationUnit unit = context.resolveCompilationUnit2(librarySource, librarySource); List units = []; units.add(unit); RecordingErrorListener errorListener = new RecordingErrorListener(); LintGeneratorTest_Linter linter = new LintGeneratorTest_Linter(); LintGenerator lintGenerator = new LintGenerator(units, errorListener, [linter]); lintGenerator.generate(); linter.testExpectations(); } void test_generate_null_visitor() { InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); ChangeSet changeSet = new ChangeSet(); Source librarySource = new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); changeSet.addedSource(librarySource); context.applyChanges(changeSet); context.setContents(librarySource, r''' library lib; '''); CompilationUnit unit = context.resolveCompilationUnit2(librarySource, librarySource); List units = []; units.add(unit); RecordingErrorListener errorListener = new RecordingErrorListener(); Linter badLinter = new LintGeneratorTest_Linter_Null_Visitor(); LintGeneratorTest_Linter goodLinter = new LintGeneratorTest_Linter(); LintGenerator lintGenerator = new LintGenerator(units, errorListener, [badLinter, goodLinter]); // Test that generate does not fall down with a null visitor lintGenerator.generate(); // Well-formed linter should still get called goodLinter.testExpectations(); } } class LintGeneratorTest_Linter extends Linter with SimpleAstVisitor { bool visited; @override AstVisitor getVisitor() => this; testExpectations() { expect(reporter, isNotNull); expect(visited, isTrue); } @override Object visitCompilationUnit(CompilationUnit node) { visited = true; return null; } } class LintGeneratorTest_Linter_Null_Visitor extends Linter { @override AstVisitor getVisitor() => null; } @reflectiveTest class ParseDartTaskTest extends EngineTestCase { void test_accept() { ParseDartTask task = new ParseDartTask(null, null, null, null); expect(task.accept(new ParseDartTaskTestTV_accept()), isTrue); } void test_getCompilationUnit() { ParseDartTask task = new ParseDartTask(null, null, null, null); expect(task.compilationUnit, isNull); } void test_getErrors() { ParseDartTask task = new ParseDartTask(null, null, null, null); expect(task.errors, hasLength(0)); } void test_getException() { ParseDartTask task = new ParseDartTask(null, null, null, null); expect(task.exception, isNull); } void test_getSource() { Source source = new TestSource('/test.dart'); ParseDartTask task = new ParseDartTask(null, source, null, null); expect(task.source, same(source)); } void test_hasNonPartOfDirective() { ParseDartTask task = new ParseDartTask(null, null, null, null); expect(task.hasNonPartOfDirective, isFalse); } void test_hasPartOfDirective() { ParseDartTask task = new ParseDartTask(null, null, null, null); expect(task.hasPartOfDirective, isFalse); } void test_perform_exception() { TestSource source = new TestSource(); source.generateExceptionOnRead = true; InternalAnalysisContext context = new AnalysisContextImpl(); context.sourceFactory = new SourceFactory([new FileUriResolver()]); ParseDartTask task = new ParseDartTask(context, source, null, null); task.perform(new ParseDartTaskTestTV_perform_exception()); } void test_perform_library() { String content = r''' library lib; import 'lib2.dart'; export 'lib3.dart'; part 'part.dart'; class A {'''; Source source = new TestSource('/test.dart', content); InternalAnalysisContext context = new AnalysisContextImpl(); context.sourceFactory = new SourceFactory([new FileUriResolver()]); ParseDartTask task = _createParseTask(context, source, content); task.perform(new ParseDartTaskTestTV_perform_library(context, source)); } void test_perform_part() { String content = r''' part of lib; class B {}'''; Source source = new TestSource('/test.dart', content); InternalAnalysisContext context = new AnalysisContextImpl(); context.sourceFactory = new SourceFactory([new FileUriResolver()]); ParseDartTask task = _createParseTask(context, source, content); task.perform(new ParseDartTaskTestTV_perform_part(context, source)); } void test_perform_validateDirectives() { String content = r''' library lib; import '/does/not/exist.dart'; import '://invaliduri.dart'; export '${a}lib3.dart'; part 'part.dart'; class A {}'''; Source source = new TestSource('/test.dart', content); InternalAnalysisContext context = new AnalysisContextImpl(); context.sourceFactory = new SourceFactory([new FileUriResolver()]); ParseDartTask task = _createParseTask(context, source, content); task.perform( new ParseDartTaskTestTV_perform_validateDirectives(context, source)); } /** * Create and return a task that will parse the given content from the given source in the given * context. * * @param context the context to be passed to the task * @param source the source to be parsed * @param content the content of the source to be parsed * @return the task that was created * @throws AnalysisException if the task could not be created */ ParseDartTask _createParseTask(InternalAnalysisContext context, Source source, String content) { ScanDartTask scanTask = new ScanDartTask(context, source, content); scanTask.perform(new ParseDartTaskTestTV_createParseTask()); return new ParseDartTask( context, source, scanTask.tokenStream, scanTask.lineInfo); } } class ParseDartTaskTestTV_accept extends TestTaskVisitor { @override bool visitParseDartTask(ParseDartTask task) => true; } class ParseDartTaskTestTV_createParseTask extends TestTaskVisitor { @override Object visitScanDartTask(ScanDartTask task) => null; } class ParseDartTaskTestTV_perform_exception extends TestTaskVisitor { @override bool visitParseDartTask(ParseDartTask task) { expect(task.exception, isNotNull); return true; } } class ParseDartTaskTestTV_perform_library extends TestTaskVisitor { InternalAnalysisContext context; Source source; ParseDartTaskTestTV_perform_library(this.context, this.source); @override Object visitParseDartTask(ParseDartTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.compilationUnit, isNotNull); expect(task.errors, hasLength(1)); expect(task.source, same(source)); expect(task.hasNonPartOfDirective, isTrue); expect(task.hasPartOfDirective, isFalse); return null; } } class ParseDartTaskTestTV_perform_part extends TestTaskVisitor { InternalAnalysisContext context; Source source; ParseDartTaskTestTV_perform_part(this.context, this.source); @override Object visitParseDartTask(ParseDartTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.compilationUnit, isNotNull); expect(task.errors, hasLength(0)); expect(task.source, same(source)); expect(task.hasNonPartOfDirective, isFalse); expect(task.hasPartOfDirective, isTrue); return null; } } class ParseDartTaskTestTV_perform_validateDirectives extends TestTaskVisitor { InternalAnalysisContext context; Source source; ParseDartTaskTestTV_perform_validateDirectives(this.context, this.source); @override Object visitParseDartTask(ParseDartTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.compilationUnit, isNotNull); GatheringErrorListener errorListener = new GatheringErrorListener(); errorListener.addAll(task.errors); errorListener.assertErrorsWithCodes( [ CompileTimeErrorCode.URI_WITH_INTERPOLATION, CompileTimeErrorCode.INVALID_URI]); expect(task.source, same(source)); expect(task.hasNonPartOfDirective, isTrue); expect(task.hasPartOfDirective, isFalse); return null; } } @reflectiveTest class ParseHtmlTaskTest extends EngineTestCase { ParseHtmlTask parseContents(String contents, TestLogger testLogger) { return parseSource( new TestSource('/test.dart', contents), contents, testLogger); } ParseHtmlTask parseSource(Source source, String contents, TestLogger testLogger) { InternalAnalysisContext context = new AnalysisContextImpl(); context.setContents(source, contents); context.sourceFactory = new SourceFactory([new FileUriResolver()]); ParseHtmlTask task = new ParseHtmlTask(context, source, contents); Logger oldLogger = AnalysisEngine.instance.logger; try { AnalysisEngine.instance.logger = testLogger; task.perform(new ParseHtmlTaskTestTV_parseSource(context, source)); } finally { AnalysisEngine.instance.logger = oldLogger; } return task; } void test_accept() { ParseHtmlTask task = new ParseHtmlTask(null, null, ""); expect(task.accept(new ParseHtmlTaskTestTV_accept()), isTrue); } void test_getException() { ParseHtmlTask task = new ParseHtmlTask(null, null, ""); expect(task.exception, isNull); } void test_getHtmlUnit() { ParseHtmlTask task = new ParseHtmlTask(null, null, ""); expect(task.htmlUnit, isNull); } void test_getLineInfo() { ParseHtmlTask task = new ParseHtmlTask(null, null, ""); expect(task.lineInfo, isNull); } void test_getReferencedLibraries() { ParseHtmlTask task = new ParseHtmlTask(null, null, ""); expect(task.referencedLibraries, hasLength(0)); } void test_getSource() { Source source = new TestSource('/test.dart'); ParseHtmlTask task = new ParseHtmlTask(null, source, ""); expect(task.source, same(source)); } void test_perform_embedded_source() { String contents = r''' '''; TestLogger testLogger = new TestLogger(); ParseHtmlTask task = parseContents(contents, testLogger); expect(task.referencedLibraries, hasLength(0)); expect(testLogger.errorCount, 0); expect(testLogger.infoCount, 0); } void test_perform_empty_source_reference() { String contents = r''' '''; Source source = new TestSource("/test.html", content); InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); ParseHtmlTask parseTask = new ParseHtmlTask(context, source, content); parseTask.perform(new ResolveHtmlTaskTestTV_perform_valid_2()); ResolveHtmlTask task = new ResolveHtmlTask(context, source, modificationStamp, parseTask.htmlUnit); task.perform( new ResolveHtmlTaskTestTV_perform_valid(modificationStamp, source)); } } class ResolveHtmlTaskTestTV_accept extends TestTaskVisitor { @override bool visitResolveHtmlTask(ResolveHtmlTask task) => true; } class ResolveHtmlTaskTestTV_perform_exception extends TestTaskVisitor { @override bool visitResolveHtmlTask(ResolveHtmlTask task) { expect(task.exception, isNotNull); return true; } } class ResolveHtmlTaskTestTV_perform_valid extends TestTaskVisitor { int modificationStamp; Source source; ResolveHtmlTaskTestTV_perform_valid(this.modificationStamp, this.source); @override Object visitResolveHtmlTask(ResolveHtmlTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.element, isNotNull); expect(task.resolutionErrors, hasLength(1)); expect(task.source, same(source)); return null; } } class ResolveHtmlTaskTestTV_perform_valid_2 extends TestTaskVisitor { @override Object visitParseHtmlTask(ParseHtmlTask task) => null; } @reflectiveTest class ScanDartTaskTest extends EngineTestCase { void test_accept() { ScanDartTask task = new ScanDartTask(null, null, null); expect(task.accept(new ScanDartTaskTestTV_accept()), isTrue); } void test_getErrors() { ScanDartTask task = new ScanDartTask(null, null, null); expect(task.errors, hasLength(0)); } void test_getException() { ScanDartTask task = new ScanDartTask(null, null, null); expect(task.exception, isNull); } void test_getLineInfo() { ScanDartTask task = new ScanDartTask(null, null, null); expect(task.lineInfo, isNull); } void test_getSource() { Source source = new TestSource('test.dart', ''); ScanDartTask task = new ScanDartTask(null, source, null); expect(task.source, same(source)); } void test_perform_valid() { String content = 'class A {}'; Source source = new TestSource('test.dart', content); InternalAnalysisContext context = new AnalysisContextImpl(); context.sourceFactory = new SourceFactory([new FileUriResolver()]); ScanDartTask task = new ScanDartTask(context, source, content); task.perform(new ScanDartTaskTestTV_perform_valid(context, source)); } } class ScanDartTaskTestTV_accept extends TestTaskVisitor { @override bool visitScanDartTask(ScanDartTask task) => true; } class ScanDartTaskTestTV_perform_valid extends TestTaskVisitor { InternalAnalysisContext context; Source source; ScanDartTaskTestTV_perform_valid(this.context, this.source); @override bool visitScanDartTask(ScanDartTask task) { CaughtException exception = task.exception; if (exception != null) { throw exception; } expect(task.tokenStream, isNotNull); expect(task.errors, hasLength(0)); expect(task.lineInfo, isNotNull); expect(task.source, same(source)); return true; } } @reflectiveTest class SdkCachePartitionTest extends EngineTestCase { void test_contains_false() { SdkCachePartition partition = new SdkCachePartition(null, 8); Source source = new TestSource(); expect(partition.contains(source), isFalse); } void test_contains_true() { SdkCachePartition partition = new SdkCachePartition(null, 8); SourceFactory factory = new SourceFactory([new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]); Source source = factory.forUri("dart:core"); expect(partition.contains(source), isTrue); } void test_creation() { expect(new SdkCachePartition(null, 8), isNotNull); } } @reflectiveTest class SourcesChangedEventTest { void test_added() { var source = new StringSource('', '/test.dart'); var changeSet = new ChangeSet(); changeSet.addedSource(source); var event = new SourcesChangedEvent(changeSet); assertEvent(event, wereSourcesAdded: true); } void test_changedContent() { var source = new StringSource('', '/test.dart'); var changeSet = new ChangeSet(); changeSet.changedContent(source, 'library A;'); var event = new SourcesChangedEvent(changeSet); assertEvent(event, changedSources: [source]); } void test_changedContent2() { var source = new StringSource('', '/test.dart'); var event = new SourcesChangedEvent.changedContent(source, 'library A;'); assertEvent(event, changedSources: [source]); } void test_changedRange() { var source = new StringSource('', '/test.dart'); var changeSet = new ChangeSet(); changeSet.changedRange(source, 'library A;', 0, 0, 13); var event = new SourcesChangedEvent(changeSet); assertEvent(event, changedSources: [source]); } void test_changedRange2() { var source = new StringSource('', '/test.dart'); var event = new SourcesChangedEvent.changedRange(source, 'library A;', 0, 0, 13); assertEvent(event, changedSources: [source]); } void test_changedSources() { var source = new StringSource('', '/test.dart'); var changeSet = new ChangeSet(); changeSet.changedSource(source); var event = new SourcesChangedEvent(changeSet); assertEvent(event, changedSources: [source]); } void test_deleted() { var source = new StringSource('', '/test.dart'); var changeSet = new ChangeSet(); changeSet.deletedSource(source); var event = new SourcesChangedEvent(changeSet); assertEvent(event, wereSourcesRemovedOrDeleted: true); } void test_empty() { var changeSet = new ChangeSet(); var event = new SourcesChangedEvent(changeSet); assertEvent(event); } void test_removed() { var source = new StringSource('', '/test.dart'); var changeSet = new ChangeSet(); changeSet.removedSource(source); var event = new SourcesChangedEvent(changeSet); assertEvent(event, wereSourcesRemovedOrDeleted: true); } static void assertEvent(SourcesChangedEvent event, {bool wereSourcesAdded: false, List changedSources: Source.EMPTY_ARRAY, bool wereSourcesRemovedOrDeleted: false}) { expect(event.wereSourcesAdded, wereSourcesAdded); expect(event.changedSources, changedSources); expect(event.wereSourcesRemovedOrDeleted, wereSourcesRemovedOrDeleted); } } class SourcesChangedListener { List actualEvents = []; void assertEvent({bool wereSourcesAdded: false, List changedSources: Source.EMPTY_ARRAY, bool wereSourcesRemovedOrDeleted: false}) { if (actualEvents.isEmpty) { fail('Expected event but found none'); } SourcesChangedEvent actual = actualEvents.removeAt(0); SourcesChangedEventTest.assertEvent( actual, wereSourcesAdded: wereSourcesAdded, changedSources: changedSources, wereSourcesRemovedOrDeleted: wereSourcesRemovedOrDeleted); } void assertNoMoreEvents() { expect(actualEvents, []); } void onData(SourcesChangedEvent event) { actualEvents.add(event); } } /** * Instances of the class `TestAnalysisContext` implement an analysis context in which every * method will cause a test to fail when invoked. */ class TestAnalysisContext implements InternalAnalysisContext { @override AnalysisOptions get analysisOptions { fail("Unexpected invocation of getAnalysisOptions"); return null; } @override void set analysisOptions(AnalysisOptions options) { fail("Unexpected invocation of setAnalysisOptions"); } @override void set analysisPriorityOrder(List sources) { fail("Unexpected invocation of setAnalysisPriorityOrder"); } @override set contentCache(ContentCache value) { fail("Unexpected invocation of setContentCache"); } @override DeclaredVariables get declaredVariables { fail("Unexpected invocation of getDeclaredVariables"); return null; } @override List get htmlSources { fail("Unexpected invocation of getHtmlSources"); return null; } @override bool get isDisposed { fail("Unexpected invocation of isDisposed"); return false; } @override List get launchableClientLibrarySources { fail("Unexpected invocation of getLaunchableClientLibrarySources"); return null; } @override List get launchableServerLibrarySources { fail("Unexpected invocation of getLaunchableServerLibrarySources"); return null; } @override List get librarySources { fail("Unexpected invocation of getLibrarySources"); return null; } @override Stream get onSourcesChanged { fail("Unexpected invocation of onSourcesChanged"); return null; } @override List get prioritySources { fail("Unexpected invocation of getPrioritySources"); return null; } @override List get refactoringUnsafeSources { fail("Unexpected invocation of getRefactoringUnsafeSources"); return null; } @override SourceFactory get sourceFactory { fail("Unexpected invocation of getSourceFactory"); return null; } @override void set sourceFactory(SourceFactory factory) { fail("Unexpected invocation of setSourceFactory"); } @override AnalysisContextStatistics get statistics { fail("Unexpected invocation of getStatistics"); return null; } @override TypeProvider get typeProvider { fail("Unexpected invocation of getTypeProvider"); return null; } @override void addListener(AnalysisListener listener) { fail("Unexpected invocation of addListener"); } @override void addSourceInfo(Source source, SourceEntry info) { fail("Unexpected invocation of addSourceInfo"); } @override void applyAnalysisDelta(AnalysisDelta delta) { fail("Unexpected invocation of applyAnalysisDelta"); } @override void applyChanges(ChangeSet changeSet) { fail("Unexpected invocation of applyChanges"); } @override String computeDocumentationComment(Element element) { fail("Unexpected invocation of computeDocumentationComment"); return null; } @override List computeErrors(Source source) { fail("Unexpected invocation of computeErrors"); return null; } @override List computeExportedLibraries(Source source) { fail("Unexpected invocation of computeExportedLibraries"); return null; } @override HtmlElement computeHtmlElement(Source source) { fail("Unexpected invocation of computeHtmlElement"); return null; } @override List computeImportedLibraries(Source source) { fail("Unexpected invocation of computeImportedLibraries"); return null; } @override SourceKind computeKindOf(Source source) { fail("Unexpected invocation of computeKindOf"); return null; } @override LibraryElement computeLibraryElement(Source source) { fail("Unexpected invocation of computeLibraryElement"); return null; } @override LineInfo computeLineInfo(Source source) { fail("Unexpected invocation of computeLineInfo"); return null; } @override CompilationUnit computeResolvableCompilationUnit(Source source) { fail("Unexpected invocation of computeResolvableCompilationUnit"); return null; } @override Future computeResolvedCompilationUnitAsync(Source source, Source librarySource) { fail("Unexpected invocation of getResolvedCompilationUnitFuture"); return null; } @override void dispose() { fail("Unexpected invocation of dispose"); } @override CompilationUnit ensureAnyResolvedDartUnit(Source source) { fail("Unexpected invocation of ensureAnyResolvedDartUnit"); return null; } @override bool exists(Source source) { fail("Unexpected invocation of exists"); return false; } @override CompilationUnitElement getCompilationUnitElement(Source unitSource, Source librarySource) { fail("Unexpected invocation of getCompilationUnitElement"); return null; } @override TimestampedData getContents(Source source) { fail("Unexpected invocation of getContents"); return null; } @override InternalAnalysisContext getContextFor(Source source) { fail("Unexpected invocation of getContextFor"); return null; } @override Element getElement(ElementLocation location) { fail("Unexpected invocation of getElement"); return null; } @override AnalysisErrorInfo getErrors(Source source) { fail("Unexpected invocation of getErrors"); return null; } @override HtmlElement getHtmlElement(Source source) { fail("Unexpected invocation of getHtmlElement"); return null; } @override List getHtmlFilesReferencing(Source source) { fail("Unexpected invocation of getHtmlFilesReferencing"); return null; } @override SourceKind getKindOf(Source source) { fail("Unexpected invocation of getKindOf"); return null; } @override List getLibrariesContaining(Source source) { fail("Unexpected invocation of getLibrariesContaining"); return null; } @override List getLibrariesDependingOn(Source librarySource) { fail("Unexpected invocation of getLibrariesDependingOn"); return null; } @override List getLibrariesReferencedFromHtml(Source htmlSource) { fail("Unexpected invocation of getLibrariesReferencedFromHtml"); return null; } @override LibraryElement getLibraryElement(Source source) { fail("Unexpected invocation of getLibraryElement"); return null; } @override LineInfo getLineInfo(Source source) { fail("Unexpected invocation of getLineInfo"); return null; } @override int getModificationStamp(Source source) { fail("Unexpected invocation of getModificationStamp"); return 0; } @override Namespace getPublicNamespace(LibraryElement library) { fail("Unexpected invocation of getPublicNamespace"); return null; } @override CompilationUnit getResolvedCompilationUnit(Source unitSource, LibraryElement library) { fail("Unexpected invocation of getResolvedCompilationUnit"); return null; } @override CompilationUnit getResolvedCompilationUnit2(Source unitSource, Source librarySource) { fail("Unexpected invocation of getResolvedCompilationUnit"); return null; } @override ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) { fail("Unexpected invocation of getResolvedHtmlUnit"); return null; } @override bool handleContentsChanged(Source source, String originalContents, String newContents, bool notify) { fail("Unexpected invocation of handleContentsChanged"); return false; } @override bool isClientLibrary(Source librarySource) { fail("Unexpected invocation of isClientLibrary"); return false; } @override bool isServerLibrary(Source librarySource) { fail("Unexpected invocation of isServerLibrary"); return false; } @override CompilationUnit parseCompilationUnit(Source source) { fail("Unexpected invocation of parseCompilationUnit"); return null; } @override ht.HtmlUnit parseHtmlUnit(Source source) { fail("Unexpected invocation of parseHtmlUnit"); return null; } @override AnalysisResult performAnalysisTask() { fail("Unexpected invocation of performAnalysisTask"); return null; } @override void recordLibraryElements(Map elementMap) { fail("Unexpected invocation of recordLibraryElements"); } @override void removeListener(AnalysisListener listener) { fail("Unexpected invocation of removeListener"); } @override CompilationUnit resolveCompilationUnit(Source unitSource, LibraryElement library) { fail("Unexpected invocation of resolveCompilationUnit"); return null; } @override CompilationUnit resolveCompilationUnit2(Source unitSource, Source librarySource) { fail("Unexpected invocation of resolveCompilationUnit"); return null; } @override ht.HtmlUnit resolveHtmlUnit(Source htmlSource) { fail("Unexpected invocation of resolveHtmlUnit"); return null; } @override void setChangedContents(Source source, String contents, int offset, int oldLength, int newLength) { fail("Unexpected invocation of setChangedContents"); } @override void setContents(Source source, String contents) { fail("Unexpected invocation of setContents"); } @override void visitCacheItems(void callback(Source source, SourceEntry dartEntry, DataDescriptor rowDesc, CacheState state)) { fail("Unexpected invocation of visitCacheItems"); } } class TestAnalysisContext_test_addSourceInfo extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_addSourceInfo(); @override void addSourceInfo(Source source, SourceEntry info) { invoked = true; } } class TestAnalysisContext_test_applyChanges extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_applyChanges(); @override void applyChanges(ChangeSet changeSet) { invoked = true; } } class TestAnalysisContext_test_computeDocumentationComment extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeDocumentationComment(); @override String computeDocumentationComment(Element element) { invoked = true; return null; } } class TestAnalysisContext_test_computeErrors extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeErrors(); @override List computeErrors(Source source) { invoked = true; return AnalysisError.NO_ERRORS; } } class TestAnalysisContext_test_computeExportedLibraries extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeExportedLibraries(); @override List computeExportedLibraries(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_computeHtmlElement extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeHtmlElement(); @override HtmlElement computeHtmlElement(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_computeImportedLibraries extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeImportedLibraries(); @override List computeImportedLibraries(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_computeKindOf extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeKindOf(); @override SourceKind computeKindOf(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_computeLibraryElement extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeLibraryElement(); @override LibraryElement computeLibraryElement(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_computeLineInfo extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeLineInfo(); @override LineInfo computeLineInfo(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_computeResolvableCompilationUnit extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_computeResolvableCompilationUnit(); @override CompilationUnit computeResolvableCompilationUnit(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_dispose extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_dispose(); @override void dispose() { invoked = true; } } class TestAnalysisContext_test_exists extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_exists(); @override bool exists(Source source) { invoked = true; return false; } } class TestAnalysisContext_test_getAnalysisOptions extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getAnalysisOptions(); @override AnalysisOptions get analysisOptions { invoked = true; return null; } } class TestAnalysisContext_test_getCompilationUnitElement extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getCompilationUnitElement(); @override CompilationUnitElement getCompilationUnitElement(Source unitSource, Source librarySource) { invoked = true; return null; } } class TestAnalysisContext_test_getContents extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getContents(); @override TimestampedData getContents(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_getElement extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getElement(); @override Element getElement(ElementLocation location) { invoked = true; return null; } } class TestAnalysisContext_test_getErrors extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getErrors(); @override AnalysisErrorInfo getErrors(Source source) { invoked = true; return new AnalysisErrorInfoImpl(AnalysisError.NO_ERRORS, null); } } class TestAnalysisContext_test_getHtmlElement extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getHtmlElement(); @override HtmlElement getHtmlElement(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_getHtmlFilesReferencing extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getHtmlFilesReferencing(); @override List getHtmlFilesReferencing(Source source) { invoked = true; return Source.EMPTY_ARRAY; } } class TestAnalysisContext_test_getHtmlSources extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getHtmlSources(); @override List get htmlSources { invoked = true; return Source.EMPTY_ARRAY; } } class TestAnalysisContext_test_getKindOf extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getKindOf(); @override SourceKind getKindOf(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_getLaunchableClientLibrarySources extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLaunchableClientLibrarySources(); @override List get launchableClientLibrarySources { invoked = true; return Source.EMPTY_ARRAY; } } class TestAnalysisContext_test_getLaunchableServerLibrarySources extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLaunchableServerLibrarySources(); @override List get launchableServerLibrarySources { invoked = true; return Source.EMPTY_ARRAY; } } class TestAnalysisContext_test_getLibrariesContaining extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLibrariesContaining(); @override List getLibrariesContaining(Source source) { invoked = true; return Source.EMPTY_ARRAY; } } class TestAnalysisContext_test_getLibrariesDependingOn extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLibrariesDependingOn(); @override List getLibrariesDependingOn(Source librarySource) { invoked = true; return Source.EMPTY_ARRAY; } } class TestAnalysisContext_test_getLibrariesReferencedFromHtml extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLibrariesReferencedFromHtml(); @override List getLibrariesReferencedFromHtml(Source htmlSource) { invoked = true; return null; } } class TestAnalysisContext_test_getLibraryElement extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLibraryElement(); @override LibraryElement getLibraryElement(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_getLibrarySources extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLibrarySources(); @override List get librarySources { invoked = true; return Source.EMPTY_ARRAY; } } class TestAnalysisContext_test_getLineInfo extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getLineInfo(); @override LineInfo getLineInfo(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_getModificationStamp extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getModificationStamp(); @override int getModificationStamp(Source source) { invoked = true; return 0; } } class TestAnalysisContext_test_getPublicNamespace extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getPublicNamespace(); @override Namespace getPublicNamespace(LibraryElement library) { invoked = true; return null; } } class TestAnalysisContext_test_getRefactoringUnsafeSources extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getRefactoringUnsafeSources(); @override List get refactoringUnsafeSources { invoked = true; return null; } } class TestAnalysisContext_test_getResolvedCompilationUnit_element extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getResolvedCompilationUnit_element(); @override CompilationUnit getResolvedCompilationUnit(Source unitSource, LibraryElement library) { invoked = true; return null; } } class TestAnalysisContext_test_getResolvedCompilationUnit_source extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getResolvedCompilationUnit_source(); @override CompilationUnit getResolvedCompilationUnit2(Source unitSource, Source librarySource) { invoked = true; return null; } } class TestAnalysisContext_test_getResolvedHtmlUnit extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getResolvedHtmlUnit(); @override ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) { invoked = true; return null; } } class TestAnalysisContext_test_getSourceFactory extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getSourceFactory(); @override SourceFactory get sourceFactory { invoked = true; return null; } } class TestAnalysisContext_test_getStatistics extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getStatistics(); @override AnalysisContextStatistics get statistics { invoked = true; return null; } } class TestAnalysisContext_test_getTypeProvider extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_getTypeProvider(); @override TypeProvider get typeProvider { invoked = true; return null; } } class TestAnalysisContext_test_isClientLibrary extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_isClientLibrary(); @override bool isClientLibrary(Source librarySource) { invoked = true; return false; } } class TestAnalysisContext_test_isDisposed extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_isDisposed(); @override bool get isDisposed { invoked = true; return false; } } class TestAnalysisContext_test_isServerLibrary extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_isServerLibrary(); @override bool isServerLibrary(Source librarySource) { invoked = true; return false; } } class TestAnalysisContext_test_parseCompilationUnit extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_parseCompilationUnit(); @override CompilationUnit parseCompilationUnit(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_parseHtmlUnit extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_parseHtmlUnit(); @override ht.HtmlUnit parseHtmlUnit(Source source) { invoked = true; return null; } } class TestAnalysisContext_test_performAnalysisTask extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_performAnalysisTask(); @override AnalysisResult performAnalysisTask() { invoked = true; return new AnalysisResult(new List(0), 0, null, 0); } } class TestAnalysisContext_test_recordLibraryElements extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_recordLibraryElements(); @override void recordLibraryElements(Map elementMap) { invoked = true; } } class TestAnalysisContext_test_resolveCompilationUnit extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_resolveCompilationUnit(); @override CompilationUnit resolveCompilationUnit2(Source unitSource, Source librarySource) { invoked = true; return null; } } class TestAnalysisContext_test_resolveCompilationUnit_element extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_resolveCompilationUnit_element(); @override CompilationUnit resolveCompilationUnit(Source unitSource, LibraryElement library) { invoked = true; return null; } } class TestAnalysisContext_test_resolveHtmlUnit extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_resolveHtmlUnit(); @override ht.HtmlUnit resolveHtmlUnit(Source htmlSource) { invoked = true; return null; } } class TestAnalysisContext_test_setAnalysisOptions extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_setAnalysisOptions(); @override void set analysisOptions(AnalysisOptions options) { invoked = true; } } class TestAnalysisContext_test_setAnalysisPriorityOrder extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_setAnalysisPriorityOrder(); @override void set analysisPriorityOrder(List sources) { invoked = true; } } class TestAnalysisContext_test_setChangedContents extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_setChangedContents(); @override void setChangedContents(Source source, String contents, int offset, int oldLength, int newLength) { invoked = true; } } class TestAnalysisContext_test_setContents extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_setContents(); @override void setContents(Source source, String contents) { invoked = true; } } class TestAnalysisContext_test_setSourceFactory extends TestAnalysisContext { bool invoked = false; TestAnalysisContext_test_setSourceFactory(); @override void set sourceFactory(SourceFactory factory) { invoked = true; } } /** * Instances of the class `TestTaskVisitor` implement a task visitor that fails if any of its * methods are invoked. Subclasses typically override the expected methods to not cause a test * failure. */ class TestTaskVisitor implements AnalysisTaskVisitor { @override E visitBuildUnitElementTask(BuildUnitElementTask task) { fail("Unexpectedly invoked visitGenerateDartErrorsTask"); return null; } @override E visitGenerateDartErrorsTask(GenerateDartErrorsTask task) { fail("Unexpectedly invoked visitGenerateDartErrorsTask"); return null; } @override E visitGenerateDartHintsTask(GenerateDartHintsTask task) { fail("Unexpectedly invoked visitGenerateDartHintsTask"); return null; } @override E visitGenerateDartLintsTask(GenerateDartLintsTask task) { fail("Unexpectedly invoked visitGenerateDartLintsTask"); return null; } @override E visitGetContentTask(GetContentTask task) { fail("Unexpectedly invoked visitGetContentsTask"); return null; } @override E visitIncrementalAnalysisTask(IncrementalAnalysisTask incrementalAnalysisTask) { fail("Unexpectedly invoked visitIncrementalAnalysisTask"); return null; } @override E visitParseDartTask(ParseDartTask task) { fail("Unexpectedly invoked visitParseDartTask"); return null; } @override E visitParseHtmlTask(ParseHtmlTask task) { fail("Unexpectedly invoked visitParseHtmlTask"); return null; } @override E visitResolveDartLibraryCycleTask(ResolveDartLibraryCycleTask task) { fail("Unexpectedly invoked visitResolveDartLibraryCycleTask"); return null; } @override E visitResolveDartLibraryTask(ResolveDartLibraryTask task) { fail("Unexpectedly invoked visitResolveDartLibraryTask"); return null; } @override E visitResolveDartUnitTask(ResolveDartUnitTask task) { fail("Unexpectedly invoked visitResolveDartUnitTask"); return null; } @override E visitResolveHtmlTask(ResolveHtmlTask task) { fail("Unexpectedly invoked visitResolveHtmlTask"); return null; } @override E visitScanDartTask(ScanDartTask task) { fail("Unexpectedly invoked visitScanDartTask"); return null; } } @reflectiveTest class UniversalCachePartitionTest extends EngineTestCase { void test_contains() { UniversalCachePartition partition = new UniversalCachePartition(null, 8, null); TestSource source = new TestSource(); expect(partition.contains(source), isTrue); } void test_creation() { expect(new UniversalCachePartition(null, 8, null), isNotNull); } void test_entrySet() { UniversalCachePartition partition = new UniversalCachePartition(null, 8, null); TestSource source = new TestSource(); DartEntry entry = new DartEntry(); partition.put(source, entry); Map entryMap = partition.map; expect(entryMap.length, 1); Source entryKey = entryMap.keys.first; expect(entryKey, same(source)); expect(entryMap[entryKey], same(entry)); } void test_get() { UniversalCachePartition partition = new UniversalCachePartition(null, 8, null); TestSource source = new TestSource(); expect(partition.get(source), isNull); } void test_put_noFlush() { UniversalCachePartition partition = new UniversalCachePartition(null, 8, null); TestSource source = new TestSource(); DartEntry entry = new DartEntry(); partition.put(source, entry); expect(partition.get(source), same(entry)); } void test_remove() { UniversalCachePartition partition = new UniversalCachePartition(null, 8, null); TestSource source = new TestSource(); DartEntry entry = new DartEntry(); partition.put(source, entry); expect(partition.get(source), same(entry)); partition.remove(source); expect(partition.get(source), isNull); } void test_setMaxCacheSize() { UniversalCachePartition partition = new UniversalCachePartition( null, 8, new _UniversalCachePartitionTest_test_setMaxCacheSize()); int size = 6; for (int i = 0; i < size; i++) { Source source = new TestSource("/test$i.dart"); DartEntry entry = new DartEntry(); entry.setValue(DartEntry.PARSED_UNIT, null); partition.put(source, entry); partition.accessedAst(source); } _assertNonFlushedCount(size, partition); int newSize = size - 2; partition.maxCacheSize = newSize; _assertNonFlushedCount(newSize, partition); } void test_size() { UniversalCachePartition partition = new UniversalCachePartition(null, 8, null); int size = 4; for (int i = 0; i < size; i++) { Source source = new TestSource("/test$i.dart"); partition.put(source, new DartEntry()); partition.accessedAst(source); } expect(partition.size(), size); } void _assertNonFlushedCount(int expectedCount, UniversalCachePartition partition) { int nonFlushedCount = 0; Map entryMap = partition.map; entryMap.values.forEach((SourceEntry value) { if (value.getState(DartEntry.PARSED_UNIT) != CacheState.FLUSHED) { nonFlushedCount++; } }); expect(nonFlushedCount, expectedCount); } } @reflectiveTest class WorkManagerTest extends EngineTestCase { void test_addFirst() { TestSource source1 = new TestSource("/f1.dart"); TestSource source2 = new TestSource("/f2.dart"); WorkManager manager = new WorkManager(); manager.add(source1, SourcePriority.UNKNOWN); manager.addFirst(source2, SourcePriority.UNKNOWN); WorkManager_WorkIterator iterator = manager.iterator(); expect(iterator.next(), same(source2)); expect(iterator.next(), same(source1)); } void test_creation() { expect(new WorkManager(), isNotNull); } void test_iterator_empty() { WorkManager manager = new WorkManager(); WorkManager_WorkIterator iterator = manager.iterator(); expect(iterator.hasNext, isFalse); try { iterator.next(); fail("Expected NoSuchElementException"); } on NoSuchElementException catch (exception) { } } void test_iterator_nonEmpty() { TestSource source = new TestSource(); WorkManager manager = new WorkManager(); manager.add(source, SourcePriority.UNKNOWN); WorkManager_WorkIterator iterator = manager.iterator(); expect(iterator.hasNext, isTrue); expect(iterator.next(), same(source)); } void test_remove() { TestSource source1 = new TestSource("/f1.dart"); TestSource source2 = new TestSource("/f2.dart"); TestSource source3 = new TestSource("/f3.dart"); WorkManager manager = new WorkManager(); manager.add(source1, SourcePriority.UNKNOWN); manager.add(source2, SourcePriority.UNKNOWN); manager.add(source3, SourcePriority.UNKNOWN); manager.remove(source2); WorkManager_WorkIterator iterator = manager.iterator(); expect(iterator.next(), same(source1)); expect(iterator.next(), same(source3)); } void test_toString_empty() { WorkManager manager = new WorkManager(); expect(manager.toString(), isNotNull); } void test_toString_nonEmpty() { WorkManager manager = new WorkManager(); manager.add(new TestSource(), SourcePriority.HTML); manager.add(new TestSource(), SourcePriority.LIBRARY); manager.add(new TestSource(), SourcePriority.NORMAL_PART); manager.add(new TestSource(), SourcePriority.PRIORITY_PART); manager.add(new TestSource(), SourcePriority.UNKNOWN); expect(manager.toString(), isNotNull); } } class _AnalysisCacheTest_test_setMaxCacheSize implements CacheRetentionPolicy { @override RetentionPriority getAstPriority(Source source, SourceEntry sourceEntry) => RetentionPriority.LOW; } class _AnalysisContext_sourceChangeDuringResolution extends AnalysisContextForTests { @override DartEntry recordResolveDartLibraryTaskResults(ResolveDartLibraryTask task) { ChangeSet changeSet = new ChangeSet(); changeSet.changedSource(task.librarySource); applyChanges(changeSet); return super.recordResolveDartLibraryTaskResults(task); } } class _AnalysisContextImplTest_test_applyChanges_removeContainer implements SourceContainer { Source libB; _AnalysisContextImplTest_test_applyChanges_removeContainer(this.libB); @override bool contains(Source source) => source == libB; } class _Source_getContent_throwException extends NonExistingSource { _Source_getContent_throwException(String name) : super(name, UriKind.FILE_URI); @override TimestampedData get contents { throw 'Read error'; } } class _UniversalCachePartitionTest_test_setMaxCacheSize implements CacheRetentionPolicy { @override RetentionPriority getAstPriority(Source source, SourceEntry sourceEntry) => RetentionPriority.LOW; }