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