Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.src.context.context_test; | 5 library test.src.context.context_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analyzer/file_system/memory_file_system.dart'; | 9 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 10 import 'package:analyzer/src/cancelable_future.dart'; | 10 import 'package:analyzer/src/cancelable_future.dart'; |
| (...skipping 1754 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1765 reason: "libA resolved 2"); | 1765 reason: "libA resolved 2"); |
| 1766 expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)), | 1766 expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)), |
| 1767 isTrue, | 1767 isTrue, |
| 1768 reason: "libA has an error"); | 1768 reason: "libA has an error"); |
| 1769 } | 1769 } |
| 1770 | 1770 |
| 1771 void test_performAnalysisTask_IOException() { | 1771 void test_performAnalysisTask_IOException() { |
| 1772 TestSource source = _addSourceWithException2("/test.dart", "library test;"); | 1772 TestSource source = _addSourceWithException2("/test.dart", "library test;"); |
| 1773 source.generateExceptionOnRead = false; | 1773 source.generateExceptionOnRead = false; |
| 1774 _analyzeAll_assertFinished(); | 1774 _analyzeAll_assertFinished(); |
| 1775 expect(source.readCount, 1); | 1775 expect(source.readCount, 2); |
|
Brian Wilkerson
2015/09/23 13:53:38
I don't understand why this change would cause the
scheglov
2015/09/23 15:11:27
The scenario is following.
1. We add test.dart as
| |
| 1776 _changeSource(source, ""); | 1776 _changeSource(source, ""); |
| 1777 source.generateExceptionOnRead = true; | 1777 source.generateExceptionOnRead = true; |
| 1778 _analyzeAll_assertFinished(); | 1778 _analyzeAll_assertFinished(); |
| 1779 if (AnalysisEngine.instance.limitInvalidationInTaskModel) { | 1779 if (AnalysisEngine.instance.limitInvalidationInTaskModel) { |
| 1780 expect(source.readCount, 7); | |
| 1781 } else { | |
| 1780 expect(source.readCount, 5); | 1782 expect(source.readCount, 5); |
| 1781 } else { | |
| 1782 expect(source.readCount, 3); | |
| 1783 } | 1783 } |
| 1784 } | 1784 } |
| 1785 | 1785 |
| 1786 void test_performAnalysisTask_missingPart() { | 1786 void test_performAnalysisTask_missingPart() { |
| 1787 Source source = | 1787 Source source = |
| 1788 addSource("/test.dart", "library lib; part 'no-such-file.dart';"); | 1788 addSource("/test.dart", "library lib; part 'no-such-file.dart';"); |
| 1789 _analyzeAll_assertFinished(); | 1789 _analyzeAll_assertFinished(); |
| 1790 expect(context.getLibraryElement(source), isNotNull, | 1790 expect(context.getLibraryElement(source), isNotNull, |
| 1791 reason: "performAnalysisTask failed to compute an element model"); | 1791 reason: "performAnalysisTask failed to compute an element model"); |
| 1792 } | 1792 } |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1862 context.resolveCompilationUnit2(sourceA, sourceA); | 1862 context.resolveCompilationUnit2(sourceA, sourceA); |
| 1863 expect(compilationUnit, isNotNull); | 1863 expect(compilationUnit, isNotNull); |
| 1864 LibraryElement library = compilationUnit.element.library; | 1864 LibraryElement library = compilationUnit.element.library; |
| 1865 List<LibraryElement> importedLibraries = library.importedLibraries; | 1865 List<LibraryElement> importedLibraries = library.importedLibraries; |
| 1866 assertNamedElements(importedLibraries, ["dart.core", "libB"]); | 1866 assertNamedElements(importedLibraries, ["dart.core", "libB"]); |
| 1867 List<LibraryElement> visibleLibraries = library.visibleLibraries; | 1867 List<LibraryElement> visibleLibraries = library.visibleLibraries; |
| 1868 assertNamedElements(visibleLibraries, | 1868 assertNamedElements(visibleLibraries, |
| 1869 ["dart.core", "dart.async", "dart.math", "libA", "libB"]); | 1869 ["dart.core", "dart.async", "dart.math", "libA", "libB"]); |
| 1870 } | 1870 } |
| 1871 | 1871 |
| 1872 void test_resolveCompilationUnit_library() { | |
| 1873 Source source = addSource("/lib.dart", "library lib;"); | |
| 1874 LibraryElement library = context.computeLibraryElement(source); | |
| 1875 CompilationUnit compilationUnit = | |
| 1876 context.resolveCompilationUnit(source, library); | |
| 1877 expect(compilationUnit, isNotNull); | |
| 1878 expect(compilationUnit.element, isNotNull); | |
| 1879 } | |
| 1880 | |
| 1872 // void test_resolveCompilationUnit_sourceChangeDuringResolution() { | 1881 // void test_resolveCompilationUnit_sourceChangeDuringResolution() { |
| 1873 // _context = new _AnalysisContext_sourceChangeDuringResolution(); | 1882 // _context = new _AnalysisContext_sourceChangeDuringResolution(); |
| 1874 // AnalysisContextFactory.initContextWithCore(_context); | 1883 // AnalysisContextFactory.initContextWithCore(_context); |
| 1875 // _sourceFactory = _context.sourceFactory; | 1884 // _sourceFactory = _context.sourceFactory; |
| 1876 // Source source = _addSource("/lib.dart", "library lib;"); | 1885 // Source source = _addSource("/lib.dart", "library lib;"); |
| 1877 // CompilationUnit compilationUnit = | 1886 // CompilationUnit compilationUnit = |
| 1878 // _context.resolveCompilationUnit2(source, source); | 1887 // _context.resolveCompilationUnit2(source, source); |
| 1879 // expect(compilationUnit, isNotNull); | 1888 // expect(compilationUnit, isNotNull); |
| 1880 // expect(_context.getLineInfo(source), isNotNull); | 1889 // expect(_context.getLineInfo(source), isNotNull); |
| 1881 // } | 1890 // } |
| 1882 | 1891 |
| 1883 void test_resolveCompilationUnit_library() { | |
| 1884 Source source = addSource("/lib.dart", "library lib;"); | |
| 1885 LibraryElement library = context.computeLibraryElement(source); | |
| 1886 CompilationUnit compilationUnit = | |
| 1887 context.resolveCompilationUnit(source, library); | |
| 1888 expect(compilationUnit, isNotNull); | |
| 1889 expect(compilationUnit.element, isNotNull); | |
| 1890 } | |
| 1891 | |
| 1892 void test_resolveCompilationUnit_source() { | 1892 void test_resolveCompilationUnit_source() { |
| 1893 Source source = addSource("/lib.dart", "library lib;"); | 1893 Source source = addSource("/lib.dart", "library lib;"); |
| 1894 CompilationUnit compilationUnit = | 1894 CompilationUnit compilationUnit = |
| 1895 context.resolveCompilationUnit2(source, source); | 1895 context.resolveCompilationUnit2(source, source); |
| 1896 expect(compilationUnit, isNotNull); | 1896 expect(compilationUnit, isNotNull); |
| 1897 } | 1897 } |
| 1898 | 1898 |
| 1899 void test_setAnalysisOptions() { | 1899 void test_setAnalysisOptions() { |
| 1900 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); | 1900 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
| 1901 options.cacheSize = 42; | 1901 options.cacheSize = 42; |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2066 AnalysisDelta delta = new AnalysisDelta(); | 2066 AnalysisDelta delta = new AnalysisDelta(); |
| 2067 delta.setAnalysisLevel(source, AnalysisLevel.ALL); | 2067 delta.setAnalysisLevel(source, AnalysisLevel.ALL); |
| 2068 context.applyAnalysisDelta(delta); | 2068 context.applyAnalysisDelta(delta); |
| 2069 expect(context.sourcesNeedingProcessing, contains(source)); | 2069 expect(context.sourcesNeedingProcessing, contains(source)); |
| 2070 delta = new AnalysisDelta(); | 2070 delta = new AnalysisDelta(); |
| 2071 delta.setAnalysisLevel(source, AnalysisLevel.NONE); | 2071 delta.setAnalysisLevel(source, AnalysisLevel.NONE); |
| 2072 context.applyAnalysisDelta(delta); | 2072 context.applyAnalysisDelta(delta); |
| 2073 expect(context.sourcesNeedingProcessing.contains(source), isFalse); | 2073 expect(context.sourcesNeedingProcessing.contains(source), isFalse); |
| 2074 } | 2074 } |
| 2075 | 2075 |
| 2076 void test_validateCacheConsistency_deletedSource() { | |
| 2077 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); | |
| 2078 var fileA = resourceProvider.newFile('/a.dart', ""); | |
| 2079 var fileB = resourceProvider.newFile('/b.dart', "import 'a.dart';"); | |
| 2080 Source sourceA = fileA.createSource(); | |
| 2081 Source sourceB = fileB.createSource(); | |
| 2082 context.applyChanges( | |
| 2083 new ChangeSet()..addedSource(sourceA)..addedSource(sourceB)); | |
| 2084 // analyze everything | |
| 2085 _analyzeAll_assertFinished(); | |
| 2086 // delete a.dart | |
| 2087 resourceProvider.deleteFile('/a.dart'); | |
| 2088 // analysis should eventually stop | |
| 2089 _analyzeAll_assertFinished(); | |
| 2090 } | |
| 2091 | |
| 2076 void xtest_performAnalysisTask_stress() { | 2092 void xtest_performAnalysisTask_stress() { |
| 2077 int maxCacheSize = 4; | 2093 int maxCacheSize = 4; |
| 2078 AnalysisOptionsImpl options = | 2094 AnalysisOptionsImpl options = |
| 2079 new AnalysisOptionsImpl.from(context.analysisOptions); | 2095 new AnalysisOptionsImpl.from(context.analysisOptions); |
| 2080 options.cacheSize = maxCacheSize; | 2096 options.cacheSize = maxCacheSize; |
| 2081 context.analysisOptions = options; | 2097 context.analysisOptions = options; |
| 2082 int sourceCount = maxCacheSize + 2; | 2098 int sourceCount = maxCacheSize + 2; |
| 2083 List<Source> sources = <Source>[]; | 2099 List<Source> sources = <Source>[]; |
| 2084 ChangeSet changeSet = new ChangeSet(); | 2100 ChangeSet changeSet = new ChangeSet(); |
| 2085 for (int i = 0; i < sourceCount; i++) { | 2101 for (int i = 0; i < sourceCount; i++) { |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 2116 return source; | 2132 return source; |
| 2117 } | 2133 } |
| 2118 | 2134 |
| 2119 /** | 2135 /** |
| 2120 * Perform analysis tasks up to 512 times and assert that it was enough. | 2136 * Perform analysis tasks up to 512 times and assert that it was enough. |
| 2121 */ | 2137 */ |
| 2122 void _analyzeAll_assertFinished([int maxIterations = 512]) { | 2138 void _analyzeAll_assertFinished([int maxIterations = 512]) { |
| 2123 for (int i = 0; i < maxIterations; i++) { | 2139 for (int i = 0; i < maxIterations; i++) { |
| 2124 List<ChangeNotice> notice = context.performAnalysisTask().changeNotices; | 2140 List<ChangeNotice> notice = context.performAnalysisTask().changeNotices; |
| 2125 if (notice == null) { | 2141 if (notice == null) { |
| 2126 return; | 2142 bool inconsistent = context.validateCacheConsistency(); |
| 2143 if (!inconsistent) { | |
| 2144 return; | |
| 2145 } | |
| 2127 } | 2146 } |
| 2128 } | 2147 } |
| 2129 fail("performAnalysisTask failed to terminate after analyzing all sources"); | 2148 fail("performAnalysisTask failed to terminate after analyzing all sources"); |
| 2130 } | 2149 } |
| 2131 | 2150 |
| 2132 void _changeSource(TestSource source, String contents) { | 2151 void _changeSource(TestSource source, String contents) { |
| 2133 source.setContents(contents); | 2152 source.setContents(contents); |
| 2134 ChangeSet changeSet = new ChangeSet(); | 2153 ChangeSet changeSet = new ChangeSet(); |
| 2135 changeSet.changedSource(source); | 2154 changeSet.changedSource(source); |
| 2136 context.applyChanges(changeSet); | 2155 context.applyChanges(changeSet); |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2503 } | 2522 } |
| 2504 } | 2523 } |
| 2505 | 2524 |
| 2506 class _AnalysisContextImplTest_test_applyChanges_removeContainer | 2525 class _AnalysisContextImplTest_test_applyChanges_removeContainer |
| 2507 implements SourceContainer { | 2526 implements SourceContainer { |
| 2508 Source libB; | 2527 Source libB; |
| 2509 _AnalysisContextImplTest_test_applyChanges_removeContainer(this.libB); | 2528 _AnalysisContextImplTest_test_applyChanges_removeContainer(this.libB); |
| 2510 @override | 2529 @override |
| 2511 bool contains(Source source) => source == libB; | 2530 bool contains(Source source) => source == libB; |
| 2512 } | 2531 } |
| OLD | NEW |