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 @TestOn("vm") | 5 @TestOn("vm") |
6 library dart_style.test.formatter_test; | 6 library dart_style.test.formatter_test; |
7 | 7 |
8 import 'dart:io'; | 8 import 'dart:io'; |
9 import 'dart:mirrors'; | 9 import 'dart:mirrors'; |
10 | 10 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 .path); | 142 .path); |
143 | 143 |
144 var entries = new Directory(p.join(testDir, name)) | 144 var entries = new Directory(p.join(testDir, name)) |
145 .listSync(recursive: true, followLinks: false); | 145 .listSync(recursive: true, followLinks: false); |
146 for (var entry in entries) { | 146 for (var entry in entries) { |
147 if (!entry.path.endsWith(".stmt") && !entry.path.endsWith(".unit")) { | 147 if (!entry.path.endsWith(".stmt") && !entry.path.endsWith(".unit")) { |
148 continue; | 148 continue; |
149 } | 149 } |
150 | 150 |
151 group("$name ${p.basename(entry.path)}", () { | 151 group("$name ${p.basename(entry.path)}", () { |
152 var lines = (entry as File).readAsLinesSync(); | 152 // Explicitly create a File, in case the entry is a Link. |
| 153 var lines = new File(entry.path).readAsLinesSync(); |
153 | 154 |
154 // The first line may have a "|" to indicate the page width. | 155 // The first line may have a "|" to indicate the page width. |
155 var pageWidth; | 156 var pageWidth; |
156 if (lines[0].endsWith("|")) { | 157 if (lines[0].endsWith("|")) { |
157 pageWidth = lines[0].indexOf("|"); | 158 pageWidth = lines[0].indexOf("|"); |
158 lines = lines.skip(1).toList(); | 159 lines = lines.skip(1).toList(); |
159 } | 160 } |
160 | 161 |
161 var i = 0; | 162 var i = 0; |
162 while (i < lines.length) { | 163 while (i < lines.length) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 new DartFormatter(pageWidth: pageWidth, indent: leadingIndent); | 201 new DartFormatter(pageWidth: pageWidth, indent: leadingIndent); |
201 | 202 |
202 var actual = formatter.formatSource(inputCode); | 203 var actual = formatter.formatSource(inputCode); |
203 | 204 |
204 // The test files always put a newline at the end of the expectation. | 205 // The test files always put a newline at the end of the expectation. |
205 // Statements from the formatter (correctly) don't have that, so add | 206 // Statements from the formatter (correctly) don't have that, so add |
206 // one to line up with the expected result. | 207 // one to line up with the expected result. |
207 var actualText = actual.text; | 208 var actualText = actual.text; |
208 if (!isCompilationUnit) actualText += "\n"; | 209 if (!isCompilationUnit) actualText += "\n"; |
209 | 210 |
210 expect(actualText, equals(expected.text)); | 211 // Fail with an explicit message because it's easier to read than |
| 212 // the matcher output. |
| 213 if (actualText != expected.text) { |
| 214 fail("Formatting did not match expectation. Expected:\n" |
| 215 "${expected.text}\nActual:\n$actualText"); |
| 216 } |
| 217 |
211 expect(actual.selectionStart, equals(expected.selectionStart)); | 218 expect(actual.selectionStart, equals(expected.selectionStart)); |
212 expect(actual.selectionLength, equals(expected.selectionLength)); | 219 expect(actual.selectionLength, equals(expected.selectionLength)); |
213 }); | 220 }); |
214 } | 221 } |
215 }); | 222 }); |
216 } | 223 } |
217 } | 224 } |
218 | 225 |
219 /// Given a source string that contains ‹ and › to indicate a selection, returns | 226 /// Given a source string that contains ‹ and › to indicate a selection, returns |
220 /// a [SourceCode] with the text (with the selection markers removed) and the | 227 /// a [SourceCode] with the text (with the selection markers removed) and the |
221 /// correct selection range. | 228 /// correct selection range. |
222 SourceCode _extractSelection(String source, {bool isCompilationUnit: false}) { | 229 SourceCode _extractSelection(String source, {bool isCompilationUnit: false}) { |
223 var start = source.indexOf("‹"); | 230 var start = source.indexOf("‹"); |
224 source = source.replaceAll("‹", ""); | 231 source = source.replaceAll("‹", ""); |
225 | 232 |
226 var end = source.indexOf("›"); | 233 var end = source.indexOf("›"); |
227 source = source.replaceAll("›", ""); | 234 source = source.replaceAll("›", ""); |
228 | 235 |
229 return new SourceCode(source, | 236 return new SourceCode(source, |
230 isCompilationUnit: isCompilationUnit, | 237 isCompilationUnit: isCompilationUnit, |
231 selectionStart: start == -1 ? null : start, | 238 selectionStart: start == -1 ? null : start, |
232 selectionLength: end == -1 ? null : end - start); | 239 selectionLength: end == -1 ? null : end - start); |
233 } | 240 } |
OLD | NEW |