| 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 |