SUnit.js 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032
  1. define(["amber/boot", "require", "amber/core/Kernel-Classes", "amber/core/Kernel-Exceptions", "amber/core/Kernel-Infrastructure", "amber/core/Kernel-Objects"], function($boot,requirejs){"use strict";
  2. var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. var $pkg = $core.addPackage("SUnit");
  4. $pkg.innerEval = function (expr) { return eval(expr); };
  5. $pkg.transport = {"type":"amd","amdNamespace":"amber/core"};
  6. $core.addClass("ResultAnnouncement", $globals.Object, ["result"], "SUnit");
  7. //>>excludeStart("ide", pragmas.excludeIdeData);
  8. $globals.ResultAnnouncement.comment="I get signaled when a `TestCase` has been run.\x0a\x0aMy instances hold the result (instance of `TestResult`) of the test run.";
  9. //>>excludeEnd("ide");
  10. $core.addMethod(
  11. $core.method({
  12. selector: "result",
  13. protocol: "accessing",
  14. //>>excludeStart("ide", pragmas.excludeIdeData);
  15. args: [],
  16. source: "result\x0a\x09^ result",
  17. referencedClasses: [],
  18. //>>excludeEnd("ide");
  19. pragmas: [],
  20. messageSends: []
  21. }, function ($methodClass){ return function (){
  22. var self=this,$self=this;
  23. return $self.result;
  24. }; }),
  25. $globals.ResultAnnouncement);
  26. $core.addMethod(
  27. $core.method({
  28. selector: "result:",
  29. protocol: "accessing",
  30. //>>excludeStart("ide", pragmas.excludeIdeData);
  31. args: ["aTestResult"],
  32. source: "result: aTestResult\x0a\x09result := aTestResult",
  33. referencedClasses: [],
  34. //>>excludeEnd("ide");
  35. pragmas: [],
  36. messageSends: []
  37. }, function ($methodClass){ return function (aTestResult){
  38. var self=this,$self=this;
  39. $self.result=aTestResult;
  40. return self;
  41. }; }),
  42. $globals.ResultAnnouncement);
  43. $core.addClass("Teachable", $globals.Object, ["learnings"], "SUnit");
  44. //>>excludeStart("ide", pragmas.excludeIdeData);
  45. $globals.Teachable.comment="An object you can teach how to behave. Have a look at the \x0aclass side for an example.\x0a\x0aFor more infos have a look at: http://lists.squeakfoundation.org/pipermail/squeak-dev/2002-April/038170.html";
  46. //>>excludeEnd("ide");
  47. $core.addMethod(
  48. $core.method({
  49. selector: "acceptSend:",
  50. protocol: "teaching",
  51. //>>excludeStart("ide", pragmas.excludeIdeData);
  52. args: ["aSymbol"],
  53. source: "acceptSend: aSymbol\x0a\x0a\x09self whenSend: aSymbol return: self",
  54. referencedClasses: [],
  55. //>>excludeEnd("ide");
  56. pragmas: [],
  57. messageSends: ["whenSend:return:"]
  58. }, function ($methodClass){ return function (aSymbol){
  59. var self=this,$self=this;
  60. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61. return $core.withContext(function($ctx1) {
  62. //>>excludeEnd("ctx");
  63. $self._whenSend_return_(aSymbol,self);
  64. return self;
  65. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66. }, function($ctx1) {$ctx1.fill(self,"acceptSend:",{aSymbol:aSymbol})});
  67. //>>excludeEnd("ctx");
  68. }; }),
  69. $globals.Teachable);
  70. $core.addMethod(
  71. $core.method({
  72. selector: "doesNotUnderstand:",
  73. protocol: "private",
  74. //>>excludeStart("ide", pragmas.excludeIdeData);
  75. args: ["aMessage"],
  76. source: "doesNotUnderstand: aMessage\x0a\x0a\x09| learning |\x0a\x09learning := self learnings \x0a\x09\x09at: aMessage selector \x0a\x09\x09ifAbsent:[ ^super doesNotUnderstand: aMessage ].\x0a\x09^ learning class == Association\x0a\x09\x09ifTrue: [learning value]\x0a\x09\x09ifFalse: [learning valueWithPossibleArguments: aMessage arguments]",
  77. referencedClasses: ["Association"],
  78. //>>excludeEnd("ide");
  79. pragmas: [],
  80. messageSends: ["at:ifAbsent:", "learnings", "selector", "doesNotUnderstand:", "ifTrue:ifFalse:", "==", "class", "value", "valueWithPossibleArguments:", "arguments"]
  81. }, function ($methodClass){ return function (aMessage){
  82. var self=this,$self=this;
  83. var learning;
  84. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  85. return $core.withContext(function($ctx1) {
  86. //>>excludeEnd("ctx");
  87. var $1,$2;
  88. var $early={};
  89. try {
  90. learning=$recv($self._learnings())._at_ifAbsent_($recv(aMessage)._selector(),(function(){
  91. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  92. return $core.withContext(function($ctx2) {
  93. //>>excludeEnd("ctx");
  94. $1=(
  95. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  96. $ctx2.supercall = true,
  97. //>>excludeEnd("ctx");
  98. ($methodClass.superclass||$boot.nilAsClass).fn.prototype._doesNotUnderstand_.call($self,aMessage));
  99. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  100. $ctx2.supercall = false;
  101. //>>excludeEnd("ctx");;
  102. throw $early=[$1];
  103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  104. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  105. //>>excludeEnd("ctx");
  106. }));
  107. $2=$recv($recv(learning)._class()).__eq_eq($globals.Association);
  108. if($core.assert($2)){
  109. return $recv(learning)._value();
  110. } else {
  111. return $recv(learning)._valueWithPossibleArguments_($recv(aMessage)._arguments());
  112. }
  113. }
  114. catch(e) {if(e===$early)return e[0]; throw e}
  115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  116. }, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage,learning:learning})});
  117. //>>excludeEnd("ctx");
  118. }; }),
  119. $globals.Teachable);
  120. $core.addMethod(
  121. $core.method({
  122. selector: "learnings",
  123. protocol: "private",
  124. //>>excludeStart("ide", pragmas.excludeIdeData);
  125. args: [],
  126. source: "learnings\x0a\x0a\x09learnings isNil ifTrue: [learnings := Dictionary new].\x0a\x09^learnings",
  127. referencedClasses: ["Dictionary"],
  128. //>>excludeEnd("ide");
  129. pragmas: [],
  130. messageSends: ["ifTrue:", "isNil", "new"]
  131. }, function ($methodClass){ return function (){
  132. var self=this,$self=this;
  133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  134. return $core.withContext(function($ctx1) {
  135. //>>excludeEnd("ctx");
  136. var $1;
  137. $1=$recv($self.learnings)._isNil();
  138. if($core.assert($1)){
  139. $self.learnings=$recv($globals.Dictionary)._new();
  140. $self.learnings;
  141. }
  142. return $self.learnings;
  143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  144. }, function($ctx1) {$ctx1.fill(self,"learnings",{})});
  145. //>>excludeEnd("ctx");
  146. }; }),
  147. $globals.Teachable);
  148. $core.addMethod(
  149. $core.method({
  150. selector: "whenSend:evaluate:",
  151. protocol: "teaching",
  152. //>>excludeStart("ide", pragmas.excludeIdeData);
  153. args: ["aSymbol", "aBlock"],
  154. source: "whenSend: aSymbol evaluate: aBlock\x0a\x0a\x09self learnings at: aSymbol put: aBlock",
  155. referencedClasses: [],
  156. //>>excludeEnd("ide");
  157. pragmas: [],
  158. messageSends: ["at:put:", "learnings"]
  159. }, function ($methodClass){ return function (aSymbol,aBlock){
  160. var self=this,$self=this;
  161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  162. return $core.withContext(function($ctx1) {
  163. //>>excludeEnd("ctx");
  164. $recv($self._learnings())._at_put_(aSymbol,aBlock);
  165. return self;
  166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  167. }, function($ctx1) {$ctx1.fill(self,"whenSend:evaluate:",{aSymbol:aSymbol,aBlock:aBlock})});
  168. //>>excludeEnd("ctx");
  169. }; }),
  170. $globals.Teachable);
  171. $core.addMethod(
  172. $core.method({
  173. selector: "whenSend:return:",
  174. protocol: "teaching",
  175. //>>excludeStart("ide", pragmas.excludeIdeData);
  176. args: ["aSymbol", "anObject"],
  177. source: "whenSend: aSymbol return: anObject\x0a\x0a\x09self learnings at: aSymbol put: (#return -> anObject)",
  178. referencedClasses: [],
  179. //>>excludeEnd("ide");
  180. pragmas: [],
  181. messageSends: ["at:put:", "learnings", "->"]
  182. }, function ($methodClass){ return function (aSymbol,anObject){
  183. var self=this,$self=this;
  184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  185. return $core.withContext(function($ctx1) {
  186. //>>excludeEnd("ctx");
  187. $recv($self._learnings())._at_put_(aSymbol,"return".__minus_gt(anObject));
  188. return self;
  189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  190. }, function($ctx1) {$ctx1.fill(self,"whenSend:return:",{aSymbol:aSymbol,anObject:anObject})});
  191. //>>excludeEnd("ctx");
  192. }; }),
  193. $globals.Teachable);
  194. $core.addMethod(
  195. $core.method({
  196. selector: "example",
  197. protocol: "examples",
  198. //>>excludeStart("ide", pragmas.excludeIdeData);
  199. args: [],
  200. source: "example\x0a\x09| teachable |\x0a\x09teachable := self new.\x0a\x09teachable \x0a\x09\x09whenSend: #help return: 'ok';\x0a\x09\x09whenSend: #doit evaluate: [1 inspect];\x0a\x09\x09acceptSend: #noDebugger;\x0a\x09\x09whenSend: #negate: evaluate: [:num | num negated].\x0a\x09teachable help.\x0a\x09teachable doit.\x0a\x09teachable noDebugger.\x0a\x09teachable negate: 120",
  201. referencedClasses: [],
  202. //>>excludeEnd("ide");
  203. pragmas: [],
  204. messageSends: ["new", "whenSend:return:", "whenSend:evaluate:", "inspect", "acceptSend:", "negated", "help", "doit", "noDebugger", "negate:"]
  205. }, function ($methodClass){ return function (){
  206. var self=this,$self=this;
  207. var teachable;
  208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  209. return $core.withContext(function($ctx1) {
  210. //>>excludeEnd("ctx");
  211. var $1;
  212. teachable=$self._new();
  213. $1=teachable;
  214. $recv($1)._whenSend_return_("help","ok");
  215. $recv($1)._whenSend_evaluate_("doit",(function(){
  216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  217. return $core.withContext(function($ctx2) {
  218. //>>excludeEnd("ctx");
  219. return (1)._inspect();
  220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  221. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  222. //>>excludeEnd("ctx");
  223. }));
  224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  225. $ctx1.sendIdx["whenSend:evaluate:"]=1;
  226. //>>excludeEnd("ctx");
  227. $recv($1)._acceptSend_("noDebugger");
  228. $recv($1)._whenSend_evaluate_("negate:",(function(num){
  229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  230. return $core.withContext(function($ctx2) {
  231. //>>excludeEnd("ctx");
  232. return $recv(num)._negated();
  233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  234. }, function($ctx2) {$ctx2.fillBlock({num:num},$ctx1,2)});
  235. //>>excludeEnd("ctx");
  236. }));
  237. $recv(teachable)._help();
  238. $recv(teachable)._doit();
  239. $recv(teachable)._noDebugger();
  240. $recv(teachable)._negate_((120));
  241. return self;
  242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  243. }, function($ctx1) {$ctx1.fill(self,"example",{teachable:teachable})});
  244. //>>excludeEnd("ctx");
  245. }; }),
  246. $globals.Teachable.a$cls);
  247. $core.addClass("TestCase", $globals.Object, ["testSelector", "asyncTimeout", "context"], "SUnit");
  248. //>>excludeStart("ide", pragmas.excludeIdeData);
  249. $globals.TestCase.comment="I am an implementation of the command pattern to run a test.\x0a\x0a## API\x0a\x0aMy instances are created with the class method `#selector:`,\x0apassing the symbol that names the method to be executed when the test case runs.\x0a\x0aWhen you discover a new fixture, subclass `TestCase` and create a `#test...` method for the first test.\x0aAs that method develops and more `#test...` methods are added, you will find yourself refactoring temps\x0ainto instance variables for the objects in the fixture and overriding `#setUp` to initialize these variables.\x0aAs required, override `#tearDown` to nil references, release objects and deallocate.";
  250. //>>excludeEnd("ide");
  251. $core.addMethod(
  252. $core.method({
  253. selector: "assert:",
  254. protocol: "testing",
  255. //>>excludeStart("ide", pragmas.excludeIdeData);
  256. args: ["aBoolean"],
  257. source: "assert: aBoolean\x0a\x09self assert: aBoolean description: 'Assertion failed'",
  258. referencedClasses: [],
  259. //>>excludeEnd("ide");
  260. pragmas: [],
  261. messageSends: ["assert:description:"]
  262. }, function ($methodClass){ return function (aBoolean){
  263. var self=this,$self=this;
  264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  265. return $core.withContext(function($ctx1) {
  266. //>>excludeEnd("ctx");
  267. $self._assert_description_(aBoolean,"Assertion failed");
  268. return self;
  269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  270. }, function($ctx1) {$ctx1.fill(self,"assert:",{aBoolean:aBoolean})});
  271. //>>excludeEnd("ctx");
  272. }; }),
  273. $globals.TestCase);
  274. $core.addMethod(
  275. $core.method({
  276. selector: "assert:description:",
  277. protocol: "testing",
  278. //>>excludeStart("ide", pragmas.excludeIdeData);
  279. args: ["aBoolean", "aString"],
  280. source: "assert: aBoolean description: aString\x0a\x09aBoolean ifFalse: [ self signalFailure: aString ]",
  281. referencedClasses: [],
  282. //>>excludeEnd("ide");
  283. pragmas: [],
  284. messageSends: ["ifFalse:", "signalFailure:"]
  285. }, function ($methodClass){ return function (aBoolean,aString){
  286. var self=this,$self=this;
  287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  288. return $core.withContext(function($ctx1) {
  289. //>>excludeEnd("ctx");
  290. if(!$core.assert(aBoolean)){
  291. $self._signalFailure_(aString);
  292. }
  293. return self;
  294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  295. }, function($ctx1) {$ctx1.fill(self,"assert:description:",{aBoolean:aBoolean,aString:aString})});
  296. //>>excludeEnd("ctx");
  297. }; }),
  298. $globals.TestCase);
  299. $core.addMethod(
  300. $core.method({
  301. selector: "assert:equals:",
  302. protocol: "testing",
  303. //>>excludeStart("ide", pragmas.excludeIdeData);
  304. args: ["actual", "expected"],
  305. source: "assert: actual equals: expected\x0a\x09^ self assert: (actual = expected) description: 'Expected: ', expected printString, ' but was: ', actual printString",
  306. referencedClasses: [],
  307. //>>excludeEnd("ide");
  308. pragmas: [],
  309. messageSends: ["assert:description:", "=", ",", "printString"]
  310. }, function ($methodClass){ return function (actual,expected){
  311. var self=this,$self=this;
  312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  313. return $core.withContext(function($ctx1) {
  314. //>>excludeEnd("ctx");
  315. var $1,$5,$4,$3,$2;
  316. $1=$recv(actual).__eq(expected);
  317. $5=$recv(expected)._printString();
  318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  319. $ctx1.sendIdx["printString"]=1;
  320. //>>excludeEnd("ctx");
  321. $4="Expected: ".__comma($5);
  322. $3=$recv($4).__comma(" but was: ");
  323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  324. $ctx1.sendIdx[","]=2;
  325. //>>excludeEnd("ctx");
  326. $2=$recv($3).__comma($recv(actual)._printString());
  327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  328. $ctx1.sendIdx[","]=1;
  329. //>>excludeEnd("ctx");
  330. return $self._assert_description_($1,$2);
  331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  332. }, function($ctx1) {$ctx1.fill(self,"assert:equals:",{actual:actual,expected:expected})});
  333. //>>excludeEnd("ctx");
  334. }; }),
  335. $globals.TestCase);
  336. $core.addMethod(
  337. $core.method({
  338. selector: "async:",
  339. protocol: "async",
  340. //>>excludeStart("ide", pragmas.excludeIdeData);
  341. args: ["aBlock"],
  342. source: "async: aBlock\x0a\x09| c |\x0a\x09self errorIfNotAsync: '#async'.\x0a\x09c := context.\x0a\x09^ [ self isAsync ifTrue: [ c execute: aBlock ] ]",
  343. referencedClasses: [],
  344. //>>excludeEnd("ide");
  345. pragmas: [],
  346. messageSends: ["errorIfNotAsync:", "ifTrue:", "isAsync", "execute:"]
  347. }, function ($methodClass){ return function (aBlock){
  348. var self=this,$self=this;
  349. var c;
  350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  351. return $core.withContext(function($ctx1) {
  352. //>>excludeEnd("ctx");
  353. var $1;
  354. $self._errorIfNotAsync_("#async");
  355. c=$self.context;
  356. return (function(){
  357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  358. return $core.withContext(function($ctx2) {
  359. //>>excludeEnd("ctx");
  360. $1=$self._isAsync();
  361. if($core.assert($1)){
  362. return $recv(c)._execute_(aBlock);
  363. }
  364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  365. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  366. //>>excludeEnd("ctx");
  367. });
  368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  369. }, function($ctx1) {$ctx1.fill(self,"async:",{aBlock:aBlock,c:c})});
  370. //>>excludeEnd("ctx");
  371. }; }),
  372. $globals.TestCase);
  373. $core.addMethod(
  374. $core.method({
  375. selector: "context:",
  376. protocol: "accessing",
  377. //>>excludeStart("ide", pragmas.excludeIdeData);
  378. args: ["aRunningTestContext"],
  379. source: "context: aRunningTestContext\x0a\x09context := aRunningTestContext",
  380. referencedClasses: [],
  381. //>>excludeEnd("ide");
  382. pragmas: [],
  383. messageSends: []
  384. }, function ($methodClass){ return function (aRunningTestContext){
  385. var self=this,$self=this;
  386. $self.context=aRunningTestContext;
  387. return self;
  388. }; }),
  389. $globals.TestCase);
  390. $core.addMethod(
  391. $core.method({
  392. selector: "deny:",
  393. protocol: "testing",
  394. //>>excludeStart("ide", pragmas.excludeIdeData);
  395. args: ["aBoolean"],
  396. source: "deny: aBoolean\x0a\x09self assert: aBoolean not",
  397. referencedClasses: [],
  398. //>>excludeEnd("ide");
  399. pragmas: [],
  400. messageSends: ["assert:", "not"]
  401. }, function ($methodClass){ return function (aBoolean){
  402. var self=this,$self=this;
  403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  404. return $core.withContext(function($ctx1) {
  405. //>>excludeEnd("ctx");
  406. $self._assert_($recv(aBoolean)._not());
  407. return self;
  408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  409. }, function($ctx1) {$ctx1.fill(self,"deny:",{aBoolean:aBoolean})});
  410. //>>excludeEnd("ctx");
  411. }; }),
  412. $globals.TestCase);
  413. $core.addMethod(
  414. $core.method({
  415. selector: "errorIfNotAsync:",
  416. protocol: "error handling",
  417. //>>excludeStart("ide", pragmas.excludeIdeData);
  418. args: ["aString"],
  419. source: "errorIfNotAsync: aString\x0a\x09self isAsync ifFalse: [\x0a\x09\x09self error: aString, ' used without prior #timeout:' ]",
  420. referencedClasses: [],
  421. //>>excludeEnd("ide");
  422. pragmas: [],
  423. messageSends: ["ifFalse:", "isAsync", "error:", ","]
  424. }, function ($methodClass){ return function (aString){
  425. var self=this,$self=this;
  426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  427. return $core.withContext(function($ctx1) {
  428. //>>excludeEnd("ctx");
  429. var $1;
  430. $1=$self._isAsync();
  431. if(!$core.assert($1)){
  432. $self._error_($recv(aString).__comma(" used without prior #timeout:"));
  433. }
  434. return self;
  435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  436. }, function($ctx1) {$ctx1.fill(self,"errorIfNotAsync:",{aString:aString})});
  437. //>>excludeEnd("ctx");
  438. }; }),
  439. $globals.TestCase);
  440. $core.addMethod(
  441. $core.method({
  442. selector: "finished",
  443. protocol: "async",
  444. //>>excludeStart("ide", pragmas.excludeIdeData);
  445. args: [],
  446. source: "finished\x0a\x09self errorIfNotAsync: '#finished'.\x0a\x09asyncTimeout := nil",
  447. referencedClasses: [],
  448. //>>excludeEnd("ide");
  449. pragmas: [],
  450. messageSends: ["errorIfNotAsync:"]
  451. }, function ($methodClass){ return function (){
  452. var self=this,$self=this;
  453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  454. return $core.withContext(function($ctx1) {
  455. //>>excludeEnd("ctx");
  456. $self._errorIfNotAsync_("#finished");
  457. $self.asyncTimeout=nil;
  458. return self;
  459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  460. }, function($ctx1) {$ctx1.fill(self,"finished",{})});
  461. //>>excludeEnd("ctx");
  462. }; }),
  463. $globals.TestCase);
  464. $core.addMethod(
  465. $core.method({
  466. selector: "isAsync",
  467. protocol: "testing",
  468. //>>excludeStart("ide", pragmas.excludeIdeData);
  469. args: [],
  470. source: "isAsync\x0a\x09^ asyncTimeout notNil",
  471. referencedClasses: [],
  472. //>>excludeEnd("ide");
  473. pragmas: [],
  474. messageSends: ["notNil"]
  475. }, function ($methodClass){ return function (){
  476. var self=this,$self=this;
  477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  478. return $core.withContext(function($ctx1) {
  479. //>>excludeEnd("ctx");
  480. return $recv($self.asyncTimeout)._notNil();
  481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  482. }, function($ctx1) {$ctx1.fill(self,"isAsync",{})});
  483. //>>excludeEnd("ctx");
  484. }; }),
  485. $globals.TestCase);
  486. $core.addMethod(
  487. $core.method({
  488. selector: "performTest",
  489. protocol: "running",
  490. //>>excludeStart("ide", pragmas.excludeIdeData);
  491. args: [],
  492. source: "performTest\x0a\x09asyncTimeout := nil.\x0a\x09self perform: self selector",
  493. referencedClasses: [],
  494. //>>excludeEnd("ide");
  495. pragmas: [],
  496. messageSends: ["perform:", "selector"]
  497. }, function ($methodClass){ return function (){
  498. var self=this,$self=this;
  499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  500. return $core.withContext(function($ctx1) {
  501. //>>excludeEnd("ctx");
  502. $self.asyncTimeout=nil;
  503. $self._perform_($self._selector());
  504. return self;
  505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  506. }, function($ctx1) {$ctx1.fill(self,"performTest",{})});
  507. //>>excludeEnd("ctx");
  508. }; }),
  509. $globals.TestCase);
  510. $core.addMethod(
  511. $core.method({
  512. selector: "runCase",
  513. protocol: "running",
  514. //>>excludeStart("ide", pragmas.excludeIdeData);
  515. args: [],
  516. source: "runCase\x0a\x09\x22Runs a test case in isolated context, leaking all errors.\x22\x0a\x0a\x09(TestContext testCase: self) start",
  517. referencedClasses: ["TestContext"],
  518. //>>excludeEnd("ide");
  519. pragmas: [],
  520. messageSends: ["start", "testCase:"]
  521. }, function ($methodClass){ return function (){
  522. var self=this,$self=this;
  523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  524. return $core.withContext(function($ctx1) {
  525. //>>excludeEnd("ctx");
  526. $recv($recv($globals.TestContext)._testCase_(self))._start();
  527. return self;
  528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  529. }, function($ctx1) {$ctx1.fill(self,"runCase",{})});
  530. //>>excludeEnd("ctx");
  531. }; }),
  532. $globals.TestCase);
  533. $core.addMethod(
  534. $core.method({
  535. selector: "selector",
  536. protocol: "accessing",
  537. //>>excludeStart("ide", pragmas.excludeIdeData);
  538. args: [],
  539. source: "selector\x0a\x09^ testSelector",
  540. referencedClasses: [],
  541. //>>excludeEnd("ide");
  542. pragmas: [],
  543. messageSends: []
  544. }, function ($methodClass){ return function (){
  545. var self=this,$self=this;
  546. return $self.testSelector;
  547. }; }),
  548. $globals.TestCase);
  549. $core.addMethod(
  550. $core.method({
  551. selector: "setTestSelector:",
  552. protocol: "accessing",
  553. //>>excludeStart("ide", pragmas.excludeIdeData);
  554. args: ["aSelector"],
  555. source: "setTestSelector: aSelector\x0a\x09testSelector := aSelector",
  556. referencedClasses: [],
  557. //>>excludeEnd("ide");
  558. pragmas: [],
  559. messageSends: []
  560. }, function ($methodClass){ return function (aSelector){
  561. var self=this,$self=this;
  562. $self.testSelector=aSelector;
  563. return self;
  564. }; }),
  565. $globals.TestCase);
  566. $core.addMethod(
  567. $core.method({
  568. selector: "setUp",
  569. protocol: "running",
  570. //>>excludeStart("ide", pragmas.excludeIdeData);
  571. args: [],
  572. source: "setUp",
  573. referencedClasses: [],
  574. //>>excludeEnd("ide");
  575. pragmas: [],
  576. messageSends: []
  577. }, function ($methodClass){ return function (){
  578. var self=this,$self=this;
  579. return self;
  580. }; }),
  581. $globals.TestCase);
  582. $core.addMethod(
  583. $core.method({
  584. selector: "should:",
  585. protocol: "testing",
  586. //>>excludeStart("ide", pragmas.excludeIdeData);
  587. args: ["aBlock"],
  588. source: "should: aBlock\x0a\x09self assert: aBlock value",
  589. referencedClasses: [],
  590. //>>excludeEnd("ide");
  591. pragmas: [],
  592. messageSends: ["assert:", "value"]
  593. }, function ($methodClass){ return function (aBlock){
  594. var self=this,$self=this;
  595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  596. return $core.withContext(function($ctx1) {
  597. //>>excludeEnd("ctx");
  598. $self._assert_($recv(aBlock)._value());
  599. return self;
  600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  601. }, function($ctx1) {$ctx1.fill(self,"should:",{aBlock:aBlock})});
  602. //>>excludeEnd("ctx");
  603. }; }),
  604. $globals.TestCase);
  605. $core.addMethod(
  606. $core.method({
  607. selector: "should:raise:",
  608. protocol: "testing",
  609. //>>excludeStart("ide", pragmas.excludeIdeData);
  610. args: ["aBlock", "anExceptionClass"],
  611. source: "should: aBlock raise: anExceptionClass\x0a\x09self assert: ([ aBlock value. false ]\x0a\x09\x09on: anExceptionClass\x0a\x09\x09do: [ :ex | true ])",
  612. referencedClasses: [],
  613. //>>excludeEnd("ide");
  614. pragmas: [],
  615. messageSends: ["assert:", "on:do:", "value"]
  616. }, function ($methodClass){ return function (aBlock,anExceptionClass){
  617. var self=this,$self=this;
  618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  619. return $core.withContext(function($ctx1) {
  620. //>>excludeEnd("ctx");
  621. $self._assert_($recv((function(){
  622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  623. return $core.withContext(function($ctx2) {
  624. //>>excludeEnd("ctx");
  625. $recv(aBlock)._value();
  626. return false;
  627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  628. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  629. //>>excludeEnd("ctx");
  630. }))._on_do_(anExceptionClass,(function(ex){
  631. return true;
  632. })));
  633. return self;
  634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  635. }, function($ctx1) {$ctx1.fill(self,"should:raise:",{aBlock:aBlock,anExceptionClass:anExceptionClass})});
  636. //>>excludeEnd("ctx");
  637. }; }),
  638. $globals.TestCase);
  639. $core.addMethod(
  640. $core.method({
  641. selector: "shouldnt:raise:",
  642. protocol: "testing",
  643. //>>excludeStart("ide", pragmas.excludeIdeData);
  644. args: ["aBlock", "anExceptionClass"],
  645. source: "shouldnt: aBlock raise: anExceptionClass\x0a\x09self assert: ([ aBlock value. true ]\x0a\x09\x09on: anExceptionClass\x0a\x09\x09do: [ :ex | false ])",
  646. referencedClasses: [],
  647. //>>excludeEnd("ide");
  648. pragmas: [],
  649. messageSends: ["assert:", "on:do:", "value"]
  650. }, function ($methodClass){ return function (aBlock,anExceptionClass){
  651. var self=this,$self=this;
  652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  653. return $core.withContext(function($ctx1) {
  654. //>>excludeEnd("ctx");
  655. $self._assert_($recv((function(){
  656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  657. return $core.withContext(function($ctx2) {
  658. //>>excludeEnd("ctx");
  659. $recv(aBlock)._value();
  660. return true;
  661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  662. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  663. //>>excludeEnd("ctx");
  664. }))._on_do_(anExceptionClass,(function(ex){
  665. return false;
  666. })));
  667. return self;
  668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  669. }, function($ctx1) {$ctx1.fill(self,"shouldnt:raise:",{aBlock:aBlock,anExceptionClass:anExceptionClass})});
  670. //>>excludeEnd("ctx");
  671. }; }),
  672. $globals.TestCase);
  673. $core.addMethod(
  674. $core.method({
  675. selector: "signalFailure:",
  676. protocol: "private",
  677. //>>excludeStart("ide", pragmas.excludeIdeData);
  678. args: ["aString"],
  679. source: "signalFailure: aString\x0a\x09TestFailure new\x0a\x09\x09messageText: aString;\x0a\x09\x09signal",
  680. referencedClasses: ["TestFailure"],
  681. //>>excludeEnd("ide");
  682. pragmas: [],
  683. messageSends: ["messageText:", "new", "signal"]
  684. }, function ($methodClass){ return function (aString){
  685. var self=this,$self=this;
  686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  687. return $core.withContext(function($ctx1) {
  688. //>>excludeEnd("ctx");
  689. var $1;
  690. $1=$recv($globals.TestFailure)._new();
  691. $recv($1)._messageText_(aString);
  692. $recv($1)._signal();
  693. return self;
  694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  695. }, function($ctx1) {$ctx1.fill(self,"signalFailure:",{aString:aString})});
  696. //>>excludeEnd("ctx");
  697. }; }),
  698. $globals.TestCase);
  699. $core.addMethod(
  700. $core.method({
  701. selector: "tearDown",
  702. protocol: "running",
  703. //>>excludeStart("ide", pragmas.excludeIdeData);
  704. args: [],
  705. source: "tearDown",
  706. referencedClasses: [],
  707. //>>excludeEnd("ide");
  708. pragmas: [],
  709. messageSends: []
  710. }, function ($methodClass){ return function (){
  711. var self=this,$self=this;
  712. return self;
  713. }; }),
  714. $globals.TestCase);
  715. $core.addMethod(
  716. $core.method({
  717. selector: "timeout:",
  718. protocol: "async",
  719. //>>excludeStart("ide", pragmas.excludeIdeData);
  720. args: ["aNumber"],
  721. source: "timeout: aNumber\x0a\x09\x22Set a grace time timeout in milliseconds to run the test asynchronously\x22\x0a\x09\x0a\x09asyncTimeout ifNotNil: [ asyncTimeout clearTimeout ].\x0a\x09\x0a\x09\x22to allow #async: message send without throwing an error\x22\x0a\x09asyncTimeout := 0.\x0a\x09\x0a\x09asyncTimeout := (self async: [\x0a\x09\x09self assert: false description: 'SUnit grace time exhausted' ])\x0a\x09\x09\x09valueWithTimeout: aNumber",
  722. referencedClasses: [],
  723. //>>excludeEnd("ide");
  724. pragmas: [],
  725. messageSends: ["ifNotNil:", "clearTimeout", "valueWithTimeout:", "async:", "assert:description:"]
  726. }, function ($methodClass){ return function (aNumber){
  727. var self=this,$self=this;
  728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  729. return $core.withContext(function($ctx1) {
  730. //>>excludeEnd("ctx");
  731. var $1,$receiver;
  732. $1=$self.asyncTimeout;
  733. if(($receiver = $1) == null || $receiver.a$nil){
  734. $1;
  735. } else {
  736. $recv($self.asyncTimeout)._clearTimeout();
  737. }
  738. $self.asyncTimeout=(0);
  739. $self.asyncTimeout=$recv($self._async_((function(){
  740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  741. return $core.withContext(function($ctx2) {
  742. //>>excludeEnd("ctx");
  743. return $self._assert_description_(false,"SUnit grace time exhausted");
  744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  745. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  746. //>>excludeEnd("ctx");
  747. })))._valueWithTimeout_(aNumber);
  748. return self;
  749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  750. }, function($ctx1) {$ctx1.fill(self,"timeout:",{aNumber:aNumber})});
  751. //>>excludeEnd("ctx");
  752. }; }),
  753. $globals.TestCase);
  754. $core.addMethod(
  755. $core.method({
  756. selector: "allTestSelectors",
  757. protocol: "accessing",
  758. //>>excludeStart("ide", pragmas.excludeIdeData);
  759. args: [],
  760. source: "allTestSelectors\x0a\x09| selectors |\x0a\x09selectors := self testSelectors.\x0a\x09self shouldInheritSelectors ifTrue: [\x0a\x09\x09selectors addAll: self superclass allTestSelectors ].\x0a\x09^ selectors",
  761. referencedClasses: [],
  762. //>>excludeEnd("ide");
  763. pragmas: [],
  764. messageSends: ["testSelectors", "ifTrue:", "shouldInheritSelectors", "addAll:", "allTestSelectors", "superclass"]
  765. }, function ($methodClass){ return function (){
  766. var self=this,$self=this;
  767. var selectors;
  768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  769. return $core.withContext(function($ctx1) {
  770. //>>excludeEnd("ctx");
  771. var $1;
  772. selectors=$self._testSelectors();
  773. $1=$self._shouldInheritSelectors();
  774. if($core.assert($1)){
  775. $recv(selectors)._addAll_($recv($self._superclass())._allTestSelectors());
  776. }
  777. return selectors;
  778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  779. }, function($ctx1) {$ctx1.fill(self,"allTestSelectors",{selectors:selectors})});
  780. //>>excludeEnd("ctx");
  781. }; }),
  782. $globals.TestCase.a$cls);
  783. $core.addMethod(
  784. $core.method({
  785. selector: "buildSuite",
  786. protocol: "accessing",
  787. //>>excludeStart("ide", pragmas.excludeIdeData);
  788. args: [],
  789. source: "buildSuite\x0a\x09^ self allTestSelectors collect: [ :each | self selector: each ]",
  790. referencedClasses: [],
  791. //>>excludeEnd("ide");
  792. pragmas: [],
  793. messageSends: ["collect:", "allTestSelectors", "selector:"]
  794. }, function ($methodClass){ return function (){
  795. var self=this,$self=this;
  796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  797. return $core.withContext(function($ctx1) {
  798. //>>excludeEnd("ctx");
  799. return $recv($self._allTestSelectors())._collect_((function(each){
  800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  801. return $core.withContext(function($ctx2) {
  802. //>>excludeEnd("ctx");
  803. return $self._selector_(each);
  804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  805. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  806. //>>excludeEnd("ctx");
  807. }));
  808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  809. }, function($ctx1) {$ctx1.fill(self,"buildSuite",{})});
  810. //>>excludeEnd("ctx");
  811. }; }),
  812. $globals.TestCase.a$cls);
  813. $core.addMethod(
  814. $core.method({
  815. selector: "classTag",
  816. protocol: "accessing",
  817. //>>excludeStart("ide", pragmas.excludeIdeData);
  818. args: [],
  819. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'test'",
  820. referencedClasses: [],
  821. //>>excludeEnd("ide");
  822. pragmas: [],
  823. messageSends: []
  824. }, function ($methodClass){ return function (){
  825. var self=this,$self=this;
  826. return "test";
  827. }; }),
  828. $globals.TestCase.a$cls);
  829. $core.addMethod(
  830. $core.method({
  831. selector: "isAbstract",
  832. protocol: "testing",
  833. //>>excludeStart("ide", pragmas.excludeIdeData);
  834. args: [],
  835. source: "isAbstract\x0a\x09^ self name = TestCase name",
  836. referencedClasses: ["TestCase"],
  837. //>>excludeEnd("ide");
  838. pragmas: [],
  839. messageSends: ["=", "name"]
  840. }, function ($methodClass){ return function (){
  841. var self=this,$self=this;
  842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  843. return $core.withContext(function($ctx1) {
  844. //>>excludeEnd("ctx");
  845. var $1;
  846. $1=$self._name();
  847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  848. $ctx1.sendIdx["name"]=1;
  849. //>>excludeEnd("ctx");
  850. return $recv($1).__eq($recv($globals.TestCase)._name());
  851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  852. }, function($ctx1) {$ctx1.fill(self,"isAbstract",{})});
  853. //>>excludeEnd("ctx");
  854. }; }),
  855. $globals.TestCase.a$cls);
  856. $core.addMethod(
  857. $core.method({
  858. selector: "isTestClass",
  859. protocol: "testing",
  860. //>>excludeStart("ide", pragmas.excludeIdeData);
  861. args: [],
  862. source: "isTestClass\x0a\x09^ self isAbstract not",
  863. referencedClasses: [],
  864. //>>excludeEnd("ide");
  865. pragmas: [],
  866. messageSends: ["not", "isAbstract"]
  867. }, function ($methodClass){ return function (){
  868. var self=this,$self=this;
  869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  870. return $core.withContext(function($ctx1) {
  871. //>>excludeEnd("ctx");
  872. return $recv($self._isAbstract())._not();
  873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  874. }, function($ctx1) {$ctx1.fill(self,"isTestClass",{})});
  875. //>>excludeEnd("ctx");
  876. }; }),
  877. $globals.TestCase.a$cls);
  878. $core.addMethod(
  879. $core.method({
  880. selector: "lookupHierarchyRoot",
  881. protocol: "accessing",
  882. //>>excludeStart("ide", pragmas.excludeIdeData);
  883. args: [],
  884. source: "lookupHierarchyRoot\x0a\x09^ TestCase",
  885. referencedClasses: ["TestCase"],
  886. //>>excludeEnd("ide");
  887. pragmas: [],
  888. messageSends: []
  889. }, function ($methodClass){ return function (){
  890. var self=this,$self=this;
  891. return $globals.TestCase;
  892. }; }),
  893. $globals.TestCase.a$cls);
  894. $core.addMethod(
  895. $core.method({
  896. selector: "selector:",
  897. protocol: "accessing",
  898. //>>excludeStart("ide", pragmas.excludeIdeData);
  899. args: ["aSelector"],
  900. source: "selector: aSelector\x0a\x09^ self new\x0a\x09\x09setTestSelector: aSelector;\x0a\x09\x09yourself",
  901. referencedClasses: [],
  902. //>>excludeEnd("ide");
  903. pragmas: [],
  904. messageSends: ["setTestSelector:", "new", "yourself"]
  905. }, function ($methodClass){ return function (aSelector){
  906. var self=this,$self=this;
  907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  908. return $core.withContext(function($ctx1) {
  909. //>>excludeEnd("ctx");
  910. var $1;
  911. $1=$self._new();
  912. $recv($1)._setTestSelector_(aSelector);
  913. return $recv($1)._yourself();
  914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  915. }, function($ctx1) {$ctx1.fill(self,"selector:",{aSelector:aSelector})});
  916. //>>excludeEnd("ctx");
  917. }; }),
  918. $globals.TestCase.a$cls);
  919. $core.addMethod(
  920. $core.method({
  921. selector: "shouldInheritSelectors",
  922. protocol: "testing",
  923. //>>excludeStart("ide", pragmas.excludeIdeData);
  924. args: [],
  925. source: "shouldInheritSelectors\x0a\x09^ self ~= self lookupHierarchyRoot",
  926. referencedClasses: [],
  927. //>>excludeEnd("ide");
  928. pragmas: [],
  929. messageSends: ["~=", "lookupHierarchyRoot"]
  930. }, function ($methodClass){ return function (){
  931. var self=this,$self=this;
  932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  933. return $core.withContext(function($ctx1) {
  934. //>>excludeEnd("ctx");
  935. return $self.__tild_eq($self._lookupHierarchyRoot());
  936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  937. }, function($ctx1) {$ctx1.fill(self,"shouldInheritSelectors",{})});
  938. //>>excludeEnd("ctx");
  939. }; }),
  940. $globals.TestCase.a$cls);
  941. $core.addMethod(
  942. $core.method({
  943. selector: "testSelectors",
  944. protocol: "accessing",
  945. //>>excludeStart("ide", pragmas.excludeIdeData);
  946. args: [],
  947. source: "testSelectors\x0a\x09^ self methodDictionary keys select: [ :each | each match: '^test' ]",
  948. referencedClasses: [],
  949. //>>excludeEnd("ide");
  950. pragmas: [],
  951. messageSends: ["select:", "keys", "methodDictionary", "match:"]
  952. }, function ($methodClass){ return function (){
  953. var self=this,$self=this;
  954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  955. return $core.withContext(function($ctx1) {
  956. //>>excludeEnd("ctx");
  957. return $recv($recv($self._methodDictionary())._keys())._select_((function(each){
  958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  959. return $core.withContext(function($ctx2) {
  960. //>>excludeEnd("ctx");
  961. return $recv(each)._match_("^test");
  962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  963. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  964. //>>excludeEnd("ctx");
  965. }));
  966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  967. }, function($ctx1) {$ctx1.fill(self,"testSelectors",{})});
  968. //>>excludeEnd("ctx");
  969. }; }),
  970. $globals.TestCase.a$cls);
  971. $core.addClass("TestContext", $globals.Object, ["testCase"], "SUnit");
  972. //>>excludeStart("ide", pragmas.excludeIdeData);
  973. $globals.TestContext.comment="I govern running a particular test case.\x0a\x0aMy main added value is `#execute:` method which runs a block as a part of test case (restores context, nilling it afterwards, cleaning/calling `#tearDown` as appropriate for sync/async scenario).";
  974. //>>excludeEnd("ide");
  975. $core.addMethod(
  976. $core.method({
  977. selector: "execute:",
  978. protocol: "running",
  979. //>>excludeStart("ide", pragmas.excludeIdeData);
  980. args: ["aBlock"],
  981. source: "execute: aBlock\x0a\x09| failed |\x0a\x09\x0a\x09testCase context: self.\x0a\x09[\x0a\x09\x09failed := true.\x0a\x09\x09aBlock value.\x0a\x09\x09failed := false\x0a\x09]\x0a\x09\x09ensure: [\x0a\x09\x09\x09testCase context: nil.\x0a\x09\x09\x09\x0a\x09\x09\x09(failed and: [ testCase isAsync ]) ifTrue: [\x0a\x09\x09\x09\x09testCase finished ].\x0a\x09\x09\x09testCase isAsync ifFalse: [\x0a\x09\x09\x09\x09testCase tearDown ] ]",
  982. referencedClasses: [],
  983. //>>excludeEnd("ide");
  984. pragmas: [],
  985. messageSends: ["context:", "ensure:", "value", "ifTrue:", "and:", "isAsync", "finished", "ifFalse:", "tearDown"]
  986. }, function ($methodClass){ return function (aBlock){
  987. var self=this,$self=this;
  988. var failed;
  989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  990. return $core.withContext(function($ctx1) {
  991. //>>excludeEnd("ctx");
  992. var $1,$2;
  993. $recv($self.testCase)._context_(self);
  994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  995. $ctx1.sendIdx["context:"]=1;
  996. //>>excludeEnd("ctx");
  997. $recv((function(){
  998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  999. return $core.withContext(function($ctx2) {
  1000. //>>excludeEnd("ctx");
  1001. failed=true;
  1002. $recv(aBlock)._value();
  1003. failed=false;
  1004. return failed;
  1005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1006. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  1007. //>>excludeEnd("ctx");
  1008. }))._ensure_((function(){
  1009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1010. return $core.withContext(function($ctx2) {
  1011. //>>excludeEnd("ctx");
  1012. $recv($self.testCase)._context_(nil);
  1013. $1=$recv(failed)._and_((function(){
  1014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1015. return $core.withContext(function($ctx3) {
  1016. //>>excludeEnd("ctx");
  1017. return $recv($self.testCase)._isAsync();
  1018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1019. $ctx3.sendIdx["isAsync"]=1;
  1020. //>>excludeEnd("ctx");
  1021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1022. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  1023. //>>excludeEnd("ctx");
  1024. }));
  1025. if($core.assert($1)){
  1026. $recv($self.testCase)._finished();
  1027. }
  1028. $2=$recv($self.testCase)._isAsync();
  1029. if(!$core.assert($2)){
  1030. return $recv($self.testCase)._tearDown();
  1031. }
  1032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1033. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  1034. //>>excludeEnd("ctx");
  1035. }));
  1036. return self;
  1037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1038. }, function($ctx1) {$ctx1.fill(self,"execute:",{aBlock:aBlock,failed:failed})});
  1039. //>>excludeEnd("ctx");
  1040. }; }),
  1041. $globals.TestContext);
  1042. $core.addMethod(
  1043. $core.method({
  1044. selector: "start",
  1045. protocol: "running",
  1046. //>>excludeStart("ide", pragmas.excludeIdeData);
  1047. args: [],
  1048. source: "start\x0a\x09self execute: [\x0a\x09\x09testCase setUp.\x0a\x09\x09testCase performTest ]",
  1049. referencedClasses: [],
  1050. //>>excludeEnd("ide");
  1051. pragmas: [],
  1052. messageSends: ["execute:", "setUp", "performTest"]
  1053. }, function ($methodClass){ return function (){
  1054. var self=this,$self=this;
  1055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1056. return $core.withContext(function($ctx1) {
  1057. //>>excludeEnd("ctx");
  1058. $self._execute_((function(){
  1059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1060. return $core.withContext(function($ctx2) {
  1061. //>>excludeEnd("ctx");
  1062. $recv($self.testCase)._setUp();
  1063. return $recv($self.testCase)._performTest();
  1064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1065. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  1066. //>>excludeEnd("ctx");
  1067. }));
  1068. return self;
  1069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1070. }, function($ctx1) {$ctx1.fill(self,"start",{})});
  1071. //>>excludeEnd("ctx");
  1072. }; }),
  1073. $globals.TestContext);
  1074. $core.addMethod(
  1075. $core.method({
  1076. selector: "testCase:",
  1077. protocol: "accessing",
  1078. //>>excludeStart("ide", pragmas.excludeIdeData);
  1079. args: ["aTestCase"],
  1080. source: "testCase: aTestCase\x0a\x09testCase := aTestCase",
  1081. referencedClasses: [],
  1082. //>>excludeEnd("ide");
  1083. pragmas: [],
  1084. messageSends: []
  1085. }, function ($methodClass){ return function (aTestCase){
  1086. var self=this,$self=this;
  1087. $self.testCase=aTestCase;
  1088. return self;
  1089. }; }),
  1090. $globals.TestContext);
  1091. $core.addMethod(
  1092. $core.method({
  1093. selector: "testCase:",
  1094. protocol: "instance creation",
  1095. //>>excludeStart("ide", pragmas.excludeIdeData);
  1096. args: ["aTestCase"],
  1097. source: "testCase: aTestCase\x0a\x09^ self new\x0a\x09\x09testCase: aTestCase;\x0a\x09\x09yourself",
  1098. referencedClasses: [],
  1099. //>>excludeEnd("ide");
  1100. pragmas: [],
  1101. messageSends: ["testCase:", "new", "yourself"]
  1102. }, function ($methodClass){ return function (aTestCase){
  1103. var self=this,$self=this;
  1104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1105. return $core.withContext(function($ctx1) {
  1106. //>>excludeEnd("ctx");
  1107. var $1;
  1108. $1=$self._new();
  1109. $recv($1)._testCase_(aTestCase);
  1110. return $recv($1)._yourself();
  1111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1112. }, function($ctx1) {$ctx1.fill(self,"testCase:",{aTestCase:aTestCase})});
  1113. //>>excludeEnd("ctx");
  1114. }; }),
  1115. $globals.TestContext.a$cls);
  1116. $core.addClass("ReportingTestContext", $globals.TestContext, ["finished", "result"], "SUnit");
  1117. //>>excludeStart("ide", pragmas.excludeIdeData);
  1118. $globals.ReportingTestContext.comment="I add `TestResult` reporting to `TestContext`.\x0a\x0aErrors are caught and save into a `TestResult`,\x0aWhen test case is finished (which can be later for async tests), a callback block is executed; this is used by a `TestSuiteRunner`.";
  1119. //>>excludeEnd("ide");
  1120. $core.addMethod(
  1121. $core.method({
  1122. selector: "execute:",
  1123. protocol: "running",
  1124. //>>excludeStart("ide", pragmas.excludeIdeData);
  1125. args: ["aBlock"],
  1126. source: "execute: aBlock\x0a\x09[\x0a\x09\x09self withErrorReporting: [ super execute: aBlock ]\x0a\x09]\x0a\x09\x09ensure: [\x0a\x09\x09\x09testCase isAsync ifFalse: [\x0a\x09\x09\x09\x09result increaseRuns. finished value ] ]",
  1127. referencedClasses: [],
  1128. //>>excludeEnd("ide");
  1129. pragmas: [],
  1130. messageSends: ["ensure:", "withErrorReporting:", "execute:", "ifFalse:", "isAsync", "increaseRuns", "value"]
  1131. }, function ($methodClass){ return function (aBlock){
  1132. var self=this,$self=this;
  1133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1134. return $core.withContext(function($ctx1) {
  1135. //>>excludeEnd("ctx");
  1136. var $1;
  1137. $recv((function(){
  1138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1139. return $core.withContext(function($ctx2) {
  1140. //>>excludeEnd("ctx");
  1141. return $self._withErrorReporting_((function(){
  1142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1143. return $core.withContext(function($ctx3) {
  1144. //>>excludeEnd("ctx");
  1145. return (
  1146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1147. $ctx3.supercall = true,
  1148. //>>excludeEnd("ctx");
  1149. ($methodClass.superclass||$boot.nilAsClass).fn.prototype._execute_.call($self,aBlock));
  1150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1151. $ctx3.supercall = false;
  1152. //>>excludeEnd("ctx");;
  1153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1154. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  1155. //>>excludeEnd("ctx");
  1156. }));
  1157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1158. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  1159. //>>excludeEnd("ctx");
  1160. }))._ensure_((function(){
  1161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1162. return $core.withContext(function($ctx2) {
  1163. //>>excludeEnd("ctx");
  1164. $1=$recv($self.testCase)._isAsync();
  1165. if(!$core.assert($1)){
  1166. $recv($self.result)._increaseRuns();
  1167. return $recv($self.finished)._value();
  1168. }
  1169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1170. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  1171. //>>excludeEnd("ctx");
  1172. }));
  1173. return self;
  1174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1175. }, function($ctx1) {$ctx1.fill(self,"execute:",{aBlock:aBlock})});
  1176. //>>excludeEnd("ctx");
  1177. }; }),
  1178. $globals.ReportingTestContext);
  1179. $core.addMethod(
  1180. $core.method({
  1181. selector: "finished:",
  1182. protocol: "accessing",
  1183. //>>excludeStart("ide", pragmas.excludeIdeData);
  1184. args: ["aBlock"],
  1185. source: "finished: aBlock\x0a\x09finished := aBlock",
  1186. referencedClasses: [],
  1187. //>>excludeEnd("ide");
  1188. pragmas: [],
  1189. messageSends: []
  1190. }, function ($methodClass){ return function (aBlock){
  1191. var self=this,$self=this;
  1192. $self.finished=aBlock;
  1193. return self;
  1194. }; }),
  1195. $globals.ReportingTestContext);
  1196. $core.addMethod(
  1197. $core.method({
  1198. selector: "result:",
  1199. protocol: "accessing",
  1200. //>>excludeStart("ide", pragmas.excludeIdeData);
  1201. args: ["aTestResult"],
  1202. source: "result: aTestResult\x0a\x09result := aTestResult",
  1203. referencedClasses: [],
  1204. //>>excludeEnd("ide");
  1205. pragmas: [],
  1206. messageSends: []
  1207. }, function ($methodClass){ return function (aTestResult){
  1208. var self=this,$self=this;
  1209. $self.result=aTestResult;
  1210. return self;
  1211. }; }),
  1212. $globals.ReportingTestContext);
  1213. $core.addMethod(
  1214. $core.method({
  1215. selector: "withErrorReporting:",
  1216. protocol: "private",
  1217. //>>excludeStart("ide", pragmas.excludeIdeData);
  1218. args: ["aBlock"],
  1219. source: "withErrorReporting: aBlock\x0a\x09[ aBlock\x0a\x09\x09on: TestFailure\x0a\x09\x09do: [ :ex | result addFailure: testCase ]\x0a\x09]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :ex | result addError: testCase ]",
  1220. referencedClasses: ["TestFailure", "Error"],
  1221. //>>excludeEnd("ide");
  1222. pragmas: [],
  1223. messageSends: ["on:do:", "addFailure:", "addError:"]
  1224. }, function ($methodClass){ return function (aBlock){
  1225. var self=this,$self=this;
  1226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1227. return $core.withContext(function($ctx1) {
  1228. //>>excludeEnd("ctx");
  1229. $recv((function(){
  1230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1231. return $core.withContext(function($ctx2) {
  1232. //>>excludeEnd("ctx");
  1233. return $recv(aBlock)._on_do_($globals.TestFailure,(function(ex){
  1234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1235. return $core.withContext(function($ctx3) {
  1236. //>>excludeEnd("ctx");
  1237. return $recv($self.result)._addFailure_($self.testCase);
  1238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1239. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,2)});
  1240. //>>excludeEnd("ctx");
  1241. }));
  1242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1243. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  1244. //>>excludeEnd("ctx");
  1245. }))._on_do_($globals.Error,(function(ex){
  1246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1247. return $core.withContext(function($ctx2) {
  1248. //>>excludeEnd("ctx");
  1249. return $recv($self.result)._addError_($self.testCase);
  1250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1251. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,3)});
  1252. //>>excludeEnd("ctx");
  1253. }));
  1254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1255. $ctx1.sendIdx["on:do:"]=1;
  1256. //>>excludeEnd("ctx");
  1257. return self;
  1258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1259. }, function($ctx1) {$ctx1.fill(self,"withErrorReporting:",{aBlock:aBlock})});
  1260. //>>excludeEnd("ctx");
  1261. }; }),
  1262. $globals.ReportingTestContext);
  1263. $core.addMethod(
  1264. $core.method({
  1265. selector: "testCase:result:finished:",
  1266. protocol: "instance creation",
  1267. //>>excludeStart("ide", pragmas.excludeIdeData);
  1268. args: ["aTestCase", "aTestResult", "aBlock"],
  1269. source: "testCase: aTestCase result: aTestResult finished: aBlock\x0a\x09^ (super testCase: aTestCase)\x0a\x09\x09result: aTestResult;\x0a\x09\x09finished: aBlock;\x0a\x09\x09yourself",
  1270. referencedClasses: [],
  1271. //>>excludeEnd("ide");
  1272. pragmas: [],
  1273. messageSends: ["result:", "testCase:", "finished:", "yourself"]
  1274. }, function ($methodClass){ return function (aTestCase,aTestResult,aBlock){
  1275. var self=this,$self=this;
  1276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1277. return $core.withContext(function($ctx1) {
  1278. //>>excludeEnd("ctx");
  1279. var $1;
  1280. $1=(
  1281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1282. $ctx1.supercall = true,
  1283. //>>excludeEnd("ctx");
  1284. ($methodClass.superclass||$boot.nilAsClass).fn.prototype._testCase_.call($self,aTestCase));
  1285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1286. $ctx1.supercall = false;
  1287. //>>excludeEnd("ctx");;
  1288. $recv($1)._result_(aTestResult);
  1289. $recv($1)._finished_(aBlock);
  1290. return $recv($1)._yourself();
  1291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1292. }, function($ctx1) {$ctx1.fill(self,"testCase:result:finished:",{aTestCase:aTestCase,aTestResult:aTestResult,aBlock:aBlock})});
  1293. //>>excludeEnd("ctx");
  1294. }; }),
  1295. $globals.ReportingTestContext.a$cls);
  1296. $core.addClass("TestFailure", $globals.Error, [], "SUnit");
  1297. //>>excludeStart("ide", pragmas.excludeIdeData);
  1298. $globals.TestFailure.comment="I am raised when the boolean parameter of an #`assert:` or `#deny:` call is the opposite of what the assertion claims.\x0a\x0aThe test framework distinguishes between failures and errors.\x0aA failure is an event whose possibiity is explicitly anticipated and checked for in an assertion,\x0awhereas an error is an unanticipated problem like a division by 0 or an index out of bounds.";
  1299. //>>excludeEnd("ide");
  1300. $core.addClass("TestResult", $globals.Object, ["timestamp", "runs", "errors", "failures", "total"], "SUnit");
  1301. //>>excludeStart("ide", pragmas.excludeIdeData);
  1302. $globals.TestResult.comment="I implement the collecting parameter pattern for running a bunch of tests.\x0a\x0aMy instances hold tests that have run, sorted into the result categories of passed, failures and errors.\x0a\x0a`TestResult` is an interesting object to subclass or substitute. `#runCase:` is the external protocol you need to reproduce";
  1303. //>>excludeEnd("ide");
  1304. $core.addMethod(
  1305. $core.method({
  1306. selector: "addError:",
  1307. protocol: "accessing",
  1308. //>>excludeStart("ide", pragmas.excludeIdeData);
  1309. args: ["anError"],
  1310. source: "addError: anError\x0a\x09self errors add: anError",
  1311. referencedClasses: [],
  1312. //>>excludeEnd("ide");
  1313. pragmas: [],
  1314. messageSends: ["add:", "errors"]
  1315. }, function ($methodClass){ return function (anError){
  1316. var self=this,$self=this;
  1317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1318. return $core.withContext(function($ctx1) {
  1319. //>>excludeEnd("ctx");
  1320. $recv($self._errors())._add_(anError);
  1321. return self;
  1322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1323. }, function($ctx1) {$ctx1.fill(self,"addError:",{anError:anError})});
  1324. //>>excludeEnd("ctx");
  1325. }; }),
  1326. $globals.TestResult);
  1327. $core.addMethod(
  1328. $core.method({
  1329. selector: "addFailure:",
  1330. protocol: "accessing",
  1331. //>>excludeStart("ide", pragmas.excludeIdeData);
  1332. args: ["aFailure"],
  1333. source: "addFailure: aFailure\x0a\x09self failures add: aFailure",
  1334. referencedClasses: [],
  1335. //>>excludeEnd("ide");
  1336. pragmas: [],
  1337. messageSends: ["add:", "failures"]
  1338. }, function ($methodClass){ return function (aFailure){
  1339. var self=this,$self=this;
  1340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1341. return $core.withContext(function($ctx1) {
  1342. //>>excludeEnd("ctx");
  1343. $recv($self._failures())._add_(aFailure);
  1344. return self;
  1345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1346. }, function($ctx1) {$ctx1.fill(self,"addFailure:",{aFailure:aFailure})});
  1347. //>>excludeEnd("ctx");
  1348. }; }),
  1349. $globals.TestResult);
  1350. $core.addMethod(
  1351. $core.method({
  1352. selector: "errors",
  1353. protocol: "accessing",
  1354. //>>excludeStart("ide", pragmas.excludeIdeData);
  1355. args: [],
  1356. source: "errors\x0a\x09^ errors",
  1357. referencedClasses: [],
  1358. //>>excludeEnd("ide");
  1359. pragmas: [],
  1360. messageSends: []
  1361. }, function ($methodClass){ return function (){
  1362. var self=this,$self=this;
  1363. return $self.errors;
  1364. }; }),
  1365. $globals.TestResult);
  1366. $core.addMethod(
  1367. $core.method({
  1368. selector: "failures",
  1369. protocol: "accessing",
  1370. //>>excludeStart("ide", pragmas.excludeIdeData);
  1371. args: [],
  1372. source: "failures\x0a\x09^ failures",
  1373. referencedClasses: [],
  1374. //>>excludeEnd("ide");
  1375. pragmas: [],
  1376. messageSends: []
  1377. }, function ($methodClass){ return function (){
  1378. var self=this,$self=this;
  1379. return $self.failures;
  1380. }; }),
  1381. $globals.TestResult);
  1382. $core.addMethod(
  1383. $core.method({
  1384. selector: "increaseRuns",
  1385. protocol: "accessing",
  1386. //>>excludeStart("ide", pragmas.excludeIdeData);
  1387. args: [],
  1388. source: "increaseRuns\x0a\x09runs := runs + 1",
  1389. referencedClasses: [],
  1390. //>>excludeEnd("ide");
  1391. pragmas: [],
  1392. messageSends: ["+"]
  1393. }, function ($methodClass){ return function (){
  1394. var self=this,$self=this;
  1395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1396. return $core.withContext(function($ctx1) {
  1397. //>>excludeEnd("ctx");
  1398. $self.runs=$recv($self.runs).__plus((1));
  1399. return self;
  1400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1401. }, function($ctx1) {$ctx1.fill(self,"increaseRuns",{})});
  1402. //>>excludeEnd("ctx");
  1403. }; }),
  1404. $globals.TestResult);
  1405. $core.addMethod(
  1406. $core.method({
  1407. selector: "initialize",
  1408. protocol: "initialization",
  1409. //>>excludeStart("ide", pragmas.excludeIdeData);
  1410. args: [],
  1411. source: "initialize\x0a\x09super initialize.\x0a\x09timestamp := Date now.\x0a\x09runs := 0.\x0a\x09errors := Array new.\x0a\x09failures := Array new.\x0a\x09total := 0",
  1412. referencedClasses: ["Date", "Array"],
  1413. //>>excludeEnd("ide");
  1414. pragmas: [],
  1415. messageSends: ["initialize", "now", "new"]
  1416. }, function ($methodClass){ return function (){
  1417. var self=this,$self=this;
  1418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1419. return $core.withContext(function($ctx1) {
  1420. //>>excludeEnd("ctx");
  1421. (
  1422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1423. $ctx1.supercall = true,
  1424. //>>excludeEnd("ctx");
  1425. ($methodClass.superclass||$boot.nilAsClass).fn.prototype._initialize.call($self));
  1426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1427. $ctx1.supercall = false;
  1428. //>>excludeEnd("ctx");;
  1429. $self.timestamp=$recv($globals.Date)._now();
  1430. $self.runs=(0);
  1431. $self.errors=$recv($globals.Array)._new();
  1432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1433. $ctx1.sendIdx["new"]=1;
  1434. //>>excludeEnd("ctx");
  1435. $self.failures=$recv($globals.Array)._new();
  1436. $self.total=(0);
  1437. return self;
  1438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1439. }, function($ctx1) {$ctx1.fill(self,"initialize",{})});
  1440. //>>excludeEnd("ctx");
  1441. }; }),
  1442. $globals.TestResult);
  1443. $core.addMethod(
  1444. $core.method({
  1445. selector: "nextRunDo:",
  1446. protocol: "running",
  1447. //>>excludeStart("ide", pragmas.excludeIdeData);
  1448. args: ["aBlock"],
  1449. source: "nextRunDo: aBlock\x0a\x09\x22Runs aBlock with index of next run or does nothing if no more runs\x22\x0a\x09^ self runs == self total\x0a\x09\x09ifFalse: [ aBlock value: self runs + 1 ]",
  1450. referencedClasses: [],
  1451. //>>excludeEnd("ide");
  1452. pragmas: [],
  1453. messageSends: ["ifFalse:", "==", "runs", "total", "value:", "+"]
  1454. }, function ($methodClass){ return function (aBlock){
  1455. var self=this,$self=this;
  1456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1457. return $core.withContext(function($ctx1) {
  1458. //>>excludeEnd("ctx");
  1459. var $2,$1;
  1460. $2=$self._runs();
  1461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1462. $ctx1.sendIdx["runs"]=1;
  1463. //>>excludeEnd("ctx");
  1464. $1=$recv($2).__eq_eq($self._total());
  1465. if(!$core.assert($1)){
  1466. return $recv(aBlock)._value_($recv($self._runs()).__plus((1)));
  1467. }
  1468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1469. }, function($ctx1) {$ctx1.fill(self,"nextRunDo:",{aBlock:aBlock})});
  1470. //>>excludeEnd("ctx");
  1471. }; }),
  1472. $globals.TestResult);
  1473. $core.addMethod(
  1474. $core.method({
  1475. selector: "runCase:",
  1476. protocol: "running",
  1477. //>>excludeStart("ide", pragmas.excludeIdeData);
  1478. args: ["aTestCase"],
  1479. source: "runCase: aTestCase\x0a\x09[ [ self increaseRuns.\x0a\x09\x09aTestCase runCase ]\x0a\x09on: TestFailure do: [ :ex | self addFailure: aTestCase ]]\x0a\x09on: Error do: [ :ex | self addError: aTestCase ]",
  1480. referencedClasses: ["TestFailure", "Error"],
  1481. //>>excludeEnd("ide");
  1482. pragmas: [],
  1483. messageSends: ["on:do:", "increaseRuns", "runCase", "addFailure:", "addError:"]
  1484. }, function ($methodClass){ return function (aTestCase){
  1485. var self=this,$self=this;
  1486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1487. return $core.withContext(function($ctx1) {
  1488. //>>excludeEnd("ctx");
  1489. $recv((function(){
  1490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1491. return $core.withContext(function($ctx2) {
  1492. //>>excludeEnd("ctx");
  1493. return $recv((function(){
  1494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1495. return $core.withContext(function($ctx3) {
  1496. //>>excludeEnd("ctx");
  1497. $self._increaseRuns();
  1498. return $recv(aTestCase)._runCase();
  1499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1500. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  1501. //>>excludeEnd("ctx");
  1502. }))._on_do_($globals.TestFailure,(function(ex){
  1503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1504. return $core.withContext(function($ctx3) {
  1505. //>>excludeEnd("ctx");
  1506. return $self._addFailure_(aTestCase);
  1507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1508. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,3)});
  1509. //>>excludeEnd("ctx");
  1510. }));
  1511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1512. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  1513. //>>excludeEnd("ctx");
  1514. }))._on_do_($globals.Error,(function(ex){
  1515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1516. return $core.withContext(function($ctx2) {
  1517. //>>excludeEnd("ctx");
  1518. return $self._addError_(aTestCase);
  1519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1520. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,4)});
  1521. //>>excludeEnd("ctx");
  1522. }));
  1523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1524. $ctx1.sendIdx["on:do:"]=1;
  1525. //>>excludeEnd("ctx");
  1526. return self;
  1527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1528. }, function($ctx1) {$ctx1.fill(self,"runCase:",{aTestCase:aTestCase})});
  1529. //>>excludeEnd("ctx");
  1530. }; }),
  1531. $globals.TestResult);
  1532. $core.addMethod(
  1533. $core.method({
  1534. selector: "runs",
  1535. protocol: "accessing",
  1536. //>>excludeStart("ide", pragmas.excludeIdeData);
  1537. args: [],
  1538. source: "runs\x0a\x09^ runs",
  1539. referencedClasses: [],
  1540. //>>excludeEnd("ide");
  1541. pragmas: [],
  1542. messageSends: []
  1543. }, function ($methodClass){ return function (){
  1544. var self=this,$self=this;
  1545. return $self.runs;
  1546. }; }),
  1547. $globals.TestResult);
  1548. $core.addMethod(
  1549. $core.method({
  1550. selector: "status",
  1551. protocol: "accessing",
  1552. //>>excludeStart("ide", pragmas.excludeIdeData);
  1553. args: [],
  1554. source: "status\x0a\x09^ self errors ifNotEmpty: [ 'error' ] ifEmpty: [\x0a\x09\x09self failures ifNotEmpty: [ 'failure' ] ifEmpty: [\x0a\x09\x09\x09'success' ]]",
  1555. referencedClasses: [],
  1556. //>>excludeEnd("ide");
  1557. pragmas: [],
  1558. messageSends: ["ifNotEmpty:ifEmpty:", "errors", "failures"]
  1559. }, function ($methodClass){ return function (){
  1560. var self=this,$self=this;
  1561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1562. return $core.withContext(function($ctx1) {
  1563. //>>excludeEnd("ctx");
  1564. var $1;
  1565. $1=$recv($self._errors())._ifNotEmpty_ifEmpty_((function(){
  1566. return "error";
  1567. }),(function(){
  1568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1569. return $core.withContext(function($ctx2) {
  1570. //>>excludeEnd("ctx");
  1571. return $recv($self._failures())._ifNotEmpty_ifEmpty_((function(){
  1572. return "failure";
  1573. }),(function(){
  1574. return "success";
  1575. }));
  1576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1577. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  1578. //>>excludeEnd("ctx");
  1579. }));
  1580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1581. $ctx1.sendIdx["ifNotEmpty:ifEmpty:"]=1;
  1582. //>>excludeEnd("ctx");
  1583. return $1;
  1584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1585. }, function($ctx1) {$ctx1.fill(self,"status",{})});
  1586. //>>excludeEnd("ctx");
  1587. }; }),
  1588. $globals.TestResult);
  1589. $core.addMethod(
  1590. $core.method({
  1591. selector: "timestamp",
  1592. protocol: "accessing",
  1593. //>>excludeStart("ide", pragmas.excludeIdeData);
  1594. args: [],
  1595. source: "timestamp\x0a\x09^ timestamp",
  1596. referencedClasses: [],
  1597. //>>excludeEnd("ide");
  1598. pragmas: [],
  1599. messageSends: []
  1600. }, function ($methodClass){ return function (){
  1601. var self=this,$self=this;
  1602. return $self.timestamp;
  1603. }; }),
  1604. $globals.TestResult);
  1605. $core.addMethod(
  1606. $core.method({
  1607. selector: "total",
  1608. protocol: "accessing",
  1609. //>>excludeStart("ide", pragmas.excludeIdeData);
  1610. args: [],
  1611. source: "total\x0a\x09^ total",
  1612. referencedClasses: [],
  1613. //>>excludeEnd("ide");
  1614. pragmas: [],
  1615. messageSends: []
  1616. }, function ($methodClass){ return function (){
  1617. var self=this,$self=this;
  1618. return $self.total;
  1619. }; }),
  1620. $globals.TestResult);
  1621. $core.addMethod(
  1622. $core.method({
  1623. selector: "total:",
  1624. protocol: "accessing",
  1625. //>>excludeStart("ide", pragmas.excludeIdeData);
  1626. args: ["aNumber"],
  1627. source: "total: aNumber\x0a\x09total := aNumber",
  1628. referencedClasses: [],
  1629. //>>excludeEnd("ide");
  1630. pragmas: [],
  1631. messageSends: []
  1632. }, function ($methodClass){ return function (aNumber){
  1633. var self=this,$self=this;
  1634. $self.total=aNumber;
  1635. return self;
  1636. }; }),
  1637. $globals.TestResult);
  1638. $core.addClass("TestSuiteRunner", $globals.Object, ["suite", "result", "announcer", "runNextTest"], "SUnit");
  1639. //>>excludeStart("ide", pragmas.excludeIdeData);
  1640. $globals.TestSuiteRunner.comment="I am responsible for running a collection (`suite`) of tests.\x0a\x0a## API\x0a\x0aInstances should be created using the class-side `#on:` method, taking a collection of tests to run as parameter.\x0aTo run the test suite, use `#run`.";
  1641. //>>excludeEnd("ide");
  1642. $core.addMethod(
  1643. $core.method({
  1644. selector: "announcer",
  1645. protocol: "accessing",
  1646. //>>excludeStart("ide", pragmas.excludeIdeData);
  1647. args: [],
  1648. source: "announcer\x0a\x09^ announcer",
  1649. referencedClasses: [],
  1650. //>>excludeEnd("ide");
  1651. pragmas: [],
  1652. messageSends: []
  1653. }, function ($methodClass){ return function (){
  1654. var self=this,$self=this;
  1655. return $self.announcer;
  1656. }; }),
  1657. $globals.TestSuiteRunner);
  1658. $core.addMethod(
  1659. $core.method({
  1660. selector: "contextOf:",
  1661. protocol: "private",
  1662. //>>excludeStart("ide", pragmas.excludeIdeData);
  1663. args: ["anInteger"],
  1664. source: "contextOf: anInteger\x0a\x09^ ReportingTestContext testCase: (suite at: anInteger) result: result finished: [ self resume ]",
  1665. referencedClasses: ["ReportingTestContext"],
  1666. //>>excludeEnd("ide");
  1667. pragmas: [],
  1668. messageSends: ["testCase:result:finished:", "at:", "resume"]
  1669. }, function ($methodClass){ return function (anInteger){
  1670. var self=this,$self=this;
  1671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1672. return $core.withContext(function($ctx1) {
  1673. //>>excludeEnd("ctx");
  1674. return $recv($globals.ReportingTestContext)._testCase_result_finished_($recv($self.suite)._at_(anInteger),$self.result,(function(){
  1675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1676. return $core.withContext(function($ctx2) {
  1677. //>>excludeEnd("ctx");
  1678. return $self._resume();
  1679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1680. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  1681. //>>excludeEnd("ctx");
  1682. }));
  1683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1684. }, function($ctx1) {$ctx1.fill(self,"contextOf:",{anInteger:anInteger})});
  1685. //>>excludeEnd("ctx");
  1686. }; }),
  1687. $globals.TestSuiteRunner);
  1688. $core.addMethod(
  1689. $core.method({
  1690. selector: "initialize",
  1691. protocol: "initialization",
  1692. //>>excludeStart("ide", pragmas.excludeIdeData);
  1693. args: [],
  1694. source: "initialize\x0a\x09super initialize.\x0a\x09announcer := Announcer new.\x0a\x09result := TestResult new.\x0a\x09runNextTest := [ | runs | runs := result runs. runs < result total ifTrue: [ (self contextOf: runs + 1) start ] ].",
  1695. referencedClasses: ["Announcer", "TestResult"],
  1696. //>>excludeEnd("ide");
  1697. pragmas: [],
  1698. messageSends: ["initialize", "new", "runs", "ifTrue:", "<", "total", "start", "contextOf:", "+"]
  1699. }, function ($methodClass){ return function (){
  1700. var self=this,$self=this;
  1701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1702. return $core.withContext(function($ctx1) {
  1703. //>>excludeEnd("ctx");
  1704. var $1;
  1705. (
  1706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1707. $ctx1.supercall = true,
  1708. //>>excludeEnd("ctx");
  1709. ($methodClass.superclass||$boot.nilAsClass).fn.prototype._initialize.call($self));
  1710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1711. $ctx1.supercall = false;
  1712. //>>excludeEnd("ctx");;
  1713. $self.announcer=$recv($globals.Announcer)._new();
  1714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1715. $ctx1.sendIdx["new"]=1;
  1716. //>>excludeEnd("ctx");
  1717. $self.result=$recv($globals.TestResult)._new();
  1718. $self.runNextTest=(function(){
  1719. var runs;
  1720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1721. return $core.withContext(function($ctx2) {
  1722. //>>excludeEnd("ctx");
  1723. runs=$recv($self.result)._runs();
  1724. $1=$recv(runs).__lt($recv($self.result)._total());
  1725. if($core.assert($1)){
  1726. return $recv($self._contextOf_($recv(runs).__plus((1))))._start();
  1727. }
  1728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1729. }, function($ctx2) {$ctx2.fillBlock({runs:runs},$ctx1,1)});
  1730. //>>excludeEnd("ctx");
  1731. });
  1732. return self;
  1733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1734. }, function($ctx1) {$ctx1.fill(self,"initialize",{})});
  1735. //>>excludeEnd("ctx");
  1736. }; }),
  1737. $globals.TestSuiteRunner);
  1738. $core.addMethod(
  1739. $core.method({
  1740. selector: "result",
  1741. protocol: "accessing",
  1742. //>>excludeStart("ide", pragmas.excludeIdeData);
  1743. args: [],
  1744. source: "result\x0a\x09^ result",
  1745. referencedClasses: [],
  1746. //>>excludeEnd("ide");
  1747. pragmas: [],
  1748. messageSends: []
  1749. }, function ($methodClass){ return function (){
  1750. var self=this,$self=this;
  1751. return $self.result;
  1752. }; }),
  1753. $globals.TestSuiteRunner);
  1754. $core.addMethod(
  1755. $core.method({
  1756. selector: "resume",
  1757. protocol: "actions",
  1758. //>>excludeStart("ide", pragmas.excludeIdeData);
  1759. args: [],
  1760. source: "resume\x0a\x09runNextTest fork.\x0a\x09announcer announce: (ResultAnnouncement new result: result)",
  1761. referencedClasses: ["ResultAnnouncement"],
  1762. //>>excludeEnd("ide");
  1763. pragmas: [],
  1764. messageSends: ["fork", "announce:", "result:", "new"]
  1765. }, function ($methodClass){ return function (){
  1766. var self=this,$self=this;
  1767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1768. return $core.withContext(function($ctx1) {
  1769. //>>excludeEnd("ctx");
  1770. $recv($self.runNextTest)._fork();
  1771. $recv($self.announcer)._announce_($recv($recv($globals.ResultAnnouncement)._new())._result_($self.result));
  1772. return self;
  1773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1774. }, function($ctx1) {$ctx1.fill(self,"resume",{})});
  1775. //>>excludeEnd("ctx");
  1776. }; }),
  1777. $globals.TestSuiteRunner);
  1778. $core.addMethod(
  1779. $core.method({
  1780. selector: "run",
  1781. protocol: "actions",
  1782. //>>excludeStart("ide", pragmas.excludeIdeData);
  1783. args: [],
  1784. source: "run\x0a\x09result total: suite size.\x0a\x09self resume",
  1785. referencedClasses: [],
  1786. //>>excludeEnd("ide");
  1787. pragmas: [],
  1788. messageSends: ["total:", "size", "resume"]
  1789. }, function ($methodClass){ return function (){
  1790. var self=this,$self=this;
  1791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1792. return $core.withContext(function($ctx1) {
  1793. //>>excludeEnd("ctx");
  1794. $recv($self.result)._total_($recv($self.suite)._size());
  1795. $self._resume();
  1796. return self;
  1797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1798. }, function($ctx1) {$ctx1.fill(self,"run",{})});
  1799. //>>excludeEnd("ctx");
  1800. }; }),
  1801. $globals.TestSuiteRunner);
  1802. $core.addMethod(
  1803. $core.method({
  1804. selector: "suite:",
  1805. protocol: "accessing",
  1806. //>>excludeStart("ide", pragmas.excludeIdeData);
  1807. args: ["aCollection"],
  1808. source: "suite: aCollection\x0a\x09suite := aCollection",
  1809. referencedClasses: [],
  1810. //>>excludeEnd("ide");
  1811. pragmas: [],
  1812. messageSends: []
  1813. }, function ($methodClass){ return function (aCollection){
  1814. var self=this,$self=this;
  1815. $self.suite=aCollection;
  1816. return self;
  1817. }; }),
  1818. $globals.TestSuiteRunner);
  1819. $core.addMethod(
  1820. $core.method({
  1821. selector: "new",
  1822. protocol: "instance creation",
  1823. //>>excludeStart("ide", pragmas.excludeIdeData);
  1824. args: [],
  1825. source: "new\x0a\x09self shouldNotImplement",
  1826. referencedClasses: [],
  1827. //>>excludeEnd("ide");
  1828. pragmas: [],
  1829. messageSends: ["shouldNotImplement"]
  1830. }, function ($methodClass){ return function (){
  1831. var self=this,$self=this;
  1832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1833. return $core.withContext(function($ctx1) {
  1834. //>>excludeEnd("ctx");
  1835. $self._shouldNotImplement();
  1836. return self;
  1837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1838. }, function($ctx1) {$ctx1.fill(self,"new",{})});
  1839. //>>excludeEnd("ctx");
  1840. }; }),
  1841. $globals.TestSuiteRunner.a$cls);
  1842. $core.addMethod(
  1843. $core.method({
  1844. selector: "on:",
  1845. protocol: "instance creation",
  1846. //>>excludeStart("ide", pragmas.excludeIdeData);
  1847. args: ["aCollection"],
  1848. source: "on: aCollection\x0a\x09^ super new suite: aCollection",
  1849. referencedClasses: [],
  1850. //>>excludeEnd("ide");
  1851. pragmas: [],
  1852. messageSends: ["suite:", "new"]
  1853. }, function ($methodClass){ return function (aCollection){
  1854. var self=this,$self=this;
  1855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1856. return $core.withContext(function($ctx1) {
  1857. //>>excludeEnd("ctx");
  1858. var $1;
  1859. $1=(
  1860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1861. $ctx1.supercall = true,
  1862. //>>excludeEnd("ctx");
  1863. ($methodClass.superclass||$boot.nilAsClass).fn.prototype._new.call($self));
  1864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1865. $ctx1.supercall = false;
  1866. //>>excludeEnd("ctx");;
  1867. return $recv($1)._suite_(aCollection);
  1868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1869. }, function($ctx1) {$ctx1.fill(self,"on:",{aCollection:aCollection})});
  1870. //>>excludeEnd("ctx");
  1871. }; }),
  1872. $globals.TestSuiteRunner.a$cls);
  1873. $core.addMethod(
  1874. $core.method({
  1875. selector: "isTestPackage",
  1876. protocol: "*SUnit",
  1877. //>>excludeStart("ide", pragmas.excludeIdeData);
  1878. args: [],
  1879. source: "isTestPackage\x0a\x09^ self classes anySatisfy: [ :each | each isTestClass ]",
  1880. referencedClasses: [],
  1881. //>>excludeEnd("ide");
  1882. pragmas: [],
  1883. messageSends: ["anySatisfy:", "classes", "isTestClass"]
  1884. }, function ($methodClass){ return function (){
  1885. var self=this,$self=this;
  1886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1887. return $core.withContext(function($ctx1) {
  1888. //>>excludeEnd("ctx");
  1889. return $recv($self._classes())._anySatisfy_((function(each){
  1890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1891. return $core.withContext(function($ctx2) {
  1892. //>>excludeEnd("ctx");
  1893. return $recv(each)._isTestClass();
  1894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1895. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  1896. //>>excludeEnd("ctx");
  1897. }));
  1898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1899. }, function($ctx1) {$ctx1.fill(self,"isTestPackage",{})});
  1900. //>>excludeEnd("ctx");
  1901. }; }),
  1902. $globals.Package);
  1903. $core.addMethod(
  1904. $core.method({
  1905. selector: "isTestClass",
  1906. protocol: "*SUnit",
  1907. //>>excludeStart("ide", pragmas.excludeIdeData);
  1908. args: [],
  1909. source: "isTestClass\x0a\x09^ false",
  1910. referencedClasses: [],
  1911. //>>excludeEnd("ide");
  1912. pragmas: [],
  1913. messageSends: []
  1914. }, function ($methodClass){ return function (){
  1915. var self=this,$self=this;
  1916. return false;
  1917. }; }),
  1918. $globals.TBehaviorDefaults);
  1919. });