OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 matcher.core_matchers; | 5 library matcher.core_matchers; |
6 | 6 |
7 import 'description.dart'; | 7 import 'description.dart'; |
8 import 'interfaces.dart'; | 8 import 'interfaces.dart'; |
9 import 'util.dart'; | 9 import 'util.dart'; |
10 | 10 |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 Description describe(Description description) => | 290 Description describe(Description description) => |
291 description.addDescriptionOf(_value); | 291 description.addDescriptionOf(_value); |
292 | 292 |
293 Description describeMismatch( | 293 Description describeMismatch( |
294 item, Description mismatchDescription, Map matchState, bool verbose) { | 294 item, Description mismatchDescription, Map matchState, bool verbose) { |
295 if (item is! String) { | 295 if (item is! String) { |
296 return mismatchDescription.addDescriptionOf(item).add('is not a string'); | 296 return mismatchDescription.addDescriptionOf(item).add('is not a string'); |
297 } else { | 297 } else { |
298 var buff = new StringBuffer(); | 298 var buff = new StringBuffer(); |
299 buff.write('is different.'); | 299 buff.write('is different.'); |
300 var escapedItem = _escape(item); | 300 var escapedItem = escape(item); |
301 var escapedValue = _escape(_value); | 301 var escapedValue = escape(_value); |
302 int minLength = escapedItem.length < escapedValue.length | 302 int minLength = escapedItem.length < escapedValue.length |
303 ? escapedItem.length | 303 ? escapedItem.length |
304 : escapedValue.length; | 304 : escapedValue.length; |
305 int start; | 305 int start; |
306 for (start = 0; start < minLength; start++) { | 306 for (start = 0; start < minLength; start++) { |
307 if (escapedValue.codeUnitAt(start) != escapedItem.codeUnitAt(start)) { | 307 if (escapedValue.codeUnitAt(start) != escapedItem.codeUnitAt(start)) { |
308 break; | 308 break; |
309 } | 309 } |
310 } | 310 } |
311 if (start == minLength) { | 311 if (start == minLength) { |
(...skipping 15 matching lines...) Expand all Loading... |
327 _writeTrailing(buff, escapedItem, start); | 327 _writeTrailing(buff, escapedItem, start); |
328 buff.write('\n '); | 328 buff.write('\n '); |
329 for (int i = (start > 10 ? 14 : start); i > 0; i--) buff.write(' '); | 329 for (int i = (start > 10 ? 14 : start); i > 0; i--) buff.write(' '); |
330 buff.write('^\n Differ at offset $start'); | 330 buff.write('^\n Differ at offset $start'); |
331 } | 331 } |
332 | 332 |
333 return mismatchDescription.replace(buff.toString()); | 333 return mismatchDescription.replace(buff.toString()); |
334 } | 334 } |
335 } | 335 } |
336 | 336 |
337 static String _escape(String s) => | |
338 s.replaceAll('\n', '\\n').replaceAll('\r', '\\r').replaceAll('\t', '\\t'); | |
339 | |
340 static void _writeLeading(StringBuffer buff, String s, int start) { | 337 static void _writeLeading(StringBuffer buff, String s, int start) { |
341 if (start > 10) { | 338 if (start > 10) { |
342 buff.write('... '); | 339 buff.write('... '); |
343 buff.write(s.substring(start - 10, start)); | 340 buff.write(s.substring(start - 10, start)); |
344 } else { | 341 } else { |
345 buff.write(s.substring(0, start)); | 342 buff.write(s.substring(0, start)); |
346 } | 343 } |
347 } | 344 } |
348 | 345 |
349 static void _writeTrailing(StringBuffer buff, String s, int start) { | 346 static void _writeTrailing(StringBuffer buff, String s, int start) { |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 .addDescriptionOf(matchState['feature']); | 644 .addDescriptionOf(matchState['feature']); |
648 var innerDescription = new StringDescription(); | 645 var innerDescription = new StringDescription(); |
649 _matcher.describeMismatch( | 646 _matcher.describeMismatch( |
650 matchState['feature'], innerDescription, matchState['state'], verbose); | 647 matchState['feature'], innerDescription, matchState['state'], verbose); |
651 if (innerDescription.length > 0) { | 648 if (innerDescription.length > 0) { |
652 mismatchDescription.add(' which ').add(innerDescription.toString()); | 649 mismatchDescription.add(' which ').add(innerDescription.toString()); |
653 } | 650 } |
654 return mismatchDescription; | 651 return mismatchDescription; |
655 } | 652 } |
656 } | 653 } |
OLD | NEW |