Alybaba-Tests.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. define("alybaba/Alybaba-Tests", ["amber/boot", "amber_core/SUnit", "axon/Axon"], function($boot){"use strict";
  2. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. $core.addPackage('Alybaba-Tests');
  4. $core.packages["Alybaba-Tests"].innerEval = function (expr) { return eval(expr); };
  5. $core.packages["Alybaba-Tests"].transport = {"type":"amd","amdNamespace":"alybaba"};
  6. $core.addClass('PlainConsumeTransformTest', $globals.TestCase, [], 'Alybaba-Tests');
  7. $core.addMethod(
  8. $core.method({
  9. selector: "testModelTransformSentToAxon",
  10. protocol: 'tests',
  11. fn: function (){
  12. var self=this;
  13. var model,result,axon;
  14. function $TestSpyAxon(){return $globals.TestSpyAxon||(typeof TestSpyAxon=="undefined"?nil:TestSpyAxon)}
  15. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16. return $core.withContext(function($ctx1) {
  17. //>>excludeEnd("ctx");
  18. result=nil;
  19. model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (3)]], "baz"],"moo","zoo"]);
  20. axon=$recv($TestSpyAxon())._new();
  21. $recv(axon)._registerIn_(model);
  22. $recv(model)._atLyst_transform_(["foo", (2)],(function(r){
  23. return "new";
  24. }));
  25. self._assert_equals_($recv(axon)._changedAspectLog(),[["foo", (2)]]);
  26. return self;
  27. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28. }, function($ctx1) {$ctx1.fill(self,"testModelTransformSentToAxon",{model:model,result:result,axon:axon},$globals.PlainConsumeTransformTest)});
  29. //>>excludeEnd("ctx");
  30. },
  31. //>>excludeStart("ide", pragmas.excludeIdeData);
  32. args: [],
  33. source: "testModelTransformSentToAxon\x0a| model result axon |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.\x0aaxon := TestSpyAxon new.\x0aaxon registerIn: model.\x0amodel atLyst: #(foo 2) transform: [:r | #new].\x0aself assert: axon changedAspectLog equals: #((foo 2))",
  34. referencedClasses: ["TestSpyAxon"],
  35. //>>excludeEnd("ide");
  36. messageSends: ["new", "registerIn:", "atLyst:transform:", "assert:equals:", "changedAspectLog"]
  37. }),
  38. $globals.PlainConsumeTransformTest);
  39. $core.addMethod(
  40. $core.method({
  41. selector: "testNontrivialModelGetsAppropriateValueForTransform",
  42. protocol: 'tests',
  43. fn: function (){
  44. var self=this;
  45. var model,result;
  46. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47. return $core.withContext(function($ctx1) {
  48. //>>excludeEnd("ctx");
  49. result=nil;
  50. model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (5)]], "baz"],"moo","zoo"]);
  51. $recv(model)._atLyst_transform_(["foo", (2)],(function(r){
  52. result=r;
  53. return result;
  54. }));
  55. self._assert_equals_([(1), [(2), (5)]],result);
  56. return self;
  57. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58. }, function($ctx1) {$ctx1.fill(self,"testNontrivialModelGetsAppropriateValueForTransform",{model:model,result:result},$globals.PlainConsumeTransformTest)});
  59. //>>excludeEnd("ctx");
  60. },
  61. //>>excludeStart("ide", pragmas.excludeIdeData);
  62. args: [],
  63. source: "testNontrivialModelGetsAppropriateValueForTransform\x0a| model result |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 5)) 'baz'). 'moo' -> 'zoo' }.\x0amodel atLyst: #(foo 2) transform: [:r | result := r].\x0aself assert: #(1 #(2 5)) equals: result",
  64. referencedClasses: [],
  65. //>>excludeEnd("ide");
  66. messageSends: ["atLyst:transform:", "assert:equals:"]
  67. }),
  68. $globals.PlainConsumeTransformTest);
  69. $core.addMethod(
  70. $core.method({
  71. selector: "testNontrivialModelReturnsAppropriateValue",
  72. protocol: 'tests',
  73. fn: function (){
  74. var self=this;
  75. var model,result;
  76. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77. return $core.withContext(function($ctx1) {
  78. //>>excludeEnd("ctx");
  79. result=nil;
  80. model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (3)]], "baz"],"moo","zoo"]);
  81. $recv(model)._atLyst_consume_(["foo", (2)],(function(r){
  82. result=r;
  83. return result;
  84. }));
  85. self._assert_equals_([(1), [(2), (3)]],result);
  86. return self;
  87. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  88. }, function($ctx1) {$ctx1.fill(self,"testNontrivialModelReturnsAppropriateValue",{model:model,result:result},$globals.PlainConsumeTransformTest)});
  89. //>>excludeEnd("ctx");
  90. },
  91. //>>excludeStart("ide", pragmas.excludeIdeData);
  92. args: [],
  93. source: "testNontrivialModelReturnsAppropriateValue\x0a| model result |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.\x0amodel atLyst: #(foo 2) consume: [:r | result := r].\x0aself assert: #(1 #(2 3)) equals: result",
  94. referencedClasses: [],
  95. //>>excludeEnd("ide");
  96. messageSends: ["atLyst:consume:", "assert:equals:"]
  97. }),
  98. $globals.PlainConsumeTransformTest);
  99. $core.addMethod(
  100. $core.method({
  101. selector: "testNontrivialModelTransformsAppropriateValue",
  102. protocol: 'tests',
  103. fn: function (){
  104. var self=this;
  105. var model,result;
  106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  107. return $core.withContext(function($ctx1) {
  108. //>>excludeEnd("ctx");
  109. result=nil;
  110. model=$globals.HashedCollection._newFromPairs_(["foo",["bar", [(1), [(2), (3)]], "baz"],"moo","zoo"]);
  111. $recv(model)._atLyst_transform_(["foo", (2)],(function(r){
  112. return "new";
  113. }));
  114. $recv(model)._atLyst_consume_(["foo", (2)],(function(r){
  115. result=r;
  116. return result;
  117. }));
  118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  119. $ctx1.sendIdx["atLyst:consume:"]=1;
  120. //>>excludeEnd("ctx");
  121. self._assert_equals_("new",result);
  122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  123. $ctx1.sendIdx["assert:equals:"]=1;
  124. //>>excludeEnd("ctx");
  125. $recv(model)._atLyst_consume_([],(function(r){
  126. result=r;
  127. return result;
  128. }));
  129. self._assert_equals_($globals.HashedCollection._newFromPairs_(["foo",["bar", "new", "baz"],"moo","zoo"]),result);
  130. return self;
  131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  132. }, function($ctx1) {$ctx1.fill(self,"testNontrivialModelTransformsAppropriateValue",{model:model,result:result},$globals.PlainConsumeTransformTest)});
  133. //>>excludeEnd("ctx");
  134. },
  135. //>>excludeStart("ide", pragmas.excludeIdeData);
  136. args: [],
  137. source: "testNontrivialModelTransformsAppropriateValue\x0a| model result |\x0aresult := nil.\x0amodel := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.\x0amodel atLyst: #(foo 2) transform: [:r | #new].\x0amodel atLyst: #(foo 2) consume: [:r | result := r].\x0aself assert: #new equals: result.\x0amodel atLyst: #() consume: [:r | result := r].\x0aself assert: #{ 'foo' -> #('bar' #new 'baz'). 'moo' -> 'zoo' } equals: result",
  138. referencedClasses: [],
  139. //>>excludeEnd("ide");
  140. messageSends: ["atLyst:transform:", "atLyst:consume:", "assert:equals:"]
  141. }),
  142. $globals.PlainConsumeTransformTest);
  143. $core.addMethod(
  144. $core.method({
  145. selector: "testRootModelCannotTransform",
  146. protocol: 'tests',
  147. fn: function (){
  148. var self=this;
  149. var model,result;
  150. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  152. return $core.withContext(function($ctx1) {
  153. //>>excludeEnd("ctx");
  154. result=nil;
  155. model=[(1), [(2), (3)]];
  156. self._should_raise_((function(){
  157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  158. return $core.withContext(function($ctx2) {
  159. //>>excludeEnd("ctx");
  160. return $recv(model)._atLyst_transform_([],(function(r){
  161. return $globals.HashedCollection._newFromPairs_(["foo",[(4), (5), (6)]]);
  162. }));
  163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  164. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  165. //>>excludeEnd("ctx");
  166. }),$Error());
  167. return self;
  168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  169. }, function($ctx1) {$ctx1.fill(self,"testRootModelCannotTransform",{model:model,result:result},$globals.PlainConsumeTransformTest)});
  170. //>>excludeEnd("ctx");
  171. },
  172. //>>excludeStart("ide", pragmas.excludeIdeData);
  173. args: [],
  174. source: "testRootModelCannotTransform\x0a| model result |\x0aresult := nil.\x0amodel := #(1 #(2 3)).\x0aself should: [ model atLyst: #() transform: [:r | #{'foo'->#(4 5 6)}] ] raise: Error",
  175. referencedClasses: ["Error"],
  176. //>>excludeEnd("ide");
  177. messageSends: ["should:raise:", "atLyst:transform:"]
  178. }),
  179. $globals.PlainConsumeTransformTest);
  180. $core.addMethod(
  181. $core.method({
  182. selector: "testRootModelReturnsDirectRoot",
  183. protocol: 'tests',
  184. fn: function (){
  185. var self=this;
  186. var model,result;
  187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  188. return $core.withContext(function($ctx1) {
  189. //>>excludeEnd("ctx");
  190. result=nil;
  191. model=[(1), [(2), (4)]];
  192. $recv(model)._atLyst_consume_([],(function(r){
  193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  194. return $core.withContext(function($ctx2) {
  195. //>>excludeEnd("ctx");
  196. return $recv(r)._at_put_((2),nil);
  197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  198. }, function($ctx2) {$ctx2.fillBlock({r:r},$ctx1,1)});
  199. //>>excludeEnd("ctx");
  200. }));
  201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  202. $ctx1.sendIdx["atLyst:consume:"]=1;
  203. //>>excludeEnd("ctx");
  204. $recv(model)._atLyst_consume_([],(function(r){
  205. result=r;
  206. return result;
  207. }));
  208. self._assert_equals_([(1), nil],result);
  209. return self;
  210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  211. }, function($ctx1) {$ctx1.fill(self,"testRootModelReturnsDirectRoot",{model:model,result:result},$globals.PlainConsumeTransformTest)});
  212. //>>excludeEnd("ctx");
  213. },
  214. //>>excludeStart("ide", pragmas.excludeIdeData);
  215. args: [],
  216. source: "testRootModelReturnsDirectRoot\x0a| model result |\x0aresult := nil.\x0amodel := #(1 #(2 4)).\x0amodel atLyst: #() consume: [:r | r at: 2 put: nil].\x0amodel atLyst: #() consume: [:r | result := r].\x0aself assert: #(1 nil) equals: result",
  217. referencedClasses: [],
  218. //>>excludeEnd("ide");
  219. messageSends: ["atLyst:consume:", "at:put:", "assert:equals:"]
  220. }),
  221. $globals.PlainConsumeTransformTest);
  222. $core.addMethod(
  223. $core.method({
  224. selector: "testRootModelReturnsRoot",
  225. protocol: 'tests',
  226. fn: function (){
  227. var self=this;
  228. var model,result;
  229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  230. return $core.withContext(function($ctx1) {
  231. //>>excludeEnd("ctx");
  232. result=nil;
  233. model=[(1), [(2), (3)]];
  234. $recv(model)._atLyst_consume_([],(function(r){
  235. result=r;
  236. return result;
  237. }));
  238. self._assert_equals_([(1), [(2), (3)]],result);
  239. return self;
  240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  241. }, function($ctx1) {$ctx1.fill(self,"testRootModelReturnsRoot",{model:model,result:result},$globals.PlainConsumeTransformTest)});
  242. //>>excludeEnd("ctx");
  243. },
  244. //>>excludeStart("ide", pragmas.excludeIdeData);
  245. args: [],
  246. source: "testRootModelReturnsRoot\x0a| model result |\x0aresult := nil.\x0amodel := #(1 #(2 3)).\x0amodel atLyst: #() consume: [:r | result := r].\x0aself assert: #(1 #(2 3)) equals: result",
  247. referencedClasses: [],
  248. //>>excludeEnd("ide");
  249. messageSends: ["atLyst:consume:", "assert:equals:"]
  250. }),
  251. $globals.PlainConsumeTransformTest);
  252. $core.addMethod(
  253. $core.method({
  254. selector: "testRootTransformBlockIsNotRun",
  255. protocol: 'tests',
  256. fn: function (){
  257. var self=this;
  258. var model,result;
  259. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  261. return $core.withContext(function($ctx1) {
  262. //>>excludeEnd("ctx");
  263. result=nil;
  264. model=[(2), [(1), (0)]];
  265. $recv((function(){
  266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  267. return $core.withContext(function($ctx2) {
  268. //>>excludeEnd("ctx");
  269. return $recv(model)._atLyst_transform_([],(function(r){
  270. result=r;
  271. return result;
  272. }));
  273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  274. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  275. //>>excludeEnd("ctx");
  276. }))._on_do_($Error(),(function(){
  277. }));
  278. self._assert_($recv(result)._isNil());
  279. return self;
  280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  281. }, function($ctx1) {$ctx1.fill(self,"testRootTransformBlockIsNotRun",{model:model,result:result},$globals.PlainConsumeTransformTest)});
  282. //>>excludeEnd("ctx");
  283. },
  284. //>>excludeStart("ide", pragmas.excludeIdeData);
  285. args: [],
  286. source: "testRootTransformBlockIsNotRun\x0a| model result |\x0aresult := nil.\x0amodel := #(2 #(1 0)).\x0a[model atLyst: #() transform: [:r | result := r]] on: Error do: [].\x0aself assert: result isNil",
  287. referencedClasses: ["Error"],
  288. //>>excludeEnd("ide");
  289. messageSends: ["on:do:", "atLyst:transform:", "assert:", "isNil"]
  290. }),
  291. $globals.PlainConsumeTransformTest);
  292. $core.addClass('TestSpyAxon', $globals.DumbAxon, ['changedAspectLog'], 'Alybaba-Tests');
  293. //>>excludeStart("ide", pragmas.excludeIdeData);
  294. $globals.TestSpyAxon.comment="I am an axon that logs changed aspects. I am useful in tests.";
  295. //>>excludeEnd("ide");
  296. $core.addMethod(
  297. $core.method({
  298. selector: "changed:",
  299. protocol: 'action',
  300. fn: function (anAspect){
  301. var self=this;
  302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  303. return $core.withContext(function($ctx1) {
  304. //>>excludeEnd("ctx");
  305. $recv(self["@changedAspectLog"])._add_(anAspect);
  306. return self;
  307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  308. }, function($ctx1) {$ctx1.fill(self,"changed:",{anAspect:anAspect},$globals.TestSpyAxon)});
  309. //>>excludeEnd("ctx");
  310. },
  311. //>>excludeStart("ide", pragmas.excludeIdeData);
  312. args: ["anAspect"],
  313. source: "changed: anAspect\x0a\x09changedAspectLog add: anAspect",
  314. referencedClasses: [],
  315. //>>excludeEnd("ide");
  316. messageSends: ["add:"]
  317. }),
  318. $globals.TestSpyAxon);
  319. $core.addMethod(
  320. $core.method({
  321. selector: "changedAspectLog",
  322. protocol: 'accessing',
  323. fn: function (){
  324. var self=this;
  325. var $1;
  326. $1=self["@changedAspectLog"];
  327. return $1;
  328. },
  329. //>>excludeStart("ide", pragmas.excludeIdeData);
  330. args: [],
  331. source: "changedAspectLog\x0a\x09^ changedAspectLog",
  332. referencedClasses: [],
  333. //>>excludeEnd("ide");
  334. messageSends: []
  335. }),
  336. $globals.TestSpyAxon);
  337. $core.addMethod(
  338. $core.method({
  339. selector: "changedAspectLog:",
  340. protocol: 'accessing',
  341. fn: function (anObject){
  342. var self=this;
  343. self["@changedAspectLog"]=anObject;
  344. return self;
  345. },
  346. //>>excludeStart("ide", pragmas.excludeIdeData);
  347. args: ["anObject"],
  348. source: "changedAspectLog: anObject\x0a\x09changedAspectLog := anObject",
  349. referencedClasses: [],
  350. //>>excludeEnd("ide");
  351. messageSends: []
  352. }),
  353. $globals.TestSpyAxon);
  354. $core.addMethod(
  355. $core.method({
  356. selector: "initialize",
  357. protocol: 'initialization',
  358. fn: function (){
  359. var self=this;
  360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  361. return $core.withContext(function($ctx1) {
  362. //>>excludeEnd("ctx");
  363. (
  364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  365. $ctx1.supercall = true,
  366. //>>excludeEnd("ctx");
  367. $globals.TestSpyAxon.superclass.fn.prototype._initialize.apply($recv(self), []));
  368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  369. $ctx1.supercall = false;
  370. //>>excludeEnd("ctx");;
  371. self["@changedAspectLog"]=[];
  372. return self;
  373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  374. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.TestSpyAxon)});
  375. //>>excludeEnd("ctx");
  376. },
  377. //>>excludeStart("ide", pragmas.excludeIdeData);
  378. args: [],
  379. source: "initialize\x0a\x09super initialize.\x0a\x0a\x09changedAspectLog := #()",
  380. referencedClasses: [],
  381. //>>excludeEnd("ide");
  382. messageSends: ["initialize"]
  383. }),
  384. $globals.TestSpyAxon);
  385. });