|  | @@ -522,6 +522,52 @@ referencedClasses: ["Date", "Array"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TestResult);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_nextRunDo_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "nextRunDo:",
 | 
	
		
			
				|  |  | +category: 'running',
 | 
	
		
			
				|  |  | +fn: function (aBlock){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +var $2,$1;
 | 
	
		
			
				|  |  | +$2=smalltalk.send(smalltalk.send(self,"_runs",[]),"__eq_eq",[smalltalk.send(self,"_total",[])]);
 | 
	
		
			
				|  |  | +if(! smalltalk.assert($2)){
 | 
	
		
			
				|  |  | +$1=smalltalk.send(aBlock,"_value_",[smalltalk.send(smalltalk.send(self,"_runs",[]),"__plus",[(1)])]);
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +return $1;
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: ["aBlock"],
 | 
	
		
			
				|  |  | +source: "nextRunDo: aBlock\x0a\x22Runs aBlock with index of next run\x0aor does nothing if no more runs\x22\x0a^self runs == self total\x0a\x09ifFalse: [ aBlock value: self runs + 1 ]",
 | 
	
		
			
				|  |  | +messageSends: ["ifFalse:", "value:", "+", "runs", "==", "total"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.TestResult);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_runCase_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "runCase:",
 | 
	
		
			
				|  |  | +category: 'running',
 | 
	
		
			
				|  |  | +fn: function (aTestCase){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +smalltalk.send((function(){
 | 
	
		
			
				|  |  | +return smalltalk.send((function(){
 | 
	
		
			
				|  |  | +smalltalk.send(self,"_increaseRuns",[]);
 | 
	
		
			
				|  |  | +return smalltalk.send(aTestCase,"_runCase",[]);
 | 
	
		
			
				|  |  | +}),"_on_do_",[(smalltalk.TestFailure || TestFailure),(function(ex){
 | 
	
		
			
				|  |  | +return smalltalk.send(self,"_addFailure_",[aTestCase]);
 | 
	
		
			
				|  |  | +})]);
 | 
	
		
			
				|  |  | +}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
 | 
	
		
			
				|  |  | +return smalltalk.send(self,"_addError_",[aTestCase]);
 | 
	
		
			
				|  |  | +})]);
 | 
	
		
			
				|  |  | +return self},
 | 
	
		
			
				|  |  | +args: ["aTestCase"],
 | 
	
		
			
				|  |  | +source: "runCase: aTestCase\x0a\x09[[\x09self increaseRuns.\x0a    \x09aTestCase runCase]\x0a\x09on: TestFailure do: [:ex | self addFailure: aTestCase]]\x0a\x09on: Error do: [:ex | self addError: aTestCase]\x0a",
 | 
	
		
			
				|  |  | +messageSends: ["on:do:", "addError:", "addFailure:", "increaseRuns", "runCase"],
 | 
	
		
			
				|  |  | +referencedClasses: ["Error", "TestFailure"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.TestResult);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_runs",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
	
		
			
				|  | @@ -675,61 +721,30 @@ selector: "run",
 | 
	
		
			
				|  |  |  category: 'actions',
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -var $1;
 | 
	
		
			
				|  |  |  var worker;
 | 
	
		
			
				|  |  | -var index;
 | 
	
		
			
				|  |  |  smalltalk.send(self["@result"],"_total_",[smalltalk.send(self["@suite"],"_size",[])]);
 | 
	
		
			
				|  |  |  smalltalk.send(self["@announcer"],"_announce_",[smalltalk.send(smalltalk.send((smalltalk.ResultAnnouncement || ResultAnnouncement),"_new",[]),"_result_",[self["@result"]])]);
 | 
	
		
			
				|  |  | -index=(1);
 | 
	
		
			
				|  |  |  worker=(function(){
 | 
	
		
			
				|  |  | -$1=smalltalk.send(index,"__lt_eq",[smalltalk.send(self["@suite"],"_size",[])]);
 | 
	
		
			
				|  |  | -if(smalltalk.assert($1)){
 | 
	
		
			
				|  |  | +return smalltalk.send(self["@result"],"_nextRunDo_",[(function(index){
 | 
	
		
			
				|  |  |  return smalltalk.send((function(){
 | 
	
		
			
				|  |  | -return smalltalk.send(self,"_runCase_for_",[smalltalk.send(self["@suite"],"_at_",[index]),self["@result"]]);
 | 
	
		
			
				|  |  | +return smalltalk.send(self["@result"],"_runCase_",[smalltalk.send(self["@suite"],"_at_",[index])]);
 | 
	
		
			
				|  |  |  }),"_ensure_",[(function(){
 | 
	
		
			
				|  |  | -index=smalltalk.send(index,"__plus",[(1)]);
 | 
	
		
			
				|  |  | -index;
 | 
	
		
			
				|  |  | -smalltalk.send(self["@announcer"],"_announce_",[smalltalk.send(smalltalk.send((smalltalk.ResultAnnouncement || ResultAnnouncement),"_new",[]),"_result_",[self["@result"]])]);
 | 
	
		
			
				|  |  | -return smalltalk.send(worker,"_valueWithTimeout_",[(0)]);
 | 
	
		
			
				|  |  | +smalltalk.send(worker,"_valueWithTimeout_",[(0)]);
 | 
	
		
			
				|  |  | +return smalltalk.send(self["@announcer"],"_announce_",[smalltalk.send(smalltalk.send((smalltalk.ResultAnnouncement || ResultAnnouncement),"_new",[]),"_result_",[self["@result"]])]);
 | 
	
		
			
				|  |  | +})]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  |  smalltalk.send(smalltalk.send(smalltalk.send(self["@suite"],"_size",[]),"_min_",[(25)]),"_timesRepeat_",[(function(){
 | 
	
		
			
				|  |  |  return smalltalk.send(worker,"_valueWithTimeout_",[(0)]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "run\x0a\x09| worker index |\x0a\x09result total: suite size.\x0a    announcer announce: (ResultAnnouncement new result: result).\x0a    index := 1.\x0a    worker := [ index <= suite size ifTrue: [\x0a        [ self runCase: (suite at: index)  for: result ]\x0a        ensure: [ index := index + 1.\x0a        announcer announce: (ResultAnnouncement new result: result). \x0a        worker valueWithTimeout: 0 ]\x0a\x09]].\x0a\x09(suite size min: 25) timesRepeat: [ worker valueWithTimeout: 0 ]",
 | 
	
		
			
				|  |  | -messageSends: ["total:", "size", "announce:", "result:", "new", "ifTrue:", "ensure:", "+", "valueWithTimeout:", "runCase:for:", "at:", "<=", "timesRepeat:", "min:"],
 | 
	
		
			
				|  |  | +source: "run\x0a\x09| worker |\x0a\x09result total: suite size.\x0a    announcer announce: (ResultAnnouncement new result: result).\x0a    worker := [ result nextRunDo: [ :index |\x0a\x09\x09[ result runCase: (suite at: index) ]\x0a\x09\x09ensure: [ worker valueWithTimeout: 0.\x0a        \x09announcer announce: (ResultAnnouncement new result: result) ]]].\x0a\x09(suite size min: 25) timesRepeat: [ worker valueWithTimeout: 0 ]",
 | 
	
		
			
				|  |  | +messageSends: ["total:", "size", "announce:", "result:", "new", "nextRunDo:", "ensure:", "valueWithTimeout:", "runCase:", "at:", "timesRepeat:", "min:"],
 | 
	
		
			
				|  |  |  referencedClasses: ["ResultAnnouncement"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TestSuiteRunner);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -smalltalk.addMethod(
 | 
	
		
			
				|  |  | -"_runCase_for_",
 | 
	
		
			
				|  |  | -smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "runCase:for:",
 | 
	
		
			
				|  |  | -category: 'actions',
 | 
	
		
			
				|  |  | -fn: function (aTestCase,aTestResult){
 | 
	
		
			
				|  |  | -var self=this;
 | 
	
		
			
				|  |  | -smalltalk.send((function(){
 | 
	
		
			
				|  |  | -return smalltalk.send((function(){
 | 
	
		
			
				|  |  | -smalltalk.send(aTestResult,"_increaseRuns",[]);
 | 
	
		
			
				|  |  | -return smalltalk.send(aTestCase,"_runCase",[]);
 | 
	
		
			
				|  |  | -}),"_on_do_",[(smalltalk.TestFailure || TestFailure),(function(ex){
 | 
	
		
			
				|  |  | -return smalltalk.send(aTestResult,"_addFailure_",[aTestCase]);
 | 
	
		
			
				|  |  | -})]);
 | 
	
		
			
				|  |  | -}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
 | 
	
		
			
				|  |  | -return smalltalk.send(aTestResult,"_addError_",[aTestCase]);
 | 
	
		
			
				|  |  | -})]);
 | 
	
		
			
				|  |  | -return self},
 | 
	
		
			
				|  |  | -args: ["aTestCase", "aTestResult"],
 | 
	
		
			
				|  |  | -source: "runCase: aTestCase for: aTestResult\x0a\x09[[\x09aTestResult increaseRuns.\x0a    \x09aTestCase runCase]\x0a\x09on: TestFailure do: [:ex | aTestResult addFailure: aTestCase]]\x0a\x09on: Error do: [:ex | aTestResult addError: aTestCase]\x0a",
 | 
	
		
			
				|  |  | -messageSends: ["on:do:", "addError:", "addFailure:", "increaseRuns", "runCase"],
 | 
	
		
			
				|  |  | -referencedClasses: ["Error", "TestFailure"]
 | 
	
		
			
				|  |  | -}),
 | 
	
		
			
				|  |  | -smalltalk.TestSuiteRunner);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_suite_",
 | 
	
		
			
				|  |  |  smalltalk.method({
 |