Skip to content

Commit

Permalink
Merge pull request #3 from ba-st/assertions_raising
Browse files Browse the repository at this point in the history
Add support for configuring the error to raise
  • Loading branch information
mtabacman committed Feb 3, 2017
2 parents a23d791 + 5831de1 commit 99b6a4b
Show file tree
Hide file tree
Showing 50 changed files with 224 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ testConditionalChecking
rowCount := -15.

checkerBuilder
checking: [ :asserter | asserter enforce: [ rowCount notNil ] because: [ self fail ] onSuccess: [ :successAsserter | successAsserter enforce: [ rowCount positive ] because: [ explanation ] ] ].
checking: [ :asserter | asserter refuse: [ rowCount isNil ] because: [ self fail ] onSuccess: [ :successAsserter | successAsserter enforce: [ rowCount positive ] because: [ explanation ] ] ].

self
should: [ checkerBuilder buildAndCheck ]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
tests
testFailFastConfiguringErrorToRaise

| mathFailureExplanation |

mathFailureExplanation := 'An obvious math error'.
checkerBuilder
failFast;
raising: InstanceCreationFailed;
checking: [ :asserter |
asserter
enforce: [ 2 > 3 ] because: mathFailureExplanation;
enforce: [ self fail ] because: [ self fail ];
enforce: [ self fail ] because: [ self fail ] ].

self
should: [ checkerBuilder buildAndCheck ]
raise: InstanceCreationFailed
withExceptionDo: [ :exception |
self
assert: exception messageText equals: mathFailureExplanation;
assertCollection: exception failures hasSameElements: {mathFailureExplanation} ]
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ testSeveralConditionsButOnlyOneFailed
asserter
enforce: [ 4 > 3 ] because: [ self fail ];
enforce: [ 1 > 2 ] because: mathFailureExplanation;
enforce: [ #() isEmpty ] because: [ self fail ] ].
refuse: [ #() notEmpty ] because: [ self fail ] ].
self
should: [ checkerBuilder buildAndCheck ]
raise: AssertionFailed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
tests
testSeveralConditionsButOnlyOneFailedConfiguringErrorToRaise

| mathFailureExplanation |

mathFailureExplanation := 'An obvious math error'.
checkerBuilder
raising: InstanceCreationFailed;
checking: [ :asserter |
asserter
enforce: [ 4 > 3 ] because: [ self fail ];
enforce: [ 1 > 2 ] because: mathFailureExplanation;
enforce: [ #() isEmpty ] because: [ self fail ] ].
self
should: [ checkerBuilder buildAndCheck ]
raise: InstanceCreationFailed
withExceptionDo: [ :exception |
self
assert: exception messageText equals: mathFailureExplanation;
assertCollection: exception failures hasSameElements: {mathFailureExplanation} ]
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{
"instance" : {
"testWithoutFailures" : "GabrielOmarCotelli 1/26/2017 19:50",
"testConditionalChecking" : "GabrielOmarCotelli 1/26/2017 19:50",
"testConditionalChecking" : "GabrielOmarCotelli 2/1/2017 15:10",
"testSeveralConditionsButOnlyOneFailedConfiguringErrorToRaise" : "GabrielOmarCotelli 1/31/2017 21:06",
"testFailFastConfiguringErrorToRaise" : "GabrielOmarCotelli 1/31/2017 21:06",
"testConditionalCheckingWhenFirstConditionFails" : "GabrielOmarCotelli 1/26/2017 19:50",
"testSeveralConditionsButOnlyOneFailed" : "GabrielOmarCotelli 1/26/2017 19:50",
"testSeveralConditionsButOnlyOneFailed" : "GabrielOmarCotelli 2/1/2017 15:10",
"testSingleConditionFailure" : "GabrielOmarCotelli 1/26/2017 19:50",
"testFailFastPassingSomeConditions" : "GabrielOmarCotelli 1/26/2017 19:50",
"testFailFastInConditional" : "GabrielOmarCotelli 1/26/2017 19:50",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
tests
testEnforceOneFactFailing

| explanation |

explanation := 'A false statement'.
self should: [ AssertionChecker enforce: [ false ] because: explanation ] raise: AssertionFailed withExceptionDo: [ :exception | self assert: exception messageText equals: explanation ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
tests
testEnforceOneFactFailingRaisingError

| explanation |

explanation := 'A false statement'.
"For single fact checking any exception can be configured to be raised, but it's not the case when using multiple fact checking"
self should: [ AssertionChecker enforce: [ false ] because: explanation raising: Error ] raise: Error withExceptionDo: [ :exception | self assert: exception messageText equals: explanation ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
tests
testEnforceOneFactFailingRaisingNonDefaultException

| explanation |

explanation := 'A false statement'.

self
should: [ AssertionChecker enforce: [ false ] because: explanation raising: InstanceCreationFailed ]
raise: InstanceCreationFailed
withExceptionDo: [ :exception | self assert: exception messageText equals: explanation ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
tests
testEnforceOneFactNotFailing

self
shouldnt: [ AssertionChecker enforce: [ true ] because: [ self fail ] ] raise: AssertionFailed;
shouldnt: [ AssertionChecker enforce: [ true ] because: [ self fail ] raising: InstanceCreationFailed ] raise: InstanceCreationFailed

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
tests
testRefuseOneFactFailing

| explanation |

explanation := 'A false statement'.
self should: [ AssertionChecker refuse: [ true ] because: explanation ] raise: AssertionFailed withExceptionDo: [ :exception | self assert: exception messageText equals: explanation ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
tests
testRefuseOneFactNotFailing

self
shouldnt: [ AssertionChecker refuse: [ false ] because: [ self fail ] ] raise: AssertionFailed;
shouldnt: [ AssertionChecker refuse: [ false ] because: [ self fail ] raising: InstanceCreationFailed ] raise: InstanceCreationFailed
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
{
"instance" : {
"testJustCheckOneFactFailing" : "GabrielOmarCotelli 1/25/2017 22:01",
"testJustCheckOneFactNotFailing" : "GabrielOmarCotelli 1/25/2017 22:00"
"testEnforceOneFactNotFailing" : "GabrielOmarCotelli 1/31/2017 20:57",
"testRefuseOneFactFailing" : "GabrielOmarCotelli 2/1/2017 14:49",
"testEnforceOneFactFailing" : "GabrielOmarCotelli 1/31/2017 20:16",
"testRefuseOneFactNotFailing" : "GabrielOmarCotelli 2/1/2017 15:08",
"testEnforceOneFactFailingRaisingError" : "GabrielOmarCotelli 2/1/2017 14:22",
"testEnforceOneFactFailingRaisingNonDefaultException" : "GabrielOmarCotelli 1/31/2017 20:19"
},
"class" : { }
}
2 changes: 1 addition & 1 deletion source/Buoy-Tests.package/monticello.meta/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(name 'Buoy-Tests-GabrielOmarCotelli.3' message 'Add Holders ' id '21414a7c-6b1d-134d-a01a-dad169c438de' date '27 January 2017' time '6:47:13.88642 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Tests-GabrielOmarCotelli.2' message 'Renamed a method' id '4db25a31-cdbf-4d66-8e72-877e298b1b47' date '26 January 2017' time '7:51:46.200684 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Tests-GabrielOmarCotelli.1' message 'Renamed packages' id '714b9a68-e0b3-4b48-be06-7b3f27f4ce47' date '26 January 2017' time '7:29:43.673983 pm' author 'GabrielOmarCotelli' ancestors () stepChildren ())) stepChildren ())) stepChildren ())
(name 'Buoy-Tests-GabrielOmarCotelli.5' message 'Minor changes. Added support for refuse:.' id '76d04fb8-d53c-2348-b0b9-e090961b922e' date '1 February 2017' time '3:16:33.360533 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Tests-GabrielOmarCotelli.4' message 'Add test cases' id 'eebeab3b-1eda-4b0c-955e-450bc100b05a' date '31 January 2017' time '9:13:55.838186 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Tests-GabrielOmarCotelli.3' message 'Add Holders ' id '21414a7c-6b1d-134d-a01a-dad169c438de' date '27 January 2017' time '6:47:13.88642 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Tests-GabrielOmarCotelli.2' message 'Renamed a method' id '4db25a31-cdbf-4d66-8e72-877e298b1b47' date '26 January 2017' time '7:51:46.200684 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Tests-GabrielOmarCotelli.1' message 'Renamed packages' id '714b9a68-e0b3-4b48-be06-7b3f27f4ce47' date '26 January 2017' time '7:29:43.673983 pm' author 'GabrielOmarCotelli' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
4 changes: 4 additions & 0 deletions source/Buoy.package/Asserter.class/instance/asReverseFact..st
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
private
asReverseFact: aFact

^ [ aFact value not ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
configuring
refuse: aFact because: aStringOrBlock

self enforce: (self asReverseFact: aFact) because: aStringOrBlock
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
configuring
refuse: aFact because: anExplanationStringOrBlock onSuccess: aSuccessAction

self enforce: (self asReverseFact: aFact) because: anExplanationStringOrBlock onSuccess: aSuccessAction
7 changes: 5 additions & 2 deletions source/Buoy.package/Asserter.class/methodProperties.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
{
"instance" : {
"asReverseFact:" : "GabrielOmarCotelli 2/1/2017 14:44",
"enforce:because:" : "GabrielOmarCotelli 1/26/2017 19:50",
"enforce:because:onSuccess:" : "GabrielOmarCotelli 1/26/2017 19:50",
"initialize" : "GabrielOmarCotelli 1/25/2017 21:42",
"checkApplying:" : "GabrielOmarCotelli 1/25/2017 21:43",
"value:applying:" : "GabrielOmarCotelli 1/24/2017 21:46"
"initialize" : "GabrielOmarCotelli 1/25/2017 21:42",
"value:applying:" : "GabrielOmarCotelli 1/24/2017 21:46",
"refuse:because:onSuccess:" : "GabrielOmarCotelli 2/1/2017 14:44",
"refuse:because:" : "GabrielOmarCotelli 2/1/2017 14:44"
},
"class" : { }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
private
checkApplyingFailFastPolicyTo: asserter raising: errorToSignal

^ (self applying: (RaiseOnFirstAssertionFailurePolicy raising: errorToSignal) to: asserter) check
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
checking
enforce: aFact because: aStringOrBlockExplanation

^ self enforce: aFact because: aStringOrBlockExplanation raising: AssertionFailurePolicy defaultErrorToSignal
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
checking
enforce: aFact because: aStringOrBlockExplanation raising: errorToSignal

| asserter |

asserter := Asserter new.
asserter enforce: aFact because: aStringOrBlockExplanation.

^ self checkApplyingFailFastPolicyTo: asserter raising: errorToSignal

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
checking
refuse: aFact because: aStringOrBlockExplanation

^ self refuse: aFact because: aStringOrBlockExplanation raising: AssertionFailurePolicy defaultErrorToSignal
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
checking
refuse: aFact because: aStringOrBlockExplanation raising: errorToSignal

| asserter |

asserter := Asserter new.
asserter refuse: aFact because: aStringOrBlockExplanation.

^ self checkApplyingFailFastPolicyTo: asserter raising: errorToSignal
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@
"check" : "GabrielOmarCotelli 1/25/2017 21:50"
},
"class" : {
"enforce:because:" : "GabrielOmarCotelli 2/1/2017 14:09",
"checkApplyingFailFastPolicyTo:raising:" : "GabrielOmarCotelli 2/1/2017 14:48",
"enforce:because:raising:" : "GabrielOmarCotelli 2/1/2017 14:48",
"refuse:because:raising:" : "GabrielOmarCotelli 2/1/2017 14:47",
"applying:to:" : "GabrielOmarCotelli 1/25/2017 21:51",
"justCheck:because:" : "GabrielOmarCotelli 1/26/2017 19:50"
"refuse:because:" : "GabrielOmarCotelli 2/1/2017 14:45"
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
checking
build

^ AssertionChecker applying: failurePolicyFactory new to: asserter
^ AssertionChecker applying: (failurePolicyFactory raising: errorToSignal) to: asserter
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ initialize

super initialize.
asserter := Asserter new.
self raising: AssertionFailurePolicy defaultErrorToSignal.
failurePolicyFactory := CollectingAssertionFailuresPolicy
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
configuring
raising: anErrorToSignal

errorToSignal := anErrorToSignal
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"instance" : {
"build" : "GabrielOmarCotelli 1/25/2017 21:52",
"build" : "GabrielOmarCotelli 2/1/2017 14:11",
"checking:" : "GabrielOmarCotelli 1/23/2017 17:14",
"initialize" : "GabrielOmarCotelli 1/24/2017 21:29",
"initialize" : "GabrielOmarCotelli 2/1/2017 14:11",
"raising:" : "GabrielOmarCotelli 2/1/2017 14:11",
"buildAndCheck" : "GabrielOmarCotelli 1/25/2017 21:52",
"failFast" : "GabrielOmarCotelli 1/24/2017 21:29"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"classvars" : [ ],
"instvars" : [
"asserter",
"failurePolicyFactory"
"failurePolicyFactory",
"errorToSignal"
],
"name" : "AssertionCheckerBuilder",
"type" : "normal"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Accessing
defaultErrorToSignal

^ AssertionFailed
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Instance Creation
raising: anErrorClass

^ self subclassResponsibility
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
"applyTo:" : "GabrielOmarCotelli 1/24/2017 21:23",
"assertionFailedBecause:" : "GabrielOmarCotelli 1/24/2017 21:27"
},
"class" : { }
"class" : {
"defaultErrorToSignal" : "GabrielOmarCotelli 2/1/2017 14:09",
"raising:" : "GabrielOmarCotelli 1/31/2017 21:02"
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Instance Creation
raising: anErrorClass

^ self new initializeRaising: anErrorClass
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ applying
applyTo: anAsserter

super applyTo: anAsserter.
failures ifNotEmpty: [ AssertionFailed signalAll: failures ]
failures ifNotEmpty: [ errorClass signalAll: failures ]

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
initialization
initializeRaising: anErrorClass

errorClass := anErrorClass.
failures := OrderedCollection new
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"instance" : {
"initialize" : "GabrielOmarCotelli 1/24/2017 21:20",
"applyTo:" : "GabrielOmarCotelli 1/25/2017 21:29",
"initializeRaising:" : "GabrielOmarCotelli 1/31/2017 21:03",
"applyTo:" : "GabrielOmarCotelli 1/31/2017 21:03",
"assertionFailedBecause:" : "GabrielOmarCotelli 1/24/2017 21:28"
},
"class" : {
"new" : "GabrielOmarCotelli 1/24/2017 21:20"
"raising:" : "GabrielOmarCotelli 1/31/2017 21:10"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"pools" : [ ],
"classvars" : [ ],
"instvars" : [
"failures"
"failures",
"errorClass"
],
"name" : "CollectingAssertionFailuresPolicy",
"type" : "normal"
Expand Down
1 change: 1 addition & 0 deletions source/Buoy.package/InstanceCreationFailed.class/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I'm an exception expecting to be raised when someone tries to create an invalid instance
Loading

0 comments on commit 99b6a4b

Please sign in to comment.