0ed98440ec8f0c60740dc4166acec49e413fef90.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2. "http://www.w3.org/TR/html4/strict.dtd">
  3. <!--
  4. we use a strict-mode DTD to ensure that the box model is the same for these
  5. basic tests
  6. -->
  7. <html>
  8. <head>
  9. <title>testing Core HTML/DOM/CSS/Style utils</title>
  10. <style type="text/css">
  11. @import "../../resources/dojo.css";
  12. </style>
  13. <script type="text/javascript"
  14. src="../../dojo.js"
  15. djConfig="isDebug: true"></script>
  16. <script type="text/javascript">
  17. dojo.require("doh.runner");
  18. function getIframeDocument(/*DOMNode*/iframeNode){
  19. //summary: Returns the document object associated with the iframe DOM Node argument.
  20. var doc = iframeNode.contentDocument || // W3
  21. (
  22. (iframeNode.contentWindow)&&(iframeNode.contentWindow.document)
  23. ) || // IE
  24. (
  25. (iframeNode.name)&&(document.frames[iframeNode.name])&&
  26. (document.frames[iframeNode.name].document)
  27. ) || null;
  28. return doc;
  29. }
  30. dojo.addOnLoad(function(){
  31. doh.register("t",
  32. [
  33. "t.is(100, dojo.marginBox('sq100').w);",
  34. "t.is(100, dojo.marginBox('sq100').h);",
  35. "t.is(120, dojo.marginBox('sq100margin10').w);",
  36. "t.is(120, dojo.marginBox('sq100margin10').h);",
  37. "t.is(100, dojo.contentBox('sq100margin10').w);",
  38. "t.is(100, dojo.contentBox('sq100margin10').h);",
  39. "t.is(140, dojo.marginBox('sq100margin10pad10').w);",
  40. "t.is(140, dojo.marginBox('sq100margin10pad10').h);",
  41. "t.is(120, dojo.marginBox('sq100pad10').w);",
  42. "t.is(120, dojo.marginBox('sq100pad10').h);",
  43. "t.is(110, dojo.marginBox('sq100ltpad10').w);",
  44. "t.is(110, dojo.marginBox('sq100ltpad10').h);",
  45. "t.is(100, dojo.contentBox('sq100ltpad10').w);",
  46. "t.is(100, dojo.contentBox('sq100ltpad10').h);",
  47. "t.is(120, dojo.marginBox('sq100ltpad10rbmargin10').w);",
  48. "t.is(120, dojo.marginBox('sq100ltpad10rbmargin10').h);",
  49. "t.is(120, dojo.marginBox('sq100border10').w);",
  50. "t.is(120, dojo.marginBox('sq100border10').h);",
  51. "t.is(100, dojo.contentBox('sq100border10').w);",
  52. "t.is(100, dojo.contentBox('sq100border10').h);",
  53. "t.is(140, dojo.marginBox('sq100border10margin10').w);",
  54. "t.is(140, dojo.marginBox('sq100border10margin10').h);",
  55. "t.is(100, dojo.contentBox('sq100border10margin10').w);",
  56. "t.is(100, dojo.contentBox('sq100border10margin10').h);",
  57. "t.is(160, dojo.marginBox('sq100border10margin10pad10').w);",
  58. "t.is(160, dojo.marginBox('sq100border10margin10pad10').h);",
  59. "t.is(100, dojo.contentBox('sq100border10margin10pad10').w);",
  60. "t.is(100, dojo.contentBox('sq100border10margin10pad10').h);",
  61. // FIXME: the 'correct' w is not 100 on Safari WebKit (2.0.4 [419.3]), the right-margin extends to the document edge
  62. // "t.is(100, dojo.marginBox('sq100nopos').w);",
  63. "t.is(100, dojo.marginBox('sq100nopos').h);",
  64. "t.is(10, dojo._getPadExtents(dojo.byId('sq100ltpad10rbmargin10')).l);",
  65. "t.is(10, dojo._getPadExtents(dojo.byId('sq100ltpad10rbmargin10')).t);",
  66. "t.is(10, dojo._getPadExtents(dojo.byId('sq100ltpad10rbmargin10')).w);",
  67. "t.is(10, dojo._getPadExtents(dojo.byId('sq100ltpad10rbmargin10')).h);",
  68. "t.is(0, dojo._getMarginExtents(dojo.byId('sq100ltpad10rbmargin10')).l);",
  69. "t.is(0, dojo._getMarginExtents(dojo.byId('sq100ltpad10rbmargin10')).t);",
  70. "t.is(10, dojo._getMarginExtents(dojo.byId('sq100ltpad10rbmargin10')).w);",
  71. "t.is(10, dojo._getMarginExtents(dojo.byId('sq100ltpad10rbmargin10')).h);",
  72. "t.is(10, dojo._getBorderExtents(dojo.byId('sq100border10margin10pad10')).l);",
  73. "t.is(10, dojo._getBorderExtents(dojo.byId('sq100border10margin10pad10')).t);",
  74. "t.is(20, dojo._getBorderExtents(dojo.byId('sq100border10margin10pad10')).w);",
  75. "t.is(20, dojo._getBorderExtents(dojo.byId('sq100border10margin10pad10')).h);",
  76. "t.is(20, dojo._getPadBorderExtents(dojo.byId('sq100border10margin10pad10')).l);",
  77. "t.is(20, dojo._getPadBorderExtents(dojo.byId('sq100border10margin10pad10')).t);",
  78. "t.is(40, dojo._getPadBorderExtents(dojo.byId('sq100border10margin10pad10')).w);",
  79. "t.is(40, dojo._getPadBorderExtents(dojo.byId('sq100border10margin10pad10')).h);",
  80. function coordsBasic(t){
  81. var pos = dojo.coords("sq100", false);
  82. // console.debug(pos);
  83. t.is(100, pos.x);
  84. t.is(100, pos.y);
  85. t.is(100, pos.w);
  86. t.is(100, pos.h);
  87. },
  88. function coordsMargin(t){
  89. // coords is getting us the margin-box location, is
  90. // this right?
  91. var pos = dojo.coords("sq100margin10", false);
  92. t.is(260, pos.x);
  93. t.is(110, pos.y);
  94. t.is(120, pos.w);
  95. t.is(120, pos.h);
  96. },
  97. function sq100nopos(t){
  98. var pos = dojo.coords("sq100nopos", false);
  99. // console.debug(pos);
  100. t.is(0, pos.x);
  101. t.t(pos.y > 0);
  102. // FIXME: the 'correct' w is not 100 on Safari WebKit (2.0.4 [419.3]), the right-margin extends to the document edge
  103. // t.is(100, pos.w);
  104. t.is(100, pos.h);
  105. },
  106. function coordsScrolled(t) {
  107. var s = document.createElement('div');
  108. var c = document.createElement('div');
  109. document.body.appendChild(s);
  110. s.appendChild(c);
  111. var x=257, y= 285;
  112. with (s.style) {
  113. position = 'absolute';
  114. overflow = 'scroll';
  115. }
  116. dojo._setMarginBox(s, x, y, 100, 100);
  117. dojo._setMarginBox(c, 0, 0, 500, 500);
  118. s.scrollTop = 200;
  119. var pos = dojo.coords(s, true);
  120. t.is(x, pos.x);
  121. t.is(y, pos.y);
  122. },
  123. "t.is(1, dojo.style('sq100nopos', 'opacity'));",
  124. "t.is(0.1, dojo.style('sq100nopos', 'opacity', 0.1));",
  125. "t.is(0.8, dojo.style('sq100nopos', 'opacity', 0.8));",
  126. "t.is('static', dojo.style('sq100nopos', 'position'));",
  127. function getBgcolor(t){
  128. var bgc = dojo.style('sq100nopos', 'backgroundColor');
  129. t.t((bgc == "rgb(0, 0, 0)")||(bgc == "black")||(bgc == "#000000"));
  130. },
  131. function isDescendant(t){
  132. t.t(dojo.isDescendant("sq100", dojo.body()));
  133. t.t(dojo.isDescendant("sq100", dojo.doc));
  134. t.t(dojo.isDescendant("sq100", "sq100"));
  135. t.t(dojo.isDescendant(dojo.byId("sq100"), "sq100"));
  136. t.f(dojo.isDescendant("sq100", dojo.byId("sq100").firstChild));
  137. t.t(dojo.isDescendant(dojo.byId("sq100").firstChild, "sq100"));
  138. },
  139. function isDescendantIframe(t){
  140. var bif = dojo.byId("blah");
  141. getIframeDocument(bif).write("<html><body><div id='subDiv'></div></body></html>");
  142. getIframeDocument(bif).close();
  143. // this test barely makes sense. disabling it for now.
  144. // t.t(dojo.isDescendant(bif.contentDocument.getElementById("subDiv"), bif.parentNode));
  145. var subDiv = getIframeDocument(bif).getElementById("subDiv");
  146. t.t(dojo.isDescendant(subDiv, subDiv));
  147. t.t(dojo.isDescendant(subDiv, subDiv.parentNode));
  148. t.f(dojo.isDescendant(subDiv.parentNode, subDiv));
  149. },
  150. function testClassFunctions(t){
  151. var node = dojo.byId("sq100");
  152. dojo.addClass(node, "a");
  153. t.is("a", node.className);
  154. dojo.removeClass(node, "c");
  155. t.is("a", node.className);
  156. t.assertTrue(dojo.hasClass(node, "a"));
  157. t.assertFalse(dojo.hasClass(node, "b"));
  158. dojo.addClass(node, "b");
  159. t.is("a b", node.className);
  160. t.assertTrue(dojo.hasClass(node, "a"));
  161. t.assertTrue(dojo.hasClass(node, "b"));
  162. dojo.removeClass(node, "a");
  163. t.is("b", node.className);
  164. t.assertFalse(dojo.hasClass(node, "a"));
  165. t.assertTrue(dojo.hasClass(node, "b"));
  166. dojo.toggleClass(node, "a");
  167. t.is("b a", node.className);
  168. t.assertTrue(dojo.hasClass(node, "a"));
  169. t.assertTrue(dojo.hasClass(node, "b"));
  170. dojo.toggleClass(node, "a");
  171. t.is("b", node.className);
  172. t.assertFalse(dojo.hasClass(node, "a"));
  173. t.assertTrue(dojo.hasClass(node, "b"));
  174. dojo.toggleClass(node, "b");
  175. t.is("", node.className);
  176. t.assertFalse(dojo.hasClass(node, "a"));
  177. t.assertFalse(dojo.hasClass(node, "b"));
  178. dojo.removeClass(node, "c");
  179. t.assertTrue(!node.className);
  180. }
  181. ]
  182. );
  183. doh.run();
  184. });
  185. </script>
  186. <style type="text/css">
  187. html, body {
  188. padding: 0px;
  189. margin: 0px;
  190. border: 0px;
  191. }
  192. #sq100 {
  193. background-color: black;
  194. color: white;
  195. position: absolute;
  196. left: 100px;
  197. top: 100px;
  198. width: 100px;
  199. height: 100px;
  200. border: 0px;
  201. padding: 0px;
  202. margin: 0px;
  203. overflow: hidden;
  204. }
  205. #sq100margin10 {
  206. background-color: black;
  207. color: white;
  208. position: absolute;
  209. left: 250px;
  210. top: 100px;
  211. width: 100px;
  212. height: 100px;
  213. border: 0px;
  214. padding: 0px;
  215. margin: 10px;
  216. overflow: hidden;
  217. }
  218. #sq100margin10pad10 {
  219. background-color: black;
  220. color: white;
  221. position: absolute;
  222. left: 400px;
  223. top: 100px;
  224. width: 100px;
  225. height: 100px;
  226. border: 0px;
  227. padding: 10px;
  228. margin: 10px;
  229. overflow: hidden;
  230. }
  231. #sq100pad10 {
  232. background-color: black;
  233. color: white;
  234. position: absolute;
  235. left: 100px;
  236. top: 250px;
  237. width: 100px;
  238. height: 100px;
  239. border: 0px;
  240. padding: 10px;
  241. margin: 0px;
  242. overflow: hidden;
  243. }
  244. #sq100ltpad10 {
  245. background-color: black;
  246. color: white;
  247. position: absolute;
  248. left: 250px;
  249. top: 250px;
  250. width: 100px;
  251. height: 100px;
  252. border: 0px;
  253. padding-left: 10px;
  254. padding-top: 10px;
  255. padding-right: 0px;
  256. padding-bottom: 0px;
  257. margin: 0px;
  258. overflow: hidden;
  259. }
  260. #sq100ltpad10rbmargin10 {
  261. background-color: black;
  262. color: white;
  263. position: absolute;
  264. left: 400px;
  265. top: 250px;
  266. width: 100px;
  267. height: 100px;
  268. border: 0px;
  269. padding-left: 10px;
  270. padding-top: 10px;
  271. padding-right: 0px;
  272. padding-bottom: 0px;
  273. margin-left: 0px;
  274. margin-top: 0px;
  275. margin-right: 10px;
  276. margin-bottom: 10px;
  277. overflow: hidden;
  278. }
  279. #sq100border10 {
  280. background-color: black;
  281. color: white;
  282. position: absolute;
  283. left: 100px;
  284. top: 400px;
  285. width: 100px;
  286. height: 100px;
  287. border: 10px solid yellow;
  288. padding: 0px;
  289. margin: 0px;
  290. overflow: hidden;
  291. }
  292. #sq100border10margin10 {
  293. background-color: black;
  294. color: white;
  295. position: absolute;
  296. left: 250px;
  297. top: 400px;
  298. width: 100px;
  299. height: 100px;
  300. border: 10px solid yellow;
  301. padding: 0px;
  302. margin: 10px;
  303. overflow: hidden;
  304. }
  305. #sq100border10margin10pad10 {
  306. background-color: black;
  307. color: white;
  308. position: absolute;
  309. left: 400px;
  310. top: 400px;
  311. width: 100px;
  312. height: 100px;
  313. border: 10px solid yellow;
  314. padding: 10px;
  315. margin: 10px;
  316. overflow: hidden;
  317. }
  318. #sq100nopos {
  319. background-color: black;
  320. color: white;
  321. width: 100px;
  322. height: 100px;
  323. padding: 0px;
  324. margin: 0px;
  325. }
  326. </style>
  327. </head>
  328. <body>
  329. <h1>testing Core HTML/DOM/CSS/Style utils</h1>
  330. <div id="sq100">
  331. 100px square, abs
  332. </div>
  333. <div id="sq100margin10">
  334. 100px square, abs, 10px margin
  335. </div>
  336. <div id="sq100margin10pad10">
  337. 100px square, abs, 10px margin, 10px padding
  338. </div>
  339. <div id="sq100pad10">
  340. 100px square, abs, 10px padding
  341. </div>
  342. <div id="sq100ltpad10">
  343. 100px square, abs, 10px left and top padding
  344. </div>
  345. <div id="sq100ltpad10rbmargin10">
  346. 100px square, abs, 10px left and top padding, 10px bottom and right margin
  347. </div>
  348. <div id="sq100border10">
  349. 100px square, abs, 10px yellow border
  350. </div>
  351. <div id="sq100border10margin10">
  352. 100px square, abs, 10px yellow border, 10px margin
  353. </div>
  354. <div id="sq100border10margin10pad10">
  355. 100px square, abs, 10px yellow border, 10px margin, 10px padding
  356. </div>
  357. <div id="sq100nopos">
  358. 100px square, no positioning
  359. </div>
  360. <iframe id="blah"></iframe>
  361. </body>
  362. </html>