Silk-Tests.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. define("silk/Silk-Tests", ["amber/boot", "amber/domite/DOMite-Tests", "amber_core/SUnit"], function($boot){
  2. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. $core.addPackage('Silk-Tests');
  4. $core.packages["Silk-Tests"].innerEval = function (expr) { return eval(expr); };
  5. $core.packages["Silk-Tests"].transport = {"type":"amd","amdNamespace":"silk"};
  6. $core.addClass('SilkInheritedTest', $globals.DOMiteTest, [], 'Silk-Tests');
  7. $core.addMethod(
  8. $core.method({
  9. selector: "testedClass",
  10. protocol: 'fixture',
  11. fn: function (){
  12. var self=this;
  13. function $Silk(){return $globals.Silk||(typeof Silk=="undefined"?nil:Silk)}
  14. return $Silk();
  15. },
  16. //>>excludeStart("ide", pragmas.excludeIdeData);
  17. args: [],
  18. source: "testedClass\x0a\x09^ Silk",
  19. referencedClasses: ["Silk"],
  20. //>>excludeEnd("ide");
  21. messageSends: []
  22. }),
  23. $globals.SilkInheritedTest);
  24. $core.addClass('SilkTest', $globals.TestCase, ['fixtureDiv'], 'Silk-Tests');
  25. $core.addMethod(
  26. $core.method({
  27. selector: "assertBodyEndsWith:",
  28. protocol: 'fixture',
  29. fn: function (aString){
  30. var self=this;
  31. var sanitizedBody,sanitizedAssertion;
  32. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33. return $core.withContext(function($ctx1) {
  34. //>>excludeEnd("ctx");
  35. var $2,$3,$1;
  36. sanitizedBody=$recv($recv($recv(document)._body())._innerHTML())._replace_with_("\x5cs*","");
  37. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38. $ctx1.sendIdx["replace:with:"]=1;
  39. //>>excludeEnd("ctx");
  40. sanitizedAssertion=$recv(aString)._replace_with_("\x5cs*","");
  41. $2=$recv(sanitizedBody)._size();
  42. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43. $ctx1.sendIdx["size"]=1;
  44. //>>excludeEnd("ctx");
  45. $3=$recv(sanitizedAssertion)._size();
  46. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47. $ctx1.sendIdx["size"]=2;
  48. //>>excludeEnd("ctx");
  49. $1=$recv($2).__gt_eq($3);
  50. self._assert_($1);
  51. self._assert_equals_($recv(sanitizedBody)._last_($recv(sanitizedAssertion)._size()),sanitizedAssertion);
  52. return self;
  53. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54. }, function($ctx1) {$ctx1.fill(self,"assertBodyEndsWith:",{aString:aString,sanitizedBody:sanitizedBody,sanitizedAssertion:sanitizedAssertion},$globals.SilkTest)});
  55. //>>excludeEnd("ctx");
  56. },
  57. //>>excludeStart("ide", pragmas.excludeIdeData);
  58. args: ["aString"],
  59. source: "assertBodyEndsWith: aString\x0a\x09| sanitizedBody sanitizedAssertion |\x0a\x09sanitizedBody := document body innerHTML replace: '\x5cs*' with: ''.\x0a\x09sanitizedAssertion := aString replace: '\x5cs*' with: ''.\x0a\x09self assert: sanitizedBody size >= sanitizedAssertion size.\x0a\x09self\x0a\x09\x09assert: (sanitizedBody last: sanitizedAssertion size)\x0a\x09\x09equals: sanitizedAssertion",
  60. referencedClasses: [],
  61. //>>excludeEnd("ide");
  62. messageSends: ["replace:with:", "innerHTML", "body", "assert:", ">=", "size", "assert:equals:", "last:"]
  63. }),
  64. $globals.SilkTest);
  65. $core.addMethod(
  66. $core.method({
  67. selector: "setUp",
  68. protocol: 'fixture',
  69. fn: function (){
  70. var self=this;
  71. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72. return $core.withContext(function($ctx1) {
  73. //>>excludeEnd("ctx");
  74. self["@fixtureDiv"]=$recv(document)._createElement_("div");
  75. $recv($recv(document)._body())._appendChild_(self["@fixtureDiv"]);
  76. $recv(self["@fixtureDiv"])._setAttribute_to_("id","fixture");
  77. $recv(self["@fixtureDiv"])._innerHTML_("sentinel");
  78. return self;
  79. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.SilkTest)});
  81. //>>excludeEnd("ctx");
  82. },
  83. //>>excludeStart("ide", pragmas.excludeIdeData);
  84. args: [],
  85. source: "setUp\x0a\x09fixtureDiv := document createElement: 'div'.\x0a\x09document body appendChild: fixtureDiv.\x0a\x09fixtureDiv setAttribute: 'id' to: 'fixture'.\x0a\x09fixtureDiv innerHTML: 'sentinel'",
  86. referencedClasses: [],
  87. //>>excludeEnd("ide");
  88. messageSends: ["createElement:", "appendChild:", "body", "setAttribute:to:", "innerHTML:"]
  89. }),
  90. $globals.SilkTest);
  91. $core.addMethod(
  92. $core.method({
  93. selector: "tearDown",
  94. protocol: 'fixture',
  95. fn: function (){
  96. var self=this;
  97. var lastChild;
  98. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  99. return $core.withContext(function($ctx1) {
  100. //>>excludeEnd("ctx");
  101. var $1;
  102. $1=$recv(document)._body();
  103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  104. $ctx1.sendIdx["body"]=1;
  105. //>>excludeEnd("ctx");
  106. lastChild=$recv($1)._lastChild();
  107. self._assert_equals_(lastChild,self["@fixtureDiv"]);
  108. $recv($recv(document)._body())._removeChild_(lastChild);
  109. return self;
  110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  111. }, function($ctx1) {$ctx1.fill(self,"tearDown",{lastChild:lastChild},$globals.SilkTest)});
  112. //>>excludeEnd("ctx");
  113. },
  114. //>>excludeStart("ide", pragmas.excludeIdeData);
  115. args: [],
  116. source: "tearDown\x0a\x09| lastChild |\x0a\x09lastChild := document body lastChild.\x0a\x09self assert: lastChild equals: fixtureDiv.\x0a\x09document body removeChild: lastChild",
  117. referencedClasses: [],
  118. //>>excludeEnd("ide");
  119. messageSends: ["lastChild", "body", "assert:equals:", "removeChild:"]
  120. }),
  121. $globals.SilkTest);
  122. $core.addMethod(
  123. $core.method({
  124. selector: "testInsertTable",
  125. protocol: 'testing',
  126. fn: function (){
  127. var self=this;
  128. var d,tbl;
  129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  130. return $core.withContext(function($ctx1) {
  131. //>>excludeEnd("ctx");
  132. var $1,$2,$3,$4;
  133. d="html body div#fixture"._asSilk();
  134. tbl=$recv(d)._TABLE();
  135. $1=$recv(tbl)._TR();
  136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  137. $ctx1.sendIdx["TR"]=1;
  138. //>>excludeEnd("ctx");
  139. $recv($1)._TD_("A");
  140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  141. $ctx1.sendIdx["TD:"]=1;
  142. //>>excludeEnd("ctx");
  143. $recv($1)._TD_("B");
  144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  145. $ctx1.sendIdx["TD:"]=2;
  146. //>>excludeEnd("ctx");
  147. $2=$recv($1)._TD_("C");
  148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  149. $ctx1.sendIdx["TD:"]=3;
  150. //>>excludeEnd("ctx");
  151. $3=$recv(tbl)._TR();
  152. $recv($3)._TD_("D");
  153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  154. $ctx1.sendIdx["TD:"]=4;
  155. //>>excludeEnd("ctx");
  156. $recv($3)._TD_("E");
  157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  158. $ctx1.sendIdx["TD:"]=5;
  159. //>>excludeEnd("ctx");
  160. $4=$recv($3)._TD_("F");
  161. self._assertBodyEndsWith_(">sentinel<table><tr><td>A</td><td>B</td><td>C</td></tr><tr><td>D</td><td>E</td><td>F</td></tr></table></div>");
  162. return self;
  163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  164. }, function($ctx1) {$ctx1.fill(self,"testInsertTable",{d:d,tbl:tbl},$globals.SilkTest)});
  165. //>>excludeEnd("ctx");
  166. },
  167. //>>excludeStart("ide", pragmas.excludeIdeData);
  168. args: [],
  169. source: "testInsertTable\x0a\x0a\x09| d tbl |\x0a\x0a\x09d := 'html body div#fixture' asSilk.\x0a\x0a\x09tbl := d TABLE.\x0a\x0a\x09tbl TR\x0a\x09\x09TD: 'A';\x0a\x09\x09TD: 'B';\x0a\x09\x09TD: 'C'.\x0a\x09\x0a\x09tbl TR\x0a\x09\x09TD: 'D';\x0a\x09\x09TD: 'E';\x0a\x09\x09TD: 'F'.\x0a\x09\x0a\x09self assertBodyEndsWith: '>sentinel<table><tr><td>A</td><td>B</td><td>C</td></tr><tr><td>D</td><td>E</td><td>F</td></tr></table></div>'",
  170. referencedClasses: [],
  171. //>>excludeEnd("ide");
  172. messageSends: ["asSilk", "TABLE", "TD:", "TR", "assertBodyEndsWith:"]
  173. }),
  174. $globals.SilkTest);
  175. $core.addMethod(
  176. $core.method({
  177. selector: "testNestedDIVsWithAttributes",
  178. protocol: 'testing',
  179. fn: function (){
  180. var self=this;
  181. var s;
  182. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  184. return $core.withContext(function($ctx1) {
  185. //>>excludeEnd("ctx");
  186. var $2,$3,$1,$4,$6,$7,$5,$9,$10,$8;
  187. s="#fixture"._asSilk();
  188. $2=$recv(s)._DIV();
  189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  190. $ctx1.sendIdx["DIV"]=1;
  191. //>>excludeEnd("ctx");
  192. $3="id".__minus_gt("container");
  193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  194. $ctx1.sendIdx["->"]=1;
  195. //>>excludeEnd("ctx");
  196. $1=$recv($2).__lt_lt($3);
  197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  198. $ctx1.sendIdx["<<"]=2;
  199. //>>excludeEnd("ctx");
  200. $4="class".__minus_gt("mySilkContainerClass");
  201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  202. $ctx1.sendIdx["->"]=2;
  203. //>>excludeEnd("ctx");
  204. s=$recv($1).__lt_lt($4);
  205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  206. $ctx1.sendIdx["<<"]=1;
  207. //>>excludeEnd("ctx");
  208. $6=$recv(s)._DIV();
  209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  210. $ctx1.sendIdx["DIV"]=2;
  211. //>>excludeEnd("ctx");
  212. $7="id".__minus_gt("contentarea");
  213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  214. $ctx1.sendIdx["->"]=3;
  215. //>>excludeEnd("ctx");
  216. $5=$recv($6).__lt_lt($7);
  217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  218. $ctx1.sendIdx["<<"]=4;
  219. //>>excludeEnd("ctx");
  220. $recv($5).__lt_lt("here comes the content");
  221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  222. $ctx1.sendIdx["<<"]=3;
  223. //>>excludeEnd("ctx");
  224. $9=$recv(s)._DIV();
  225. $10="id".__minus_gt("toolbar");
  226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  227. $ctx1.sendIdx["->"]=4;
  228. //>>excludeEnd("ctx");
  229. $8=$recv($9).__lt_lt($10);
  230. s=$recv($8).__lt_lt("class".__minus_gt("myToolbarClass"));
  231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  232. $ctx1.sendIdx["<<"]=5;
  233. //>>excludeEnd("ctx");
  234. $recv($recv(s)._BUTTON_("do something"))._on_bind_("click",(function(){
  235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  236. return $core.withContext(function($ctx2) {
  237. //>>excludeEnd("ctx");
  238. return $recv($Transcript())._show_("button pressed");
  239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  240. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  241. //>>excludeEnd("ctx");
  242. }));
  243. self._assertBodyEndsWith_(">sentinel<div class=\x22mySilkContainerClass\x22 id=\x22container\x22><div id=\x22contentarea\x22>here comes the content</div><div class=\x22myToolbarClass\x22 id=\x22toolbar\x22><button>do something</button></div></div></div>");
  244. return self;
  245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  246. }, function($ctx1) {$ctx1.fill(self,"testNestedDIVsWithAttributes",{s:s},$globals.SilkTest)});
  247. //>>excludeEnd("ctx");
  248. },
  249. //>>excludeStart("ide", pragmas.excludeIdeData);
  250. args: [],
  251. source: "testNestedDIVsWithAttributes\x0a \x22demonstrates how DIVs are nested and given attributes\x22\x0a\x09| s |\x0a\x0a\x09s := '#fixture' asSilk.\x0a\x09\x0a\x09s := s DIV << ('id' -> 'container') << ('class' -> 'mySilkContainerClass').\x0a\x09s DIV << ('id' -> 'contentarea') << 'here comes the content'.\x0a\x09s := s DIV << ('id' -> 'toolbar') << ('class' -> 'myToolbarClass').\x0a\x09(s BUTTON: 'do something') on: 'click' bind: [Transcript show: 'button pressed'].\x0a\x09\x0a\x09self assertBodyEndsWith: '>sentinel<div class=\x22mySilkContainerClass\x22 id=\x22container\x22><div id=\x22contentarea\x22>here comes the content</div><div class=\x22myToolbarClass\x22 id=\x22toolbar\x22><button>do something</button></div></div></div>'",
  252. referencedClasses: ["Transcript"],
  253. //>>excludeEnd("ide");
  254. messageSends: ["asSilk", "<<", "DIV", "->", "on:bind:", "BUTTON:", "show:", "assertBodyEndsWith:"]
  255. }),
  256. $globals.SilkTest);
  257. $core.addMethod(
  258. $core.method({
  259. selector: "testOnClickEvent",
  260. protocol: 'testing',
  261. fn: function (){
  262. var self=this;
  263. var s,para;
  264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  265. return $core.withContext(function($ctx1) {
  266. //>>excludeEnd("ctx");
  267. s="#fixture"._asSilk();
  268. para=$recv(s)._P_("DOM");
  269. self._timeout_((100));
  270. $recv(self._async_((function(){
  271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  272. return $core.withContext(function($ctx2) {
  273. //>>excludeEnd("ctx");
  274. $recv(para)._on_bind_("click",(function(){
  275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  276. return $core.withContext(function($ctx3) {
  277. //>>excludeEnd("ctx");
  278. return self._finished();
  279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  280. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  281. //>>excludeEnd("ctx");
  282. }));
  283. return $recv("#fixture p"._asJQuery())._trigger_("click");
  284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  285. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  286. //>>excludeEnd("ctx");
  287. })))._fork();
  288. return self;
  289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  290. }, function($ctx1) {$ctx1.fill(self,"testOnClickEvent",{s:s,para:para},$globals.SilkTest)});
  291. //>>excludeEnd("ctx");
  292. },
  293. //>>excludeStart("ide", pragmas.excludeIdeData);
  294. args: [],
  295. source: "testOnClickEvent\x0a\x09\x22#on:bind\x22\x0a\x09\x0a\x09| s para |\x0a\x0a\x09s := '#fixture' asSilk.\x0a\x09para := s P: 'DOM'. \x0a\x0a\x09self timeout: 100.\x0a\x0a\x09(self async: [para on: 'click' bind:\x0a\x09\x09\x09[\x22Test successful\x22 self finished].\x0a\x0a\x09\x09'#fixture p' asJQuery trigger: 'click'.\x0a\x09\x09]) fork",
  296. referencedClasses: [],
  297. //>>excludeEnd("ide");
  298. messageSends: ["asSilk", "P:", "timeout:", "fork", "async:", "on:bind:", "finished", "trigger:", "asJQuery"]
  299. }),
  300. $globals.SilkTest);
  301. });