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 28KB

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