| 
					
				 | 
			
			
				@@ -34,29 +34,19 @@ smalltalk.ResultAnnouncement); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-smalltalk.addClass('RunningTestContext', smalltalk.Object, ['finished', 'testCase', 'result', 'step'], 'SUnit'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addClass('RunningTestContext', smalltalk.Object, ['finished', 'testCase', 'result'], 'SUnit'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-"_exception_ifNotAsync_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+"_exception_do_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-selector: "exception:ifNotAsync:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "exception:do:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 category: 'private', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (anException,aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$1=smalltalk.send(self["@testCase"],"_isAsync",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if(smalltalk.assert($1)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-self["@step"]=(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-smalltalk.send(self["@testCase"],"_finished",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.send(anException,"_signal",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-self["@step"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.send(aBlock,"_value",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["anException", "aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "exception: anException ifNotAsync: aBlock\x0a\x09testCase isAsync\x0a\x09\x09ifTrue: [ step := [ testCase finished. anException signal ]]\x0a\x09\x09ifFalse: [ aBlock value ]\x0a", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-messageSends: ["ifTrue:ifFalse:", "finished", "signal", "value", "isAsync"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "exception: anException do: aBlock\x0a\x09aBlock value\x0a", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["value"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.RunningTestContext); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,50 +58,77 @@ selector: "execute:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 category: 'running', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var $1,$2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-self["@step"]=aBlock; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-smalltalk.send((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.send(self["@step"],"_isNil",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}),"_whileFalse_",[(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-smalltalk.send(self["@testCase"],"_context_",[self]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.send((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $1,$3,$2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.send((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.send((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.send(self["@step"],"_ensure_",[(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-smalltalk.send(self["@testCase"],"_context_",[nil]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-self["@step"]=nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-self["@step"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$1=smalltalk.send(self["@testCase"],"_isAsync",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if(! smalltalk.assert($1)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.send(self["@testCase"],"_tearDown",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-})]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.send(self,"_executeWithCleanup_",[aBlock]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }),"_on_do_",[(smalltalk.TestFailure || TestFailure),(function(ex){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.send(self,"_exception_ifNotAsync_",[ex,(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.send(self,"_exception_do_",[ex,(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.send(self["@result"],"_addFailure_",[self["@testCase"]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 })]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 })]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }),"_on_do_",[(smalltalk.Error || Error),(function(ex){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.send(self,"_exception_ifNotAsync_",[ex,(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.send(self,"_exception_do_",[ex,(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.send(self["@result"],"_addError_",[self["@testCase"]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 })]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 })]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}),"_ensure_",[(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$2=smalltalk.send(self["@testCase"],"_isAsync",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if(! smalltalk.assert($2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$2=(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$3=smalltalk.send(self["@testCase"],"_isAsync",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(! smalltalk.assert($3)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.send(self["@result"],"_increaseRuns",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.send(self["@finished"],"_value",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-})]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-})]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.send($1,"_ensure_",[$2]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "execute: aBlock\x0a    step := aBlock.\x0a\x09[ step isNil ] whileFalse: [\x0a\x09    testCase context: self.\x0a\x09\x09[[[\x09step\x0a        \x09\x09ensure: [ testCase context: nil. step := nil. testCase isAsync ifFalse: [ testCase tearDown ]]]\x0a\x09\x09\x09\x09on: TestFailure do: [:ex | self exception: ex ifNotAsync: [ result addFailure: testCase]]]\x0a\x09\x09\x09\x09on: Error do: [:ex | self exception: ex ifNotAsync: [ result addError: testCase]]]\x0a\x09\x09\x09\x09ensure: [ testCase isAsync ifFalse: [ result increaseRuns. finished value ]]]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-messageSends: ["whileFalse:", "context:", "ensure:", "ifFalse:", "increaseRuns", "value", "isAsync", "on:do:", "exception:ifNotAsync:", "addError:", "addFailure:", "tearDown", "isNil"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "execute: aBlock\x0a    [[[ self executeWithCleanup: aBlock ]\x0a    on: TestFailure do: [:ex | self exception: ex do: [ result addFailure: testCase]]]\x0a    on: Error do: [:ex | self exception: ex do: [ result addError: testCase]]]\x0a    ensure: [ testCase isAsync ifFalse: [ result increaseRuns. finished value ]]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["ensure:", "ifFalse:", "increaseRuns", "value", "isAsync", "on:do:", "exception:do:", "addError:", "addFailure:", "executeWithCleanup:"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: ["Error", "TestFailure"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.RunningTestContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+"_executeWithCleanup_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "executeWithCleanup:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'private', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $1,$3,$4,$2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var failed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.send(self["@testCase"],"_context_",[self]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+failed=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+failed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.send(aBlock,"_value",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+failed=false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return failed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$2=(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.send(self["@testCase"],"_context_",[nil]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$3=smalltalk.send(failed,"_and_",[(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.send(self["@testCase"],"_isAsync",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+})]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(smalltalk.assert($3)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.send(self["@testCase"],"_finished",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$4=smalltalk.send(self["@testCase"],"_isAsync",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(! smalltalk.assert($4)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.send(self["@testCase"],"_tearDown",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.send($1,"_ensure_",[$2]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "executeWithCleanup: aBlock\x0a\x09| failed |\x0a    testCase context: self.\x0a    [ failed := true. aBlock value. failed := false ] ensure: [\x0a        testCase context: nil.\x0a        (failed and: [testCase isAsync]) ifTrue: [ testCase finished ].\x0a        testCase isAsync ifFalse: [ testCase tearDown ]\x0a    ]\x0a", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["context:", "ensure:", "ifTrue:", "finished", "and:", "isAsync", "ifFalse:", "tearDown", "value"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.RunningTestContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 "_finished_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -206,16 +223,16 @@ smalltalk.RunningTestContext.klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addClass('ErroringTestContext', smalltalk.RunningTestContext, [], 'SUnit'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-"_exception_ifNotAsync_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+"_exception_do_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-selector: "exception:ifNotAsync:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "exception:do:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 category: 'private', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (anException,aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.send(anException,"_signal",[]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["anException", "aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "exception: anException ifNotAsync: aBlock\x0a\x09anException signal", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "exception: anException do: aBlock\x0a\x09anException signal", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 messageSends: ["signal"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 |