@@ -2,9 +2,11 @@ package `in`.rcard.assertj.arrowcore
22
33import arrow.core.raise.Raise
44import `in`.rcard.assertj.arrowcore.errors.RaiseShouldFailButSucceeds.Companion.shouldFailButSucceedsWith
5+ import `in`.rcard.assertj.arrowcore.errors.RaiseShouldFailButSucceeds.Companion.shouldFailWithButSucceedsWith
56import `in`.rcard.assertj.arrowcore.errors.RaiseShouldFailWith.Companion.shouldFailWith
67import `in`.rcard.assertj.arrowcore.errors.RaiseShouldSucceedButFailed.Companion.shouldSucceedButFailed
78import `in`.rcard.assertj.arrowcore.errors.RaiseShouldSucceedWith.Companion.shouldSucceedWith
9+ import `in`.rcard.assertj.arrowcore.errors.RaiseShouldSucceedWithButFailed.Companion.shouldSucceedWithButFailed
810import org.assertj.core.api.AbstractAssert
911import org.assertj.core.internal.ComparisonStrategy
1012import org.assertj.core.internal.StandardComparisonStrategy
@@ -33,104 +35,104 @@ abstract class AbstractRaiseAssert<
3335 * Verifies that the function in the [Raise] context succeeds with the given value.
3436 * @param expectedValue the expected value returned by the function.
3537 */
36- fun succeedsWith (expectedValue : VALUE ) {
38+ fun succeedsWith (expectedValue : VALUE ) =
3739 when (actual) {
3840 is RaiseResult .Failure <ERROR > -> {
3941 throwAssertionError(
40- shouldSucceedButFailed( (actual as RaiseResult .Failure <ERROR >).error),
42+ shouldSucceedWithButFailed(expectedValue, (actual as RaiseResult .Failure <ERROR >).error),
4143 )
4244 }
4345
4446 is RaiseResult .FailureWithException -> {
45- // TODO: Add a specific error message
47+ throw ( actual as RaiseResult . FailureWithException ).exception
4648 }
4749
4850 is RaiseResult .Success <VALUE > -> {
4951 val actualValue = (actual as RaiseResult .Success <VALUE >).value
5052 if (! comparisonStrategy.areEqual(actualValue, expectedValue)) {
5153 throwAssertionError(shouldSucceedWith(expectedValue, actualValue))
54+ } else {
55+ // Nothing to do
5256 }
5357 }
5458 }
55- }
5659
5760 /* *
5861 * Verifies that the function in the [Raise] context succeeded. No check on the value returned by the function is
5962 * performed.
6063 *
6164 * @see succeedsWith
6265 */
63- fun succeeds () {
66+ fun succeeds () =
6467 when (actual) {
6568 is RaiseResult .Failure <ERROR > ->
6669 throwAssertionError(
6770 shouldSucceedButFailed((actual as RaiseResult .Failure <ERROR >).error),
6871 )
6972
7073 is RaiseResult .FailureWithException -> {
71- // TODO: Add a specific error message
74+ throw ( actual as RaiseResult . FailureWithException ).exception
7275 }
7376
7477 is RaiseResult .Success <VALUE > -> {
7578 // Nothing to do
7679 }
7780 }
78- }
7981
8082 /* *
8183 * Verifies that the function in the [Raise] context fails with the given error.
8284 * @param expectedError the expected error raised by the function.
8385 */
84- fun raises (expectedError : ERROR ) {
86+ fun raises (expectedError : ERROR ) =
8587 when (actual) {
8688 is RaiseResult .Failure <ERROR > -> {
8789 val actualError = (actual as RaiseResult .Failure <ERROR >).error
8890 if (! comparisonStrategy.areEqual(actualError, expectedError)) {
8991 throwAssertionError(shouldFailWith(expectedError, actualError))
92+ } else {
93+ // Nothing to do
9094 }
9195 }
9296
9397 is RaiseResult .FailureWithException -> {
94- // TODO: Add a specific error message
98+ throw ( actual as RaiseResult . FailureWithException ).exception
9599 }
96100
97101 is RaiseResult .Success <VALUE > -> {
98102 throwAssertionError(
99- shouldFailButSucceedsWith( (actual as RaiseResult .Success <VALUE >).value),
103+ shouldFailWithButSucceedsWith(expectedError, (actual as RaiseResult .Success <VALUE >).value),
100104 )
101105 }
102106 }
103- }
104107
105108 /* *
106109 * Verifies that the function in the [Raise] context fails, no matter the type of the logical error.
107110 *
108111 * @see raises
109112 */
110- fun fails () {
113+ fun fails () =
111114 when (actual) {
112115 is RaiseResult .Failure <ERROR > -> {
113116 // Nothing to do
114117 }
115118
116119 is RaiseResult .FailureWithException -> {
117- // TODO: Add a specific error message
120+ throw ( actual as RaiseResult . FailureWithException ).exception
118121 }
119122
120123 is RaiseResult .Success ->
121124 throwAssertionError(
122125 shouldFailButSucceedsWith((actual as RaiseResult .Success <VALUE >).value),
123126 )
124127 }
125- }
126128}
127129
128- sealed interface RaiseResult <ERROR : Any , VALUE : Any > {
129- data class Success <VALUE : Any >(
130+ sealed interface RaiseResult <out ERROR : Any , out VALUE : Any > {
131+ data class Success <out VALUE : Any >(
130132 val value : VALUE ,
131133 ) : RaiseResult<Nothing, VALUE>
132134
133- data class Failure <ERROR : Any >(
135+ data class Failure <out ERROR : Any >(
134136 val error : ERROR ,
135137 ) : RaiseResult<ERROR, Nothing>
136138
0 commit comments