Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 /** | |
| 6 * This is the main assertion function, and can be used in two ways: | |
| 7 * | |
| 8 * expect(value, matcher, reason) | |
|
Bob Nystrom
2012/05/30 23:23:51
Do five spaces here and elsewhere. The first one i
| |
| 9 * | |
| 10 * or: | |
| 11 * | |
| 12 * expect(BooleanConditon, reason) | |
| 13 * | |
| 14 * The reason is optional and in the first case typically not | |
| 15 * supplied, as a reason can be generated from the matcher. | |
| 16 * | |
| 17 * In the first form expect() asserts that the value [arg1] satisfies | |
| 18 * the matcher [arg2] for the reason [arg3]. In the second form expect() | |
|
Bob Nystrom
2012/05/30 23:23:51
Do we use the second form anywhere? If not, we cou
gram
2012/06/01 17:33:15
Done.
| |
| 19 * asserts that the Boolean condition [arg1] is true for reason [arg2]. | |
| 20 * | |
| 21 * If the assertion fails, then the default behavior is to throw an | |
| 22 * ExpectException, but this behavior can be changed by calling | |
|
Bob Nystrom
2012/05/30 23:23:51
Put square brackets around ExpectException, config
gram
2012/06/01 17:33:15
Done.
| |
| 23 * configureExpectHandler and providing an alternative handler that | |
| 24 * implements the IFailureHandler interface. | |
| 25 * | |
| 26 * expect is a 3rd generation assertion mechanism, drawing | |
|
Bob Nystrom
2012/05/30 23:23:51
`expect()`
gram
2012/06/01 17:33:15
Done.
| |
| 27 * inspiration from Hamcrest and Ladislav Thon's matcher | |
|
Bob Nystrom
2012/05/30 23:23:51
Make these markdown links:
[Hamcrest][] and Ladis
gram
2012/06/01 17:33:15
Done.
Bob Nystrom
2012/06/01 18:22:22
Almost done. :) The markdown syntax is very specif
| |
| 28 * library. | |
| 29 * | |
| 30 * See http://en.wikipedia.org/wiki/Hamcrest | |
| 31 * http://http://code.google.com/p/hamcrest/ | |
| 32 * https://github.com/Ladicek/dart-matchers | |
| 33 */ | |
| 34 | |
| 35 void expect(arg1, [arg2=null, String arg3='']) { | |
| 36 if (arg2 is IMatcher) { | |
| 37 _assertMatch(arg1, arg2, arg3); | |
| 38 } else { | |
| 39 _assertBool(arg1, arg2); | |
| 40 } | |
| 41 } | |
| 42 | |
| 43 // _assertMatch handles expect() calls that use a matcher. | |
|
Bob Nystrom
2012/05/30 23:23:51
This comment is probably not necessary.
gram
2012/06/01 17:33:15
Done.
| |
| 44 // It just checks if the matcher matches, and if not, builds up | |
| 45 // an error message that then calls the failure handler. | |
| 46 void _assertMatch(actual, IMatcher matcher, String reason) { | |
| 47 if (!matcher.matches(actual)) { | |
| 48 // Make sure we have a failure handler and formatter configured | |
| 49 configureExpectHandler(_assertFailureHandler); | |
| 50 configureExpectFormatter(_assertErrorFormatter); | |
| 51 _assertFailureHandler.failMatch(actual, matcher, reason); | |
| 52 } | |
| 53 } | |
| 54 | |
| 55 // assertBool handles expect() calls that use a Boolean condition. | |
| 56 void _assertBool(assertion, [String reason=null]) { | |
|
Bob Nystrom
2012/05/30 23:23:51
Type annotate assertion.
gram
2012/06/01 17:33:15
Done.
| |
| 57 if (!assertion) { | |
| 58 if (reason == null) { | |
| 59 reason = 'Assertion failed'; | |
| 60 } | |
| 61 // Make sure we have a failure handler configured | |
| 62 configureExpectHandler(_assertFailureHandler); | |
| 63 _assertFailureHandler.fail(reason); | |
| 64 } | |
| 65 } | |
| 66 | |
| 67 // wrapMatcher takes an argument and returns a equivalent matcher. | |
|
Bob Nystrom
2012/05/30 23:23:51
"Takes an argument and returns an equivalent match
gram
2012/06/01 17:33:15
Done.
| |
| 68 // If the argument is already a matcher this does nothing, else it | |
| 69 // generates a equals matcher for the argument. | |
|
Bob Nystrom
2012/05/30 23:23:51
"a equals" -> "an equals"
gram
2012/06/01 17:33:15
Done.
| |
| 70 IMatcher wrapMatcher(x) => ((x is IMatcher) ? x : equals(x)); | |
|
Bob Nystrom
2012/05/30 23:23:51
What is this used for?
gram
2012/06/01 17:33:15
It allows matchers that themselves expect matcher
| |
| 71 | |
| 72 //----------------------------------------------------------- | |
| 73 // The reference to the failure handler for failed asserts | |
|
Bob Nystrom
2012/05/30 23:23:51
This comment doesn't add much.
gram
2012/06/01 17:33:15
Done.
| |
| 74 IFailureHandler _assertFailureHandler = null; | |
| 75 | |
| 76 // The default failure handler that throws ExpectExceptions | |
| 77 class DefaultFailureHandler implements IFailureHandler { | |
| 78 void fail(String reason) { | |
| 79 throw new ExpectException(reason); | |
| 80 } | |
| 81 void failMatch(actual, IMatcher matcher, String reason) { | |
| 82 fail(_assertErrorFormatter.format(actual, matcher, reason)); | |
| 83 } | |
| 84 } | |
| 85 | |
| 86 /** | |
| 87 * Changes or resets to the default the failure handler for expect() | |
| 88 * [handler] is a reference to the new handler (that must implement | |
| 89 * IFailureHandler); if this is omitted or null then the failure handler | |
|
Bob Nystrom
2012/05/30 23:23:51
Remove "(that must implement IFailureHandler)" Tha
gram
2012/06/01 17:33:15
Done.
| |
| 90 * is reset to the default, which throws ExpectExceptions on expect() | |
|
Bob Nystrom
2012/05/30 23:23:51
Square brackets around [ExpectException]s and [exp
gram
2012/06/01 17:33:15
Done.
| |
| 91 * assertion failures. | |
| 92 */ | |
| 93 void configureExpectHandler([IFailureHandler handler = null]) { | |
|
Bob Nystrom
2012/05/30 23:23:51
Why make this optional?
gram
2012/06/01 17:33:15
For the reset to default case.
| |
| 94 if (handler == null) { | |
| 95 handler = new DefaultFailureHandler(); | |
| 96 } | |
| 97 _assertFailureHandler = handler; | |
| 98 } | |
| 99 | |
| 100 //------------------------------------------------------------------ | |
| 101 // The reference to the error message formatter for failed asserts | |
| 102 IErrorFormatter _assertErrorFormatter = null; | |
|
Bob Nystrom
2012/05/30 23:23:51
This comment doesn't add much.
gram
2012/06/01 17:33:15
Done.
| |
| 103 | |
| 104 // The default error formatter implementation | |
| 105 class DefaultErrorFormatter implements IErrorFormatter { | |
| 106 String format(actual, IMatcher matcher, String reason) { | |
| 107 var description = new StringDescription(); | |
| 108 description.append(reason). | |
| 109 append('\nExpected: '). | |
|
Bob Nystrom
2012/05/30 23:23:51
Indent these +4.
gram
2012/06/01 17:33:15
Done.
| |
| 110 appendDescriptionOf(matcher). | |
| 111 append('\n but: '); | |
| 112 matcher.describeMismatch(actual, description); | |
| 113 description.append('\n'); | |
| 114 return description.toString(); | |
| 115 } | |
| 116 } | |
| 117 | |
| 118 /** | |
| 119 * Changes or resets to default the failure message formatter for expect(). | |
| 120 * [formatter] is a reference to the new formatter (that must implement | |
|
Bob Nystrom
2012/05/30 23:23:51
Remove parenthetical.
gram
2012/06/01 17:33:15
Done.
| |
| 121 * IFailureFormatter); if this is omitted or null then the failure formatter | |
| 122 * is reset to the default. | |
| 123 */ | |
| 124 void configureExpectFormatter([IErrorFormatter formatter = null]) { | |
| 125 if (formatter == null) { | |
| 126 formatter = new DefaultErrorFormatter(); | |
| 127 } | |
| 128 _assertErrorFormatter = formatter; | |
| 129 } | |
| 130 | |
| OLD | NEW |