|  | @@ -101,7 +101,7 @@ fn: function (aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  var $2,$1;
 | 
	
		
			
				|  |  |  var c;
 | 
	
		
			
				|  |  | -smalltalk.send(self,"_mustBeAsync_",["#async"]);
 | 
	
		
			
				|  |  | +smalltalk.send(self,"_errorIfNotAsync_",["#async"]);
 | 
	
		
			
				|  |  |  c=self["@context"];
 | 
	
		
			
				|  |  |  $1=(function(){
 | 
	
		
			
				|  |  |  $2=smalltalk.send(self,"_isAsync",[]);
 | 
	
	
		
			
				|  | @@ -112,8 +112,8 @@ return smalltalk.send(c,"_execute_",[aBlock]);
 | 
	
		
			
				|  |  |  return $1;
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: ["aBlock"],
 | 
	
		
			
				|  |  | -source: "async: aBlock\x0a\x09| c |\x0a\x09self mustBeAsync: '#async'.\x0a    c := context.\x0a    ^[ self isAsync ifTrue: [ c execute: aBlock ]]",
 | 
	
		
			
				|  |  | -messageSends: ["mustBeAsync:", "ifTrue:", "execute:", "isAsync"],
 | 
	
		
			
				|  |  | +source: "async: aBlock\x0a\x09| c |\x0a\x09self errorIfNotAsync: '#async'.\x0a    c := context.\x0a    ^ [ self isAsync ifTrue: [ c execute: aBlock ] ]",
 | 
	
		
			
				|  |  | +messageSends: ["errorIfNotAsync:", "ifTrue:", "execute:", "isAsync"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TestCase);
 | 
	
	
		
			
				|  | @@ -150,6 +150,26 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TestCase);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_errorIfNotAsync_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "errorIfNotAsync:",
 | 
	
		
			
				|  |  | +category: 'error handling',
 | 
	
		
			
				|  |  | +fn: function (aString){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +var $1;
 | 
	
		
			
				|  |  | +$1=smalltalk.send(self,"_isAsync",[]);
 | 
	
		
			
				|  |  | +if(! smalltalk.assert($1)){
 | 
	
		
			
				|  |  | +smalltalk.send(self,"_error_",[smalltalk.send(aString,"__comma",[" used without prior #graceTime:"])]);
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +return self},
 | 
	
		
			
				|  |  | +args: ["aString"],
 | 
	
		
			
				|  |  | +source: "errorIfNotAsync: aString\x0a\x09self isAsync ifFalse: [ \x0a    \x09self error: aString, ' used without prior #graceTime:' ]",
 | 
	
		
			
				|  |  | +messageSends: ["ifFalse:", "error:", ",", "isAsync"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.TestCase);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_finished",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
	
		
			
				|  | @@ -157,12 +177,12 @@ selector: "finished",
 | 
	
		
			
				|  |  |  category: 'async',
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -smalltalk.send(self,"_mustBeAsync_",["#finished"]);
 | 
	
		
			
				|  |  | +smalltalk.send(self,"_errorIfNotAsync_",["#finished"]);
 | 
	
		
			
				|  |  |  self["@asyncTimeout"]=nil;
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "finished\x0a\x09self mustBeAsync: '#finished'.\x0a\x09asyncTimeout := nil",
 | 
	
		
			
				|  |  | -messageSends: ["mustBeAsync:"],
 | 
	
		
			
				|  |  | +source: "finished\x0a\x09self errorIfNotAsync: '#finished'.\x0a\x09asyncTimeout := nil",
 | 
	
		
			
				|  |  | +messageSends: ["errorIfNotAsync:"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TestCase);
 | 
	
	
		
			
				|  | @@ -197,7 +217,7 @@ smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_isAsync",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
		
			
				|  |  |  selector: "isAsync",
 | 
	
		
			
				|  |  | -category: 'async',
 | 
	
		
			
				|  |  | +category: 'testing',
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  var $1;
 | 
	
	
		
			
				|  | @@ -211,26 +231,6 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TestCase);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -smalltalk.addMethod(
 | 
	
		
			
				|  |  | -"_mustBeAsync_",
 | 
	
		
			
				|  |  | -smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "mustBeAsync:",
 | 
	
		
			
				|  |  | -category: 'async',
 | 
	
		
			
				|  |  | -fn: function (aString){
 | 
	
		
			
				|  |  | -var self=this;
 | 
	
		
			
				|  |  | -var $1;
 | 
	
		
			
				|  |  | -$1=smalltalk.send(self,"_isAsync",[]);
 | 
	
		
			
				|  |  | -if(! smalltalk.assert($1)){
 | 
	
		
			
				|  |  | -smalltalk.send(self,"_error_",[smalltalk.send(aString,"__comma",[" used without prior #graceTime:"])]);
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -return self},
 | 
	
		
			
				|  |  | -args: ["aString"],
 | 
	
		
			
				|  |  | -source: "mustBeAsync: aString\x0a\x09self isAsync ifFalse: [ self error: aString, ' used without prior #graceTime:' ]",
 | 
	
		
			
				|  |  | -messageSends: ["ifFalse:", "error:", ",", "isAsync"],
 | 
	
		
			
				|  |  | -referencedClasses: []
 | 
	
		
			
				|  |  | -}),
 | 
	
		
			
				|  |  | -smalltalk.TestCase);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_performTest",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
	
		
			
				|  | @@ -581,7 +581,7 @@ return smalltalk.send(self["@testCase"],"_tearDown",[]);
 | 
	
		
			
				|  |  |  smalltalk.send($1,"_ensure_",[$2]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["aBlock"],
 | 
	
		
			
				|  |  | -source: "execute: 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",
 | 
	
		
			
				|  |  | +source: "execute: aBlock\x0a\x09| failed |\x0a    \x0a    testCase context: self.\x0a    [ \x0a    \x09failed := true. \x0a        aBlock value. \x0a        failed := false \x0a\x09] \x0a    \x09ensure: [\x0a        \x09testCase context: nil.\x0a            \x0a        \x09(failed and: [ testCase isAsync ]) ifTrue: [ \x0a            \x09testCase finished ].\x0a        \x09testCase isAsync ifFalse: [ \x0a        \x09\x09testCase tearDown ] ]",
 | 
	
		
			
				|  |  |  messageSends: ["context:", "ensure:", "ifTrue:", "finished", "and:", "isAsync", "ifFalse:", "tearDown", "value"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
	
		
			
				|  | @@ -600,7 +600,7 @@ return smalltalk.send(self["@testCase"],"_performTest",[]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "start\x0a\x09self execute: [ testCase setUp. testCase performTest ]",
 | 
	
		
			
				|  |  | +source: "start\x0a\x09self execute: [ \x0a    \x09testCase setUp. \x0a        testCase performTest ]",
 | 
	
		
			
				|  |  |  messageSends: ["execute:", "setUp", "performTest"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
	
		
			
				|  | @@ -656,14 +656,8 @@ fn: function (aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  var $1,$3,$2;
 | 
	
		
			
				|  |  |  $1=(function(){
 | 
	
		
			
				|  |  | -return smalltalk.send((function(){
 | 
	
		
			
				|  |  | -return smalltalk.send((function(){
 | 
	
		
			
				|  |  | +return smalltalk.send(self,"_withErrorReporting_",[(function(){
 | 
	
		
			
				|  |  |  return smalltalk.send(self,"_execute_",[aBlock],smalltalk.TestContext);
 | 
	
		
			
				|  |  | -}),"_on_do_",[(smalltalk.TestFailure || TestFailure),(function(ex){
 | 
	
		
			
				|  |  | -return smalltalk.send(self["@result"],"_addFailure_",[self["@testCase"]]);
 | 
	
		
			
				|  |  | -})]);
 | 
	
		
			
				|  |  | -}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
 | 
	
		
			
				|  |  | -return smalltalk.send(self["@result"],"_addError_",[self["@testCase"]]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  |  $2=(function(){
 | 
	
	
		
			
				|  | @@ -676,9 +670,9 @@ return smalltalk.send(self["@finished"],"_value",[]);
 | 
	
		
			
				|  |  |  smalltalk.send($1,"_ensure_",[$2]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["aBlock"],
 | 
	
		
			
				|  |  | -source: "execute: aBlock\x0a    [\x0a    \x09[\x0a        \x09[ super execute: aBlock ]\x0a    \x09\x09\x09on: TestFailure \x0a                do: [:ex | result addFailure: testCase ] \x0a  \x09\x09]\x0a    \x09\x09on: Error \x0a            do: [:ex | result addError: testCase] \x0a\x09]\x0a    \x09ensure: [ testCase isAsync ifFalse: [ result increaseRuns. finished value ] ]",
 | 
	
		
			
				|  |  | -messageSends: ["ensure:", "ifFalse:", "increaseRuns", "value", "isAsync", "on:do:", "addError:", "addFailure:", "execute:"],
 | 
	
		
			
				|  |  | -referencedClasses: ["Error", "TestFailure"]
 | 
	
		
			
				|  |  | +source: "execute: aBlock\x0a    [ \x0a    \x09self withErrorReporting: [ super execute: aBlock ] \x0a\x09]\x0a    \x09ensure: [ \x0a        \x09testCase isAsync ifFalse: [ \x0a            \x09result increaseRuns. finished value ] ]",
 | 
	
		
			
				|  |  | +messageSends: ["ensure:", "ifFalse:", "increaseRuns", "value", "isAsync", "withErrorReporting:", "execute:"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.ReportingTestContext);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -714,6 +708,28 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.ReportingTestContext);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_withErrorReporting_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "withErrorReporting:",
 | 
	
		
			
				|  |  | +category: 'private',
 | 
	
		
			
				|  |  | +fn: function (aBlock){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +smalltalk.send((function(){
 | 
	
		
			
				|  |  | +return smalltalk.send(aBlock,"_on_do_",[(smalltalk.TestFailure || TestFailure),(function(ex){
 | 
	
		
			
				|  |  | +return smalltalk.send(self["@result"],"_addFailure_",[self["@testCase"]]);
 | 
	
		
			
				|  |  | +})]);
 | 
	
		
			
				|  |  | +}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
 | 
	
		
			
				|  |  | +return smalltalk.send(self["@result"],"_addError_",[self["@testCase"]]);
 | 
	
		
			
				|  |  | +})]);
 | 
	
		
			
				|  |  | +return self},
 | 
	
		
			
				|  |  | +args: ["aBlock"],
 | 
	
		
			
				|  |  | +source: "withErrorReporting: aBlock\x0a \x09[ aBlock\x0a\x09\x09on: TestFailure \x0a\x09\x09do: [ :ex | result addFailure: testCase ] \x0a\x09]\x0a    \x09on: Error \x0a        do: [ :ex | result addError: testCase ]",
 | 
	
		
			
				|  |  | +messageSends: ["on:do:", "addError:", "addFailure:"],
 | 
	
		
			
				|  |  | +referencedClasses: ["Error", "TestFailure"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.ReportingTestContext);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_testCase_result_finished_",
 |