You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GQueryCoreTest.java 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. /*
  2. * Copyright 2010 Google Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.google.gwt.query.client;
  17. import static com.google.gwt.query.client.GQuery.$;
  18. import static com.google.gwt.query.client.GQuery.$$;
  19. import static com.google.gwt.query.client.GQuery.document;
  20. import com.google.gwt.dom.client.Document;
  21. import com.google.gwt.dom.client.Element;
  22. import com.google.gwt.event.dom.client.ClickEvent;
  23. import com.google.gwt.event.dom.client.ClickHandler;
  24. import com.google.gwt.junit.client.GWTTestCase;
  25. import com.google.gwt.query.client.impl.SelectorEngineImpl;
  26. import com.google.gwt.query.client.impl.SelectorEngineSizzle;
  27. import com.google.gwt.user.client.Event;
  28. import com.google.gwt.user.client.ui.Button;
  29. import com.google.gwt.user.client.ui.HTML;
  30. import com.google.gwt.user.client.ui.RootPanel;
  31. /**
  32. * Test class for testing gwtquery-core api.
  33. */
  34. public class GQueryCoreTest extends GWTTestCase {
  35. static Element e = null;
  36. static HTML testPanel = null;
  37. protected static void assertHtmlEquals(Object expected, Object actual) {
  38. assertEquals(iExplorerFixHtml(expected), iExplorerFixHtml(actual));
  39. }
  40. protected static String iExplorerFixHtml(Object s) {
  41. // IE shows all tags upper-case
  42. // IE adds \r \n
  43. // IE does not put quotes to some attributes
  44. // Investigate: IE in method find puts the attribute $h="4"
  45. // Investigate: IE in method filter adds the attrib added="null"
  46. return s.toString().trim().toLowerCase().replaceAll(
  47. "[\r\n]", "").replaceAll(
  48. " ([\\w]+)=[\"']([^\"']+)[\"']", " $1=$2").replaceAll(
  49. "\\s+\\$h=\"[^\"]+\"", "").replaceAll(
  50. " added=[^ >]+", "");
  51. }
  52. int done = 0;
  53. public String getModuleName() {
  54. return "com.google.gwt.query.Query";
  55. }
  56. public void gwtSetUp() {
  57. if (e == null) {
  58. testPanel = new HTML();
  59. RootPanel.get().add(testPanel);
  60. e = testPanel.getElement();
  61. e.setId("core-tst");
  62. } else {
  63. e.setInnerHTML("");
  64. }
  65. }
  66. public void testAttributeMethods() {
  67. $(e).html("<p class=\"a1\">Content</p>");
  68. GQuery gq = $("p", e);
  69. // attr()
  70. gq.attr($$("attr1: 'a', attr2: 'b'"));
  71. assertEquals("a", gq.attr("attr1"));
  72. assertEquals("b", gq.attr("attr2"));
  73. gq.attr("attr3", new Function() {
  74. public String f(Element e, int i) {
  75. return e.getInnerText();
  76. }
  77. });
  78. assertEquals("Content", gq.attr("attr3"));
  79. assertEquals("a1", gq.attr("class"));
  80. gq.attr("class", "b1 b2");
  81. // hasClass()
  82. assertTrue(gq.hasClass("b1"));
  83. assertTrue(gq.hasClass("b2"));
  84. // addClass()
  85. gq.addClass("c1", "c2");
  86. assertTrue(gq.hasClass("b1"));
  87. assertTrue(gq.hasClass("b2"));
  88. assertTrue(gq.hasClass("c1"));
  89. assertTrue(gq.hasClass("c2"));
  90. // removeClass()
  91. gq.removeClass("c2", "c1");
  92. assertTrue(gq.hasClass("b1"));
  93. assertTrue(gq.hasClass("b2"));
  94. assertFalse(gq.hasClass("c1"));
  95. assertFalse(gq.hasClass("c2"));
  96. // toggleClass()
  97. gq.toggleClass("b2");
  98. assertTrue(gq.hasClass("b1"));
  99. assertFalse(gq.hasClass("b2"));
  100. gq.toggleClass("b2");
  101. assertTrue(gq.hasClass("b1"));
  102. assertTrue(gq.hasClass("b2"));
  103. gq.toggleClass("b2", true);
  104. assertTrue(gq.hasClass("b2"));
  105. gq.toggleClass("b2", false);
  106. assertFalse(gq.hasClass("b2"));
  107. // css()
  108. String content = "<p style='color:red;'>Test Paragraph.</p>";
  109. $(e).html(content);
  110. assertEquals("red", $("p", e).css("color"));
  111. $("p", e).css("font-weight", "bold");
  112. assertEquals("bold", $("p", e).css("font-weight"));
  113. // css() properties
  114. $(e).html("<p>Test Paragraph.</p>");
  115. $("p", e).css(Properties.create(
  116. "color: 'red', 'font-weight': 'bold', background: 'blue'"));
  117. assertEquals("red", $("p", e).css("color"));
  118. assertEquals("bold", $("p", e).css("font-weight"));
  119. assertEquals("blue", $("p", e).css("background-color"));
  120. // css() camelize and uppercase
  121. $(e).html("<p>Test Paragraph.</p>");
  122. $("p", e).css(Properties.create("COLOR: 'red', 'FONT-WEIGHT': 'bold'"));
  123. assertEquals("red", $("p", e).css("color"));
  124. assertEquals("", $("p", e).css("background"));
  125. }
  126. public void testCapitalLetters() {
  127. $(e).html("<div id='testImageDisplay' class='whatEver'>Content</div>");
  128. assertEquals(1, $("#testImageDisplay").size());
  129. // Commented because IE is case insensitive
  130. // assertEquals(0, $("#testimagedisplay").size());
  131. assertEquals(1, $(".whatEver").size());
  132. assertEquals(0, $(".whatever").size());
  133. }
  134. public void testCleanMethod() {
  135. $(e).html("").append($("<tr/>"));
  136. assertHtmlEquals("<tr></tr>", $(e).html());
  137. $(e).html("").append($("<td/>"));
  138. assertHtmlEquals("<td></td>", $(e).html());
  139. $(e).html("").append($("<th/>"));
  140. assertHtmlEquals("<th></th>", $(e).html());
  141. }
  142. public void testDomManip() {
  143. String content = "<span class='branchA'><span class='target'>branchA target</span></span>"
  144. + "<span class='branchB'><span class='target'>branchB target</span></span>";
  145. $(e).html("");
  146. $(e).append(content);
  147. assertEquals(4, $("span", e).size());
  148. assertEquals(2, $("span.target", e).size());
  149. assertHtmlEquals(content, $(e).html());
  150. $(e).html("<span>a</span><span>b</span>");
  151. $("span").append("<div>c</div>");
  152. assertHtmlEquals("<span>a<div>c</div></span><span>b<div>c</div></span>", $(e).html());
  153. }
  154. public void testEach() {
  155. $(e).html("<p>Content 1</p><p>Content 2</p><p>Content 3</p>");
  156. $("p", e).each(new Function() {
  157. public void f(Element e) {
  158. $(e).text(".");
  159. }
  160. });
  161. assertHtmlEquals("<p>.</p><p>.</p><p>.</p>", $("p", e));
  162. $("p", e).each(new Function() {
  163. public String f(Element e, int i) {
  164. $(e).text("" + i);
  165. return "";
  166. }
  167. });
  168. assertHtmlEquals("<p>0</p><p>1</p><p>2</p>", $("p", e));
  169. }
  170. public void testIFrameManipulation() {
  171. $(e).html("<iframe name='miframe' id='miframe' src=\"javascript:''\">");
  172. // FF has to call empty to open and close the document before
  173. // accessing the recently created iframe content
  174. Document d = $("#miframe").contents().empty().get(0).cast();
  175. assertNotNull(d);
  176. assertNotNull(d.getBody());
  177. assertEquals(1, $("#miframe").contents().size());
  178. assertEquals(1, $("#miframe").contents().find("body").size());
  179. assertEquals(0, $("#miframe").contents().find("body > h1").size());
  180. $("#miframe").contents().find("body").append("<h1>Test</h1>");
  181. assertEquals(1, $("#miframe").contents().find("body > h1").size());
  182. assertEquals(1, $(d).find("h1").size());
  183. }
  184. public void testInnerMethods() {
  185. String txt = "<p>I would like to say: </p>";
  186. // Check that setHTML and getHTML work as GQuery html()
  187. testPanel.setHTML(txt);
  188. assertHtmlEquals(txt, testPanel.getHTML());
  189. assertHtmlEquals(txt, $(e).html());
  190. assertHtmlEquals(txt, $("#core-tst").html());
  191. $(e).html("");
  192. assertHtmlEquals("", $(e).html());
  193. $(e).html(txt);
  194. assertHtmlEquals(txt, $(e).html());
  195. // toString()
  196. assertHtmlEquals(txt, $("p", e));
  197. // remove()
  198. $("p", e).remove();
  199. assertHtmlEquals("", $(e).html());
  200. // text()
  201. String expected = "I would like to say: I would like to say:";
  202. $(e).html(txt + txt);
  203. assertHtmlEquals(expected, $("p", e).text());
  204. // empty()
  205. expected = "<p></p><p></p>";
  206. $("p", e).empty();
  207. assertHtmlEquals(expected, $(e).html());
  208. }
  209. public void testInputValueMethods() {
  210. // imput text
  211. $(e).html("<input type='text'/>");
  212. GQuery gq = $("input", e);
  213. assertEquals("", gq.val());
  214. gq.val("some value");
  215. assertEquals("some value", gq.val());
  216. // select
  217. $(e).html(
  218. "<select name='n'><option value='v1'>1</option><option value='v2' selected='selected'>2</option></select>");
  219. gq = $("select", e);
  220. assertEquals("v2", gq.val());
  221. gq.val("v1");
  222. assertEquals("v1", gq.val());
  223. // select multiple
  224. $(e).html(
  225. "<select name='n' multiple='multiple'><option value='v1'>1</option><option value='v2'>2</option><option value='v3'>3</option></select>");
  226. gq = $("select", e);
  227. assertEquals(0, gq.vals().length);
  228. assertEquals("", gq.val());
  229. $(e).html(
  230. "<select name='n' multiple='multiple'><option value='v1'>1</option><option value='v2' selected='selected'>2</option><option value='v3'>3</option></select>");
  231. gq = $("select", e);
  232. assertEquals(1, gq.vals().length);
  233. assertEquals("v2", gq.val());
  234. gq.val("v1", "v3", "invalid");
  235. assertEquals(2, gq.vals().length);
  236. assertEquals("v1", gq.vals()[0]);
  237. assertEquals("v3", gq.vals()[1]);
  238. // FIXME: fix in IE
  239. // gq.val("v1");
  240. // assertEquals(1, gq.vals().length);
  241. // assertEquals("v1", gq.val());
  242. // input radio
  243. $(e).html(
  244. "<input type='radio' name='n' value='v1'>1</input><input type='radio' name='n' value='v2' checked='checked'>2</input>");
  245. gq = $("input", e);
  246. assertEquals("v2", gq.val());
  247. gq.val("v1");
  248. assertEquals("v1", gq.val());
  249. gq.val("v2");
  250. assertEquals("v2", gq.val());
  251. // input checkbox
  252. $(e).html(
  253. "<input type='checkbox' name='n1' value='v1'>1</input><input type='checkbox' name='n2' value='v2' checked='checked'>2</input>");
  254. gq = $("input", e);
  255. assertEquals("", gq.val());
  256. gq.val("v1");
  257. assertEquals("v1", gq.val());
  258. }
  259. public void testIssue23() {
  260. $(e).html("<table><tr><td><input type='radio' name='n' value='v1'>1</input><input type='radio' name='n' value='v2' checked='checked'>2</input></td><td><button>Click</button></tr><td></table>");
  261. $("button").click(new Function() {
  262. public boolean f(Event ev) {
  263. done = 0;
  264. $("table > tbody > tr > td > input:checked", e).each(new Function() {
  265. public void f(Element e) {
  266. done++;
  267. }
  268. });
  269. assertEquals(1, done);
  270. return true;
  271. }
  272. });
  273. $("button").click();
  274. }
  275. public void testModifyMethods() {
  276. String pTxt = "<p>I would like to say: </p>";
  277. String bTxt = "<b>Hello</b>";
  278. // append()
  279. String expected = "<p>I would like to say: <b>Hello</b></p>";
  280. $(e).html(pTxt);
  281. $("p", e).append(bTxt);
  282. assertHtmlEquals(expected, $(e).html());
  283. $(e).html(pTxt);
  284. $("p", e).append($(bTxt).get(0));
  285. assertHtmlEquals(expected, $(e).html());
  286. // appendTo()
  287. expected = "<p>I would like to say: <b>Hello</b></p>";
  288. $(e).html(bTxt + pTxt);
  289. GQuery g = $("b", e).appendTo($("p", e));
  290. assertHtmlEquals(expected, $(e).html());
  291. assertHtmlEquals("<b>Hello</b>", g.toString());
  292. // document is a valid node, actually it is substituted by body
  293. g.appendTo(document);
  294. expected = "<p>I would like to say: </p>";
  295. assertHtmlEquals(expected, $(e).html());
  296. g.remove();
  297. // Check that the new elements are returned and can be modified
  298. $("<div id='mid'>Hello</div>").appendTo(e).css("color", "white");
  299. assertEquals("white", $("#mid").css("color"));
  300. // prepend()
  301. expected = "<p><b>Hello</b>I would like to say: </p>";
  302. $(e).html(pTxt);
  303. $("p", e).prepend(bTxt);
  304. assertHtmlEquals(expected, $(e).html());
  305. // prependTo()
  306. expected = "<p><b>Hello</b>I would like to say: </p>";
  307. $(e).html(bTxt + pTxt);
  308. $("b", e).prependTo($("p", e));
  309. assertHtmlEquals(expected, $(e).html());
  310. // Check that the new elements are returned and can be modified
  311. $("<div id='mid'>Hello</div>").prependTo(e).css("color", "yellow");
  312. assertEquals("yellow", $("#mid").css("color"));
  313. // prependTo()
  314. expected = "<b>Hello</b><p><b>Hello</b>I would like to say: </p>";
  315. $(e).html(bTxt + pTxt);
  316. $("b", e).clone().prependTo($("p", e));
  317. assertHtmlEquals(expected, $(e).html());
  318. // before()
  319. expected = "<b>Hello</b><p>I would like to say: </p>";
  320. $(e).html(pTxt);
  321. $("p", e).before(bTxt);
  322. assertHtmlEquals(expected, $(e).html());
  323. // before()
  324. expected = "<b>Hello</b><p>I would like to say: </p>";
  325. $(e).html(pTxt + bTxt);
  326. $("p", e).before($("b", e));
  327. assertHtmlEquals(expected, $(e).html());
  328. // before()
  329. expected = "<b>Hello</b><p>I would like to say: </p><b>Hello</b>";
  330. $(e).html(pTxt + bTxt);
  331. $("p", e).before($("b", e).clone());
  332. assertHtmlEquals(expected, $(e).html());
  333. // insertBefore()
  334. expected = "<b>Hello</b><p>I would like to say: </p>";
  335. $(e).html(pTxt + bTxt);
  336. $("b", e).insertBefore($("p", e));
  337. assertHtmlEquals(expected, $(e).html());
  338. // insertBefore()
  339. expected = "<b>Hello</b><p>I would like to say: </p><b>Hello</b>";
  340. $(e).html(pTxt + bTxt);
  341. $("b", e).clone().insertBefore($("p", e));
  342. assertHtmlEquals(expected, $(e).html());
  343. // after()
  344. expected = "<p>I would like to say: </p><b>Hello</b>";
  345. $(e).html(pTxt);
  346. $("p", e).after(bTxt);
  347. assertHtmlEquals(expected, testPanel.getHTML());
  348. // after()
  349. expected = "<p>I would like to say: </p><b>Hello</b>";
  350. $(e).html(bTxt + pTxt);
  351. $("p", e).after($("b", e));
  352. assertHtmlEquals(expected, $(e).html());
  353. // after()
  354. expected = "<b>Hello</b><p>I would like to say: </p><b>Hello</b>";
  355. $(e).html(bTxt + pTxt);
  356. $("p", e).after($("b", e).clone().get(0));
  357. assertHtmlEquals(expected, $(e).html());
  358. // The set of elements should be the same after the manipulation
  359. String content = "<span>s</span>";
  360. expected = "<p>p</p>";
  361. GQuery g1 = $(content);
  362. GQuery g2 = $(expected);
  363. $(e).html("").append(g1);
  364. assertEquals(1, g1.size());
  365. assertEquals(content, g1.toString());
  366. $(g1).append(g2);
  367. assertEquals(1, g1.size());
  368. assertEquals(1, g2.size());
  369. assertEquals(expected, g2.toString());
  370. $(g1).prepend(g2);
  371. assertEquals(1, g1.size());
  372. assertEquals(1, g2.size());
  373. assertEquals(expected, g2.toString());
  374. $(g1).after(g2);
  375. assertEquals(1, g1.size());
  376. assertEquals(1, g2.size());
  377. assertEquals(expected, g2.toString());
  378. $(g1).before(g2);
  379. assertEquals(1, g1.size());
  380. assertEquals(1, g2.size());
  381. assertEquals(expected, g2.toString());
  382. }
  383. public void testOpacity() {
  384. $(e)
  385. .html(
  386. "<p id='id1' style='opacity: 0.6; filter: alpha(opacity=60)'>Content 1</p>");
  387. GQuery g = $("#id1");
  388. assertEquals("0.6", g.css("opacity", false));
  389. assertEquals("0.6", g.css("opacity", true));
  390. g.css("opacity", "");
  391. assertEquals("1.0", g.css("opacity", false));
  392. assertEquals("1.0", g.css("opacity", true));
  393. g.css("opacity", "0.4");
  394. assertEquals("0.4", g.css("opacity", false));
  395. assertEquals("0.4", g.css("opacity", true));
  396. }
  397. public void testPosition(){
  398. $(e).html("<div style='top:25px; left:25px; padding:20px; position:relative;'><div id='child' style='margin:30px'>test</div></div> ");
  399. GQuery g = $("#child");
  400. assertEquals(20, g.position().left);
  401. assertEquals(20, g.position().top);
  402. $(e).html("<div style='top:25px; left:25px; position:relative;'><div id='child' style='position:relative; top:15px; left:35px;'>test</div></div> ");
  403. g = $("#child");
  404. assertEquals(35, g.position().left);
  405. assertEquals(15, g.position().top);
  406. }
  407. public void testProperties() {
  408. Properties p = $$("border:'1px solid black'");
  409. assertEquals(1, p.keys().length);
  410. assertNotNull(p.get("border"));
  411. p = $$("({border:'1px solid black'})");
  412. assertEquals(1, p.keys().length);
  413. assertNotNull(p.get("border"));
  414. }
  415. public void testRelativeMethods() {
  416. String content = "<p><span>Hello</span>, how are you?</p>";
  417. String expected = "<span>Hello</span>";
  418. // find()
  419. $(e).html(content);
  420. assertHtmlEquals(expected, $("p", e).find("span"));
  421. // filter()
  422. content = "<p>First</p><p class=\"selected\">Hello</p><p>How are you?</p>";
  423. $(e).html(content);
  424. expected = "<p class=\"selected\">Hello</p>";
  425. assertHtmlEquals(expected, $("p", e).filter(".selected"));
  426. // not()
  427. expected = "<p>First</p><p>How are you?</p>";
  428. assertEquals(2, $("p", e).not(".selected").size());
  429. assertHtmlEquals(expected, $("p", e).not(".selected"));
  430. assertEquals(2, $("p", e).not($(".selected")).size());
  431. assertHtmlEquals(expected, $("p", e).not($(".selected")));
  432. assertEquals(2, $("p", e).not($(".selected").get(0)).size());
  433. assertHtmlEquals(expected, $("p", e).not($(".selected").get(0)));
  434. // add()
  435. String added = "<p>Last</p>";
  436. expected = content + added;
  437. assertEquals(4, $("p", e).add(added).size());
  438. assertHtmlEquals(expected, $("p", e).add(added));
  439. // parent()
  440. expected = content = "<div><p>Hello</p><p>Hello</p></div>";
  441. $(e).html(content);
  442. assertHtmlEquals(expected, $("p", e).parent());
  443. // parent()
  444. content
  445. = "<div><p>Hello</p></div><div class=\"selected\"><p>Hello Again</p></div>";
  446. expected = "<div class=\"selected\"><p>Hello Again</p></div>";
  447. $(e).html(content);
  448. assertHtmlEquals(expected, $("p", e).parent(".selected"));
  449. // parents()
  450. content = "<div><p><span>Hello</span></p><span>Hello Again</span></div>";
  451. $(e).html(content);
  452. assertEquals(2, $("span", e).size());
  453. assertTrue(3 < $("span", e).parents().size());
  454. assertEquals(1, $("span", e).parents().filter("body").size());
  455. $("span", e).parents().filter("body").toString().trim().toLowerCase().contains(content.toLowerCase());
  456. // is()
  457. content = "<form><input type=\"checkbox\"></form>";
  458. $(e).html(content);
  459. assertEquals(true, $("input[type=\"checkbox\"]", e).parent().is("form"));
  460. // is()
  461. content = "<form><p><input type=\"checkbox\"></p></form>";
  462. $(e).html(content);
  463. assertEquals(false, $("input[type='checkbox']", e).parent().is("form"));
  464. // next()
  465. content = "<p>Hello</p><p>Hello Again</p><div><span>And Again</span></div>";
  466. String next1 = "<p>Hello Again</p>";
  467. String next2 = "<div><span>And Again</span></div>";
  468. $(e).html(content);
  469. assertEquals(2, $("p", e).next().size());
  470. assertHtmlEquals(next1, $("p", e).next().get(0).getString());
  471. assertHtmlEquals(next2, $("p", e).next().get(1).getString());
  472. // next()
  473. content
  474. = "<p>Hello</p><p class=\"selected\">Hello Again</p><div><span>And Again</span></div>";
  475. expected = "<p class=\"selected\">Hello Again</p>";
  476. $(e).html(content);
  477. assertEquals(1, $("p", e).next(".selected").size());
  478. assertHtmlEquals(expected, $("p", e).next(".selected").get(0).getString());
  479. // nextAll()
  480. content = "<ul><li>i1</li><li>i2</li><li class='third-item'>i3</li><li>i4</li><li>i5</li></ul>";
  481. expected = "<li>i4</li><li>i5</li>";
  482. $(e).html(content);
  483. assertEquals(2, $("li.third-item", e).nextAll().size());
  484. assertHtmlEquals(expected, $("li.third-item", e).nextAll());
  485. // andSelf()
  486. content = "<ul><li>i1</li><li>i2</li><li class=\"third-item\">i3</li><li>i4</li><li>i5</li></ul>";
  487. expected = "<li>i4</li><li>i5</li><li class=\"third-item\">i3</li>";
  488. $(e).html(content);
  489. assertEquals(3, $("li.third-item", e).nextAll().andSelf().size());
  490. assertHtmlEquals(expected, $("li.third-item", e).nextAll().andSelf());
  491. // prev()
  492. content = "<p>Hello</p><div><span>Hello Again</span></div><p>And Again</p>";
  493. expected = "<div><span>Hello Again</span></div>";
  494. $(e).html(content);
  495. assertEquals(1, $("p", e).prev().size());
  496. assertHtmlEquals(expected, $("p", e).prev().get(0).getString());
  497. // prev()
  498. content
  499. = "<div><span>Hello</span></div><p class=\"selected\">Hello Again</p><p>And Again</p>";
  500. expected = "<p class=\"selected\">Hello Again</p>";
  501. $(e).html(content);
  502. assertEquals(2, $("p", e).prev().size());
  503. assertEquals(1, $("p", e).prev(".selected").size());
  504. assertHtmlEquals(expected, $("p", e).prev(".selected").get(0).getString());
  505. // siblings()
  506. content = "<p>Hello</p><div id='mdiv'><span>Hello Again</span></div><p>And Again</p>";
  507. next1 = "<p>Hello</p>";
  508. next2 = "<p>And Again</p>";
  509. $(e).html(content);
  510. assertEquals(2, $("#mdiv", e).siblings().size());
  511. assertHtmlEquals(next1, $("#mdiv", e).siblings().get(0).getString());
  512. assertHtmlEquals(next2, $("#mdiv", e).siblings().get(1).getString());
  513. // siblings()
  514. content
  515. = "<div><span>Hello</span></div><p class=\"selected\">Hello Again</p><p>And Again</p>";
  516. expected = "<p class=\"selected\">Hello Again</p>";
  517. $(e).html(content);
  518. assertEquals(1, $("p", e).siblings(".selected").size());
  519. assertHtmlEquals(expected, $("p", e).siblings(".selected").get(0).getString());
  520. // children()
  521. content = "<p>Hello</p><div id='mdiv'><span>Hello Again</span></div><p>And Again</p>";
  522. expected = "<span>Hello Again</span>";
  523. $(e).html(content);
  524. assertHtmlEquals(expected, $("#mdiv", e).children());
  525. // children()
  526. content
  527. = "<div id='mdiv'><span>Hello</span><p class=\"selected\">Hello Again</p><p>And Again</p></div>";
  528. expected = "<p class=\"selected\">Hello Again</p>";
  529. $(e).html(content);
  530. assertHtmlEquals(expected, $("#mdiv", e).children(".selected"));
  531. // contains()
  532. content = "<p>This is just a test.</p><p>So is this</p>";
  533. expected = "<p>This is just a test.</p>";
  534. $(e).html(content);
  535. assertHtmlEquals(expected, $("p", e).contains("test"));
  536. }
  537. public void testShowHide() {
  538. $(e)
  539. .html(
  540. "<p id='id1' style='display: inline'>Content 1</p><p id='id2'>Content 2</p><p id='id3'>Content 3</p>");
  541. final GQuery sectA = $("#id1");
  542. final GQuery sectB = $("#id2");
  543. final GQuery sectC = $("#id3");
  544. // hide()
  545. sectA.hide();
  546. assertEquals("none", sectA.css("display"));
  547. sectB.hide();
  548. assertEquals("none", sectB.css("display"));
  549. // show()
  550. sectA.show();
  551. assertEquals("inline", sectA.css("display"));
  552. sectB.show();
  553. assertEquals("", sectB.css("display"));
  554. // toggle()
  555. assertEquals("", sectC.css("display"));
  556. sectC.toggle();
  557. assertEquals("none", sectC.css("display"));
  558. sectC.toggle();
  559. assertEquals("block", sectC.css("display"));
  560. }
  561. public void testSliceMethods() {
  562. String content = "<p>This is just a test.</p><p>So is this</p>";
  563. $(e).html(content);
  564. String expected = "<p>So is this</p>";
  565. assertEquals(1, $("p", e).eq(1).size());
  566. assertHtmlEquals(expected, $("p", e).eq(1));
  567. expected = "<p>This is just a test.</p>";
  568. assertEquals(1, $("p", e).lt(1).size());
  569. assertHtmlEquals(expected, $("p", e).lt(1));
  570. expected = "<p>So is this</p>";
  571. assertEquals(1, $("p", e).gt(0).size());
  572. assertHtmlEquals(expected, $("p", e).gt(0));
  573. assertEquals(2, $("p", e).slice(0, 2).size());
  574. assertEquals(2, $("p", e).slice(0, -1).size());
  575. assertEquals(0, $("p", e).slice(3, 2).size());
  576. }
  577. public void testUnique() {
  578. SelectorEngineImpl selSizz = new SelectorEngineSizzle();
  579. GQuery g = $(e).html("<div><p></p><p></p><span></span><p></p>");
  580. JSArray a;
  581. a = selSizz.select("p", e).cast();
  582. assertEquals(3, a.getLength());
  583. a.addNode(a.getNode(0));
  584. a.addNode(a.getNode(3));
  585. assertEquals(5 , a.getLength());
  586. a = g.unique(a);
  587. assertEquals(3, a.getLength());
  588. }
  589. public void testUtilsEq() {
  590. assertTrue(GQUtils.eq("a", "a"));
  591. assertTrue(GQUtils.eq(true, true));
  592. assertTrue(GQUtils.eq(45, 45));
  593. assertTrue(GQUtils.eq(45d, 45f));
  594. assertTrue(GQUtils.eq("", ""));
  595. assertTrue(GQUtils.eq(0.45, 0.45));
  596. assertTrue(GQUtils.eq(0.45d, 0.45d));
  597. assertTrue(GQUtils.eq(0.45f, 0.45f));
  598. assertFalse(GQUtils.eq("a", ""));
  599. assertFalse(GQUtils.eq(true, false));
  600. assertFalse(GQUtils.eq(45, 42));
  601. assertFalse(GQUtils.eq("", null));
  602. assertFalse(GQUtils.eq(0.45, 0.451));
  603. // assertEquals("a", GQUtils.or("a", ""));
  604. }
  605. public void testUtilsTruth() {
  606. assertTrue(GQUtils.truth("a"));
  607. assertTrue(GQUtils.truth(this));
  608. assertTrue(GQUtils.truth(45));
  609. assertTrue(GQUtils.truth(0.33));
  610. assertTrue(GQUtils.truth(45l));
  611. assertTrue(GQUtils.truth(45d));
  612. assertTrue(GQUtils.truth(45f));
  613. assertTrue(GQUtils.truth(0.33f));
  614. assertFalse(GQUtils.truth(0));
  615. assertFalse(GQUtils.truth(0l));
  616. assertFalse(GQUtils.truth(0d));
  617. assertFalse(GQUtils.truth(00.00d));
  618. assertFalse(GQUtils.truth(00.00f));
  619. assertFalse(GQUtils.truth(null));
  620. assertFalse(GQUtils.truth(""));
  621. }
  622. public void testWidthHeight() {
  623. $(e)
  624. .html(
  625. "<div style='border: 1px solid red; padding: 10px; width: 100px; height: 100px'>Content 1</div>");
  626. GQuery g = $("div", e);
  627. assertEquals(120, g.width());
  628. assertEquals(122, g.height());
  629. assertEquals(120, g.clientWidth());
  630. assertEquals(120, g.clientHeight());
  631. assertEquals(100, (int)GQUtils.cur(g.get(0), "width", false));
  632. assertEquals(100, (int)GQUtils.cur(g.get(0), "height", false));
  633. assertEquals(100, (int)GQUtils.cur(g.get(0), "width", true));
  634. assertEquals(100, (int)GQUtils.cur(g.get(0), "height", true));
  635. assertEquals("100", g.css("width"));
  636. assertEquals("100", g.css("height"));
  637. assertEquals("100px", g.get(0).getStyle().getProperty("width"));
  638. assertEquals("100px", g.get(0).getStyle().getProperty("height"));
  639. }
  640. public void testWrapMethod() {
  641. String content = "<p>Test Paragraph.</p>";
  642. String wrapper = "<div id=\"content\">Content</div>";
  643. String expected = "<div id=\"content\">Content<p>Test Paragraph.</p></div>";
  644. $(e).html(content);
  645. $("p", e).wrap(wrapper);
  646. assertHtmlEquals(expected, $(e).html());
  647. $(e).html(content + wrapper);
  648. expected = "<b><p>Test Paragraph.</p></b><b><div id=\"content\">Content</div></b>";
  649. $("*", e).wrap("<b></b>");
  650. assertHtmlEquals(expected, $(e).html());
  651. }
  652. public void testFilterBody() {
  653. GQuery myNewElement = $("<div>my new div</div>");
  654. boolean isAttachedToTheDOM = myNewElement.parents().filter("body").size() > 0;
  655. assertEquals(false, isAttachedToTheDOM);
  656. myNewElement.appendTo(document);
  657. isAttachedToTheDOM = myNewElement.parents().filter("body").size() > 0;
  658. assertEquals(true, isAttachedToTheDOM);
  659. }
  660. public void testGQueryWidgets() {
  661. final Button b1 = new Button("click-me");
  662. RootPanel.get().add(b1);
  663. GQuery g = $(b1);
  664. Button b2 = (Button) g.asWidget();
  665. assertEquals(b1, b2);
  666. b2 = (Button)$("<button>Click-me</button>").appendTo(document).asWidget();
  667. b2.addClickHandler(new ClickHandler() {
  668. public void onClick(ClickEvent event) {
  669. $(b1).css("color", "red");
  670. }
  671. });
  672. (b2).click();
  673. assertEquals("red", $(b1).css("color"));
  674. }
  675. }