| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 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. |
| 4 |
| 5 library test.src.task.incremental_element_builder_test; |
| 6 |
| 7 import 'package:analyzer/src/generated/ast.dart'; |
| 8 import 'package:analyzer/src/generated/element.dart'; |
| 9 import 'package:analyzer/src/generated/source.dart'; |
| 10 import 'package:analyzer/src/task/incremental_element_builder.dart'; |
| 11 import 'package:unittest/unittest.dart'; |
| 12 |
| 13 import '../../reflective_tests.dart'; |
| 14 import '../context/abstract_context.dart'; |
| 15 |
| 16 main() { |
| 17 groupSep = ' | '; |
| 18 runReflectiveTests(IncrementalCompilationUnitElementBuilderTest); |
| 19 } |
| 20 |
| 21 @reflectiveTest |
| 22 class IncrementalCompilationUnitElementBuilderTest extends AbstractContextTest { |
| 23 Source source; |
| 24 String oldCode; |
| 25 CompilationUnit oldUnit; |
| 26 |
| 27 String newCode; |
| 28 CompilationUnit newUnit; |
| 29 |
| 30 String getNodeText(AstNode node) { |
| 31 return newCode.substring(node.offset, node.end); |
| 32 } |
| 33 |
| 34 test_directives_add() { |
| 35 _buildOldUnit(r''' |
| 36 library test; |
| 37 import 'dart:math'; |
| 38 '''); |
| 39 _buildNewUnit(r''' |
| 40 library test; |
| 41 import 'dart:async'; |
| 42 import 'dart:math'; |
| 43 '''); |
| 44 var oldDirectives = oldUnit.directives; |
| 45 var newDirectives = newUnit.directives; |
| 46 { |
| 47 Directive newNode = newDirectives[0]; |
| 48 expect(newNode, same(oldDirectives[0])); |
| 49 expect(getNodeText(newNode), "library test;"); |
| 50 LibraryElement element = newNode.element; |
| 51 expect(element, isNotNull); |
| 52 expect(element.nameOffset, newCode.indexOf('test;')); |
| 53 } |
| 54 { |
| 55 Directive newNode = newDirectives[1]; |
| 56 expect(getNodeText(newNode), "import 'dart:async';"); |
| 57 ImportElement element = newNode.element; |
| 58 expect(element, isNull); |
| 59 } |
| 60 { |
| 61 Directive newNode = newDirectives[2]; |
| 62 expect(newNode, same(oldDirectives[1])); |
| 63 expect(getNodeText(newNode), "import 'dart:math';"); |
| 64 ImportElement element = newNode.element; |
| 65 expect(element, isNotNull); |
| 66 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); |
| 67 } |
| 68 } |
| 69 |
| 70 test_directives_remove() { |
| 71 _buildOldUnit(r''' |
| 72 library test; |
| 73 import 'dart:async'; |
| 74 import 'dart:math'; |
| 75 '''); |
| 76 _buildNewUnit(r''' |
| 77 library test; |
| 78 import 'dart:math'; |
| 79 '''); |
| 80 var oldDirectives = oldUnit.directives; |
| 81 var newDirectives = newUnit.directives; |
| 82 { |
| 83 Directive newNode = newDirectives[0]; |
| 84 expect(newNode, same(oldDirectives[0])); |
| 85 expect(getNodeText(newNode), "library test;"); |
| 86 LibraryElement element = newNode.element; |
| 87 expect(element, isNotNull); |
| 88 expect(element.nameOffset, newCode.indexOf('test;')); |
| 89 } |
| 90 { |
| 91 Directive newNode = newDirectives[1]; |
| 92 expect(newNode, same(oldDirectives[2])); |
| 93 expect(getNodeText(newNode), "import 'dart:math';"); |
| 94 ImportElement element = newNode.element; |
| 95 expect(element, isNotNull); |
| 96 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); |
| 97 } |
| 98 } |
| 99 |
| 100 test_directives_reorder() { |
| 101 _buildOldUnit(r''' |
| 102 library test; |
| 103 import 'dart:math' as m; |
| 104 import 'dart:async'; |
| 105 '''); |
| 106 _buildNewUnit(r''' |
| 107 library test; |
| 108 import 'dart:async'; |
| 109 import 'dart:math' as m; |
| 110 '''); |
| 111 var oldDirectives = oldUnit.directives; |
| 112 var newDirectives = newUnit.directives; |
| 113 { |
| 114 Directive newNode = newDirectives[0]; |
| 115 expect(newNode, same(oldDirectives[0])); |
| 116 expect(getNodeText(newNode), "library test;"); |
| 117 LibraryElement element = newNode.element; |
| 118 expect(element, isNotNull); |
| 119 expect(element.nameOffset, newCode.indexOf('test;')); |
| 120 } |
| 121 { |
| 122 Directive newNode = newDirectives[1]; |
| 123 expect(newNode, same(oldDirectives[2])); |
| 124 expect(getNodeText(newNode), "import 'dart:async';"); |
| 125 ImportElement element = newNode.element; |
| 126 expect(element, isNotNull); |
| 127 expect(element.nameOffset, newCode.indexOf("import 'dart:async';")); |
| 128 } |
| 129 { |
| 130 Directive newNode = newDirectives[2]; |
| 131 expect(newNode, same(oldDirectives[1])); |
| 132 expect(getNodeText(newNode), "import 'dart:math' as m;"); |
| 133 ImportElement element = newNode.element; |
| 134 expect(element, isNotNull); |
| 135 expect(element.nameOffset, newCode.indexOf("import 'dart:math' as m;")); |
| 136 expect(element.prefix.nameOffset, newCode.indexOf("m;")); |
| 137 } |
| 138 } |
| 139 |
| 140 test_directives_sameOrder_insertSpaces() { |
| 141 _buildOldUnit(r''' |
| 142 library test; |
| 143 import 'dart:async'; |
| 144 import 'dart:math'; |
| 145 '''); |
| 146 _buildNewUnit(r''' |
| 147 library test; |
| 148 |
| 149 import 'dart:async' ; |
| 150 import 'dart:math'; |
| 151 '''); |
| 152 var oldDirectives = oldUnit.directives; |
| 153 var newDirectives = newUnit.directives; |
| 154 { |
| 155 Directive newNode = newDirectives[0]; |
| 156 expect(newNode, same(oldDirectives[0])); |
| 157 expect(getNodeText(newNode), "library test;"); |
| 158 LibraryElement element = newNode.element; |
| 159 expect(element, isNotNull); |
| 160 expect(element.nameOffset, newCode.indexOf('test;')); |
| 161 } |
| 162 { |
| 163 Directive newNode = newDirectives[1]; |
| 164 expect(newNode, same(oldDirectives[1])); |
| 165 expect(getNodeText(newNode), "import 'dart:async' ;"); |
| 166 ImportElement element = newNode.element; |
| 167 expect(element, isNotNull); |
| 168 expect(element.nameOffset, newCode.indexOf("import 'dart:async' ;")); |
| 169 } |
| 170 { |
| 171 Directive newNode = newDirectives[2]; |
| 172 expect(newNode, same(oldDirectives[2])); |
| 173 expect(getNodeText(newNode), "import 'dart:math';"); |
| 174 ImportElement element = newNode.element; |
| 175 expect(element, isNotNull); |
| 176 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); |
| 177 } |
| 178 } |
| 179 |
| 180 test_directives_sameOrder_removeSpaces() { |
| 181 _buildOldUnit(r''' |
| 182 library test; |
| 183 |
| 184 import 'dart:async' ; |
| 185 import 'dart:math'; |
| 186 '''); |
| 187 _buildNewUnit(r''' |
| 188 library test; |
| 189 import 'dart:async'; |
| 190 import 'dart:math'; |
| 191 '''); |
| 192 var oldDirectives = oldUnit.directives; |
| 193 var newDirectives = newUnit.directives; |
| 194 { |
| 195 Directive newNode = newDirectives[0]; |
| 196 expect(newNode, same(oldDirectives[0])); |
| 197 expect(getNodeText(newNode), "library test;"); |
| 198 LibraryElement element = newNode.element; |
| 199 expect(element, isNotNull); |
| 200 expect(element.nameOffset, newCode.indexOf('test;')); |
| 201 } |
| 202 { |
| 203 Directive newNode = newDirectives[1]; |
| 204 expect(newNode, same(oldDirectives[1])); |
| 205 expect(getNodeText(newNode), "import 'dart:async';"); |
| 206 ImportElement element = newNode.element; |
| 207 expect(element, isNotNull); |
| 208 expect(element.nameOffset, newCode.indexOf("import 'dart:async';")); |
| 209 } |
| 210 { |
| 211 Directive newNode = newDirectives[2]; |
| 212 expect(newNode, same(oldDirectives[2])); |
| 213 expect(getNodeText(newNode), "import 'dart:math';"); |
| 214 ImportElement element = newNode.element; |
| 215 expect(element, isNotNull); |
| 216 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); |
| 217 } |
| 218 } |
| 219 |
| 220 void _buildNewUnit(String newCode) { |
| 221 this.newCode = newCode; |
| 222 context.setContents(source, newCode); |
| 223 newUnit = context.parseCompilationUnit(source); |
| 224 new IncrementalCompilationUnitElementBuilder(oldUnit, newUnit).build(); |
| 225 } |
| 226 |
| 227 void _buildOldUnit(String oldCode) { |
| 228 this.oldCode = oldCode; |
| 229 source = newSource('/test.dart', oldCode); |
| 230 oldUnit = context.resolveCompilationUnit2(source, source); |
| 231 } |
| 232 } |
| OLD | NEW |