smalltalk.addPackage('SUnit', {}); smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit'); smalltalk.addMethod( "_assert_", smalltalk.method({ selector: "assert:", category: 'testing', fn: function (aBoolean) { var self=this; smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]); return self;}, args: ["aBoolean"], source: "assert: aBoolean\x0a\x09self assert: aBoolean description: 'Assertion failed'", messageSends: ["assert:description:"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_assert_description_", smalltalk.method({ selector: "assert:description:", category: 'testing', fn: function (aBoolean, aString) { var self=this; ((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})])); return self;}, args: ["aBoolean", "aString"], source: "assert: aBoolean description: aString\x0a\x09aBoolean ifFalse: [self signalFailure: aString]", messageSends: ["ifFalse:", "signalFailure:"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_assert_equals_", smalltalk.method({ selector: "assert:equals:", category: 'testing', fn: function (expected, actual) { var self=this; return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]); return self;}, args: ["expected", "actual"], source: "assert: expected equals: actual\x0a\x09^ self assert: (expected = actual) description: 'Expected: ', expected asString, ' but was: ', actual asString", messageSends: ["assert:description:", "=", ",", "asString"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_deny_", smalltalk.method({ selector: "deny:", category: 'testing', fn: function (aBoolean) { var self=this; smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]); return self;}, args: ["aBoolean"], source: "deny: aBoolean\x0a\x09self assert: aBoolean not", messageSends: ["assert:", "not"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_performTestFor_", smalltalk.method({ selector: "performTestFor:", category: 'running', fn: function (aResult) { var self=this; smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]); return self;}, args: ["aResult"], source: "performTestFor: aResult\x0a\x09[[self perform: self selector]\x0a\x09\x09on: TestFailure do: [:ex | aResult addFailure: self]]\x0a\x09\x09on: Error do: [:ex | aResult addError: self]", messageSends: ["on:do:", "perform:", "selector", "addFailure:", "addError:"], referencedClasses: ["TestFailure", "Error"] }), smalltalk.TestCase); smalltalk.addMethod( "_runCaseFor_", smalltalk.method({ selector: "runCaseFor:", category: 'running', fn: function (aTestResult) { var self=this; smalltalk.send(self, "_setUp", []); smalltalk.send(aTestResult, "_increaseRuns", []); smalltalk.send(self, "_performTestFor_", [aTestResult]); smalltalk.send(self, "_tearDown", []); return self;}, args: ["aTestResult"], source: "runCaseFor: aTestResult\x0a\x09self setUp.\x0a\x09aTestResult increaseRuns.\x0a\x09self performTestFor: aTestResult.\x0a\x09self tearDown", messageSends: ["setUp", "increaseRuns", "performTestFor:", "tearDown"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_selector", smalltalk.method({ selector: "selector", category: 'accessing', fn: function () { var self=this; return self['@testSelector']; return self;}, args: [], source: "selector\x0a\x09^testSelector", messageSends: [], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_setTestSelector_", smalltalk.method({ selector: "setTestSelector:", category: 'accessing', fn: function (aSelector) { var self=this; (self['@testSelector']=aSelector); return self;}, args: ["aSelector"], source: "setTestSelector: aSelector\x0a\x09testSelector := aSelector", messageSends: [], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_setUp", smalltalk.method({ selector: "setUp", category: 'running', fn: function () { var self=this; return self;}, args: [], source: "setUp", messageSends: [], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_should_", smalltalk.method({ selector: "should:", category: 'testing', fn: function (aBlock) { var self=this; smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]); return self;}, args: ["aBlock"], source: "should: aBlock\x0a\x09self assert: aBlock value", messageSends: ["assert:", "value"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_should_raise_", smalltalk.method({ selector: "should:raise:", category: 'testing', fn: function (aBlock, anExceptionClass) { var self=this; smalltalk.send(self, "_assert_", [smalltalk.send((function(){smalltalk.send(aBlock, "_value", []);return false;}), "_on_do_", [anExceptionClass, (function(ex){return true;})])]); return self;}, args: ["aBlock", "anExceptionClass"], source: "should: aBlock raise: anExceptionClass\x0a\x09self assert: ([aBlock value. false] \x0a\x09\x09on: anExceptionClass \x0a\x09\x09do: [:ex | true])", messageSends: ["assert:", "on:do:", "value"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_signalFailure_", smalltalk.method({ selector: "signalFailure:", category: 'private', fn: function (aString) { var self=this; (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", [])); return self;}, args: ["aString"], source: "signalFailure: aString\x0a\x09TestFailure new\x0a\x09\x09messageText: aString;\x0a\x09\x09signal", messageSends: ["messageText:", "signal", "new"], referencedClasses: ["TestFailure"] }), smalltalk.TestCase); smalltalk.addMethod( "_tearDown", smalltalk.method({ selector: "tearDown", category: 'running', fn: function () { var self=this; return self;}, args: [], source: "tearDown", messageSends: [], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( "_allTestSelectors", smalltalk.method({ selector: "allTestSelectors", category: 'accessing', fn: function () { var self=this; var selectors=nil; (selectors=smalltalk.send(self, "_testSelectors", [])); ((($receiver = smalltalk.send(self, "_shouldInheritSelectors", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})])); return selectors; return self;}, args: [], source: "allTestSelectors\x0a\x09| selectors |\x0a\x09selectors := self testSelectors.\x0a\x09self shouldInheritSelectors ifTrue: [\x0a\x09\x09selectors addAll: self superclass allTestSelectors].\x0a\x09^selectors", messageSends: ["testSelectors", "ifTrue:", "shouldInheritSelectors", "addAll:", "allTestSelectors", "superclass"], referencedClasses: [] }), smalltalk.TestCase.klass); smalltalk.addMethod( "_buildSuite", smalltalk.method({ selector: "buildSuite", category: 'accessing', fn: function () { var self=this; return smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [(function(each){return smalltalk.send(self, "_selector_", [each]);})]); return self;}, args: [], source: "buildSuite\x0a\x09^self allTestSelectors collect: [:each | self selector: each]", messageSends: ["collect:", "allTestSelectors", "selector:"], referencedClasses: [] }), smalltalk.TestCase.klass); smalltalk.addMethod( "_isAbstract", smalltalk.method({ selector: "isAbstract", category: 'testing', fn: function () { var self=this; return smalltalk.send(smalltalk.send(self, "_name", []), "__eq", ["TestCase"]); return self;}, args: [], source: "isAbstract\x0a\x09^ self name = 'TestCase'", messageSends: ["=", "name"], referencedClasses: [] }), smalltalk.TestCase.klass); smalltalk.addMethod( "_lookupHierarchyRoot", smalltalk.method({ selector: "lookupHierarchyRoot", category: 'accessing', fn: function () { var self=this; return (smalltalk.TestCase || TestCase); return self;}, args: [], source: "lookupHierarchyRoot\x0a\x09^TestCase", messageSends: [], referencedClasses: ["TestCase"] }), smalltalk.TestCase.klass); smalltalk.addMethod( "_selector_", smalltalk.method({ selector: "selector:", category: 'accessing', fn: function (aSelector) { var self=this; return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, args: ["aSelector"], source: "selector: aSelector\x0a\x09^self new\x0a\x09\x09setTestSelector: aSelector;\x0a\x09\x09yourself", messageSends: ["setTestSelector:", "yourself", "new"], referencedClasses: [] }), smalltalk.TestCase.klass); smalltalk.addMethod( "_shouldInheritSelectors", smalltalk.method({ selector: "shouldInheritSelectors", category: 'testing', fn: function () { var self=this; return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]); return self;}, args: [], source: "shouldInheritSelectors\x0a\x09^self ~= self lookupHierarchyRoot", messageSends: ["~=", "lookupHierarchyRoot"], referencedClasses: [] }), smalltalk.TestCase.klass); smalltalk.addMethod( "_testSelectors", smalltalk.method({ selector: "testSelectors", category: 'accessing', fn: function () { var self=this; return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", ["^test"]);})]); return self;}, args: [], source: "testSelectors\x0a\x09^self methodDictionary keys select: [:each | each match: '^test']", messageSends: ["select:", "keys", "methodDictionary", "match:"], referencedClasses: [] }), smalltalk.TestCase.klass); smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit'); smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit'); smalltalk.addMethod( "_addError_", smalltalk.method({ selector: "addError:", category: 'accessing', fn: function (anError) { var self=this; smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]); return self;}, args: ["anError"], source: "addError: anError\x0a\x09self errors add: anError", messageSends: ["add:", "errors"], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_addFailure_", smalltalk.method({ selector: "addFailure:", category: 'accessing', fn: function (aFailure) { var self=this; smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]); return self;}, args: ["aFailure"], source: "addFailure: aFailure\x0a\x09self failures add: aFailure", messageSends: ["add:", "failures"], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_errors", smalltalk.method({ selector: "errors", category: 'accessing', fn: function () { var self=this; return self['@errors']; return self;}, args: [], source: "errors\x0a\x09^errors", messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_failures", smalltalk.method({ selector: "failures", category: 'accessing', fn: function () { var self=this; return self['@failures']; return self;}, args: [], source: "failures\x0a\x09^failures", messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_increaseRuns", smalltalk.method({ selector: "increaseRuns", category: 'accessing', fn: function () { var self=this; (self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); return self;}, args: [], source: "increaseRuns\x0a\x09runs := runs + 1", messageSends: ["+"], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_initialize", smalltalk.method({ selector: "initialize", category: 'initialization', fn: function () { var self=this; smalltalk.send(self, "_initialize", [], smalltalk.TestResult.superclass || nil); (self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", [])); (self['@runs']=(0)); (self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", [])); (self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", [])); (self['@total']=(0)); return self;}, args: [], source: "initialize\x0a\x09super initialize.\x0a\x09timestamp := Date now.\x0a\x09runs := 0.\x0a\x09errors := Array new.\x0a\x09failures := Array new.\x0a\x09total := 0", messageSends: ["initialize", "now", "new"], referencedClasses: ["Date", "Array"] }), smalltalk.TestResult); smalltalk.addMethod( "_runs", smalltalk.method({ selector: "runs", category: 'accessing', fn: function () { var self=this; return self['@runs']; return self;}, args: [], source: "runs\x0a\x09^runs", messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_status", smalltalk.method({ selector: "status", category: 'accessing', fn: function () { var self=this; return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})])); return self;}, args: [], source: "status\x0a\x09^self errors isEmpty \x0a\x09\x09ifTrue: [\x0a\x09\x09\x09self failures isEmpty \x0a\x09\x09\x09\x09ifTrue: ['success']\x0a\x09\x09\x09\x09ifFalse: ['failure']]\x0a\x09\x09ifFalse: ['error']", messageSends: ["ifTrue:ifFalse:", "isEmpty", "errors", "failures"], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_timestamp", smalltalk.method({ selector: "timestamp", category: 'accessing', fn: function () { var self=this; return self['@timestamp']; return self;}, args: [], source: "timestamp\x0a\x09^timestamp", messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_total", smalltalk.method({ selector: "total", category: 'accessing', fn: function () { var self=this; return self['@total']; return self;}, args: [], source: "total\x0a\x09^total", messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( "_total_", smalltalk.method({ selector: "total:", category: 'accessing', fn: function (aNumber) { var self=this; (self['@total']=aNumber); return self;}, args: ["aNumber"], source: "total: aNumber\x0a\x09total := aNumber", messageSends: [], referencedClasses: [] }), smalltalk.TestResult);