\r
import com.google.gwt.core.client.EntryPoint;\r
import com.google.gwt.core.client.GWT;\r
-import com.google.gwt.core.client.JsArray;\r
import com.google.gwt.dom.client.Document;\r
import com.google.gwt.dom.client.Element;\r
-import com.google.gwt.dom.client.Node;\r
import com.google.gwt.dom.client.NodeList;\r
-import com.google.gwt.query.client.impl.SelectorEngineCssToXPath;\r
import com.google.gwt.query.client.impl.SelectorEngineImpl;\r
-import com.google.gwt.query.client.impl.SelectorEngineJS;\r
-import com.google.gwt.query.client.impl.SelectorEngineNative;\r
-import com.google.gwt.query.client.impl.SelectorEngineSizzle;\r
-import com.google.gwt.query.client.impl.SelectorEngineXPath;\r
import com.google.gwt.user.client.Timer;\r
-import com.google.gwt.user.client.Window;\r
-import com.google.gwt.user.client.ui.HTML;\r
-import com.google.gwt.user.client.ui.RootPanel;\r
\r
/**\r
* This module is thought to emulate a test environment similar to\r
*/\r
public class DevTestRunner extends MyTestCase implements EntryPoint {\r
\r
+ static native String $j (String s) /*-{\r
+ return "" + eval(s);\r
+ }-*/;\r
public void onModuleLoad() {\r
try {\r
gwtSetUp();\r
- \r
- testCompiledSelectors();\r
- testIssue12();\r
- testSelectElementsInsideContext();\r
- testSelectorEngineDomAssistant();\r
- testSelectorEngineSizzle();\r
- testSelectorEngineXpath();\r
- testSelectorEngineCssToXpath();\r
testSelectorEngineNative();\r
- testSelectorsGeneratorNative();\r
- testSelectorsWithContext();\r
- testUnique();\r
- \r
- testFade();\r
+ testCompiledSelectors();\r
+ testPropertiesAnimationComputeEffects();\r
\r
-// $(e).html("").after("<div>OK</div>");\r
+ $(e).html("").after("<div>OK</div>");\r
} catch (Exception ex) {\r
ex.printStackTrace();\r
$(e).html("").after("<div>ERROR: " + ex.getMessage() + "</div>");\r
}\r
}\r
-\r
- public void testFade() {\r
- $(e)\r
- .html(\r
- "<p id='id1' style='display: inline'>Content 1</p><p id='id2'>Content 2</p><p id='id3'>Content 3</p>");\r
-\r
- final GQuery sectA = $("#id1");\r
- final GQuery sectB = $("#id2");\r
- \r
- // fadeIn() & fadeOut() are tested with delayed assertions\r
- sectA.hide();\r
- sectA.fadeIn(2000);\r
- sectB.fadeOut(2000);\r
-\r
- // Configure the max duration for this test\r
- // If the test exceeds the timeout without calling finishTest() it will fail\r
- delayTestFinish(2500);\r
-\r
- // Delayed assertions at different intervals\r
- Timer timerShortTime = new Timer() {\r
- public void run() {\r
- double o = Double.valueOf(sectA.css("opacity"));\r
- assertTrue(\r
- "'sectA' opacity must be in the interval 0-0.5 but is: " + o, o > 0\r
- && o < 0.5);\r
- o = Double.valueOf(sectB.css("opacity"));\r
- assertTrue(\r
- "'sectB' opacity must be in the interval 0.5-1 but is: " + o,\r
- o > 0.5 && o < 1);\r
- }\r
- };\r
- Timer timerMidTime = new Timer() {\r
- public void run() {\r
- assertEquals("inline", sectA.css("display"));\r
- assertEquals("", sectB.css("display"));\r
- double o = Double.valueOf(sectA.css("opacity"));\r
- assertTrue(\r
- "'sectA' opacity must be in the interval 0.5-1 but is: " + o,\r
- o > 0.5 && o < 1);\r
- o = Double.valueOf(sectB.css("opacity"));\r
- assertTrue(\r
- "'sectB' opacity must be in the interval 0-0.5 but is: " + o, o > 0\r
- && o < 0.5);\r
- }\r
- };\r
- Timer timerLongTime = new Timer() {\r
+ public void testSelectorEngineNative() {\r
+ SelectorEngineImpl selEng = GWT.create(SelectorEngineImpl.class);\r
+ executeSelectorEngineTests(selEng);\r
+ }\r
+ \r
+ public void runTestJQuery() {\r
+ GQUtils.loadScript("jquery-1.3.1.js", "jq");\r
+ new Timer(){\r
+ private int cont = 0;\r
+ private native boolean loaded(String func) /*-{\r
+ return eval("$wnd." + func) ? true : false; \r
+ }-*/;\r
public void run() {\r
- assertEquals("inline", sectA.css("display"));\r
- assertEquals("none", sectB.css("display"));\r
- // Last delayed assertion has to stop the test to avoid a timeout\r
- // failure\r
- finishTest();\r
+ if (cont++ > 10 || loaded("$")) {\r
+ testPropertiesAnimationComputeEffects();\r
+ } else {\r
+ schedule(100);\r
+ }\r
}\r
- };\r
+ }.run();\r
+ }\r
+ \r
+ private native String evalJQurey(String command) /*-{\r
+ command = command.replace(/\$/g, "$wnd.$");\r
+ try {\r
+ return "" + eval(command);\r
+ } catch(e) {\r
+ $wnd.alert(command + " " + e);\r
+ return "";\r
+ }\r
+ }-*/;\r
+ \r
+ public void validateCssBoth(String selector, boolean force, String... attrs) {\r
+ for (String attr: attrs) {\r
+ String gs = $(selector).css(attr, force);\r
+ String js = evalJQurey("$.css($('" + selector + "').get(0), '" + attr + "', " + force + ")");\r
+ System.out.println(selector + " " + attr + " " + force + " g:" + gs + " j:" + js + " " + (gs.replaceAll("px", "").equals(js.replaceAll("px", ""))));\r
+ assertEquals(gs.replaceAll("px", ""), js.replaceAll("px", ""));\r
+ }\r
+ }\r
+ public void validateCurBoth(String selector, String... attrs) {\r
+ for (String attr: attrs) {\r
+ String gs = Double.toString(GQUtils.cur($(selector).get(0), attr, true)).replaceFirst("\\.\\d+$", "");\r
+ String js = evalJQurey("$.cur($('" + selector + "').get(0), '" + attr + "', true)");\r
+ System.out.println(selector + " " + attr + " " + gs + " " + js + " " + (gs.equals(js)));\r
+ assertEquals(gs, js);\r
+ }\r
+ }\r
+ \r
+ public void testPropertiesAnimationComputeEffects() {\r
+ $(e).html("<div id='parent' style='background-color: yellow; width: 100px; height: 200px; top:130px; position: absolute; left: 130px'><p id='child' style='background-color: pink; width: 100px; height: 100px; position: absolute; padding: 5px'>Content 1</p></div>");\r
+ \r
+ GQuery g = $("#child");\r
+ Properties prop1;\r
\r
- // schedule the delayed assertions\r
- timerShortTime.schedule(200);\r
- timerMidTime.schedule(1200);\r
- timerLongTime.schedule(2200); \r
- } \r
+ prop1 = GQuery.$$("marginTop: '0', marginLeft: '0', top: '0%', left: '0%', width: '100px', height: '100px', padding: '5px'");\r
+ g.css(prop1);\r
+ validateCurBoth("#child", prop1.keys());\r
+ \r
+ }\r
+ \r
\r
protected interface AllSelectors extends Selectors {\r
// @Selector("h1[id]:contains(Selectors)")\r
@Selector("ul.toc li.tocline2")\r
NodeList<Element> ulTocLiTocLine2();\r
}\r
-\r
- protected interface TestSelectors extends Selectors {\r
- @Selector("*:checked")\r
- GQuery allChecked();\r
- @Selector("*:checked")\r
- GQuery allChecked(Node n);\r
- @Selector(".branchA")\r
- GQuery branchA();\r
- @Selector(".branchA")\r
- GQuery branchA(Node n);\r
- @Selector(".branchB")\r
- GQuery branchB();\r
- @Selector(".branchB")\r
- GQuery branchB(Node n);\r
- @Selector(".target")\r
- GQuery target();\r
- @Selector(".target")\r
- GQuery target(Node n);\r
- }\r
-\r
- static Element e = null;\r
- static HTML testPanel = null;\r
-\r
- public String getModuleName() {\r
- return "com.google.gwt.query.Query";\r
- }\r
-\r
- public void gwtSetUp() {\r
- if (e == null) {\r
- testPanel = new HTML();\r
- RootPanel.get().add(testPanel);\r
- e = testPanel.getElement();\r
- e.setId("select-tst");\r
- } else {\r
- e.setInnerHTML("");\r
- }\r
- }\r
-\r
+ \r
public void testCompiledSelectors() {\r
final AllSelectors sel = GWT.create(AllSelectors.class);\r
$(e).html(getTestContent());\r
// assertArrayContains(sel.title().getLength(), 1);\r
\r
assertEquals(1, sel.body().getLength());\r
- assertArrayContains(sel.bodyDiv().getLength(), 53, 55);\r
+ assertArrayContains(sel.bodyDiv().getLength(), 53, 54, 55);\r
sel.setRoot(e);\r
assertArrayContains(sel.aHrefLangClass().getLength(), 0, 1);\r
assertArrayContains(sel.allChecked().getLength(), 1);\r
assertArrayContains(sel.titleAndh1Title().getLength(), 0, 1);\r
assertArrayContains(sel.ulTocline2().getLength(), 12);\r
assertArrayContains(sel.ulTocLiTocLine2().getLength(), 12);\r
- }\r
-\r
- public void testIssue12() {\r
- $(e).html("<table><tr><td><p myCustomAttr='whatever'><input disabled='disabled' type='radio' name='wantedName' value='v1'>1</input></p><input type='radio' name='n' value='v2' checked='checked'>2</input></td><td><button myCustomAttr='val'>Click</button></tr><td></table>");\r
- executeSelectInAllImplementations(":checked", e, 1);\r
- executeSelectInAllImplementations(":disabled", e, 1);\r
- executeSelectInAllImplementations("input:enabled", e, 1);\r
- executeSelectInAllImplementations("[myCustomAttr]", e, 2);\r
- executeSelectInAllImplementations("*[myCustomAttr]", e, 2);\r
- executeSelectInAllImplementations("input[name=wantedName]", e, 1);\r
- executeSelectInAllImplementations("input[name='wantedName']", e, 1);\r
- executeSelectInAllImplementations("input[name=\"wantedName\"]", e, 1);\r
- }\r
- \r
- public void testSelectElementsInsideContext() {\r
- $(e).html("<spam><p>s</p></spam>");\r
- GQuery q = $("spam", e);\r
- // TODO: in XPath engine it returns 2 when it should return 1\r
- executeSelectInAllImplementations("*", q.get(0), 1, 2);\r
- }\r
-\r
- public void testSelectorEngineDomAssistant() {\r
- // This test runs very slow in chrome\r
- SelectorEngineImpl selEng = new SelectorEngineJS();\r
- executeSelectorEngineTests(selEng);\r
- }\r
-\r
- public void testSelectorEngineSizzle() {\r
- SelectorEngineImpl selEng = new SelectorEngineSizzle();\r
- executeSelectorEngineTests(selEng);\r
- }\r
-\r
- public void testSelectorEngineNative() {\r
- SelectorEngineImpl selEng = new SelectorEngineNative();\r
- if (hasNativeSelector()) {\r
- Window.alert("Testing native selector");\r
- executeSelectorEngineTests(selEng);\r
- }\r
- }\r
-\r
- public void testSelectorEngineXpath() {\r
- SelectorEngineImpl selEng = new SelectorEngineXPath();\r
- executeSelectorEngineTests(selEng);\r
- }\r
-\r
- public void testSelectorEngineCssToXpath() {\r
- SelectorEngineImpl selEng = new SelectorEngineCssToXPath();\r
- executeSelectorEngineTests(selEng);\r
- }\r
-\r
- public void testSelectorsGeneratorNative() {\r
- $(e).html(\r
- "<input type='radio' name='n' value='v1'>1</input>"\r
- + "<input type='radio' name='n' value='v2' checked='checked'>2</input>");\r
-\r
- TestSelectors selectors = GWT.create(TestSelectors.class);\r
- assertEquals(1, selectors.allChecked().size());\r
- }\r
- \r
- public void testSelectorsWithContext() {\r
- $(e).append(\r
- "<div class='branchA'><div class='target'>branchA target</div></div>"\r
- + "<div class='branchB'><div class='target'>branchB target</div></div>");\r
-\r
- TestSelectors selectors = GWT.create(TestSelectors.class);\r
-\r
- assertEquals(2, selectors.target().length());\r
- Element branchA = selectors.branchA().get(0);\r
- Element branchB = selectors.branchB().get(0);\r
- assertNotNull(selectors.branchA().get(0));\r
- assertNotNull(selectors.branchB().get(0));\r
-\r
- assertEquals(2, selectors.target(RootPanel.getBodyElement()).length());\r
- branchA = selectors.branchA(RootPanel.getBodyElement()).get(0);\r
- branchB = selectors.branchB(RootPanel.getBodyElement()).get(0);\r
- assertNotNull(branchA);\r
- assertNotNull(branchB);\r
- assertEquals("branchA target", selectors.target(branchA).text());\r
- assertEquals("branchB target", selectors.target(branchB).text());\r
-\r
- selectors.setRoot(branchA);\r
- assertEquals(1, selectors.target().length());\r
- assertEquals("branchA target", selectors.target().text());\r
-\r
- selectors.setRoot(branchB);\r
- assertEquals(1, selectors.target().length());\r
- assertEquals("branchB target", selectors.target().text());\r
- }\r
- \r
- public void testUnique() {\r
- SelectorEngineImpl selSizz = new SelectorEngineSizzle();\r
- $(e).html(getTestContent());\r
- \r
- JsArray<Element> a;\r
- a = selSizz.select("p", e).cast();\r
- int n = a.length();\r
- assertTrue(n > 300);\r
- for (int i=0; i<n; i++) {\r
- a.push(a.get(i));\r
- }\r
- assertEquals(n * 2 , a.length());\r
- a = SelectorEngineImpl.unique(a);\r
- assertEquals(n, a.length());\r
- }\r
- \r
- private void executeSelectInAllImplementations(String selector, Element elem, Object... array) {\r
- SelectorEngineImpl selSizz = new SelectorEngineSizzle();\r
- SelectorEngineImpl selJS = new SelectorEngineJS();\r
- SelectorEngineImpl selXpath = new SelectorEngineXPath();\r
- SelectorEngineImpl selC2X = new SelectorEngineCssToXPath();\r
- SelectorEngineImpl selNative = new SelectorEngineNative();\r
- assertArrayContains(selector, selSizz.select(selector, elem).getLength(), array);\r
- assertArrayContains(selector, selJS.select(selector, elem).getLength(), array);\r
- if (hasNativeSelector()) {\r
- assertArrayContains(selector, selNative.select(selector, elem).getLength(), array);\r
- } \r
-// assertArrayContains(selector, selXpath.select(selector, elem).getLength(), array);\r
-// assertArrayContains(selector, selC2X.select(selector, elem).getLength(), array);\r
- \r
- }\r
- \r
- private static native boolean hasNativeSelector() /*-{\r
-// alert(document.querySelectorAll + " " + document.querySelector);\r
- return !!(document.querySelectorAll && /native/.test(String(document.querySelectorAll)));\r
- }-*/;\r
-\r
+ } \r
private void executeSelectorEngineTests(SelectorEngineImpl selEng) {\r
$(e).html(getTestContent());\r
\r
assertArrayContains(selEng.select("body", Document.get()).getLength(), 1);\r
- assertArrayContains(selEng.select("body div", Document.get()).getLength(), 53, 55);\r
+ assertArrayContains(selEng.select("body div", Document.get()).getLength(), 53, 54, 55);\r
\r
assertArrayContains(selEng.select("h1[id]:contains(Selectors)", e).getLength(), 1);\r
assertArrayContains(selEng.select("div[class!=madeup]", e).getLength(), 52, 53);\r
assertArrayContains(selEng.select("#title", e).getLength(), 1);\r
assertArrayContains(selEng.select("#title, h1#title", e).getLength(), 1);\r
assertArrayContains(selEng.select("ul.toc li.tocline2", e).getLength(), 12); \r
-// assertArrayContains(selEng.select("h1[id]:contains(Selectors)", e).getLength(), 1);\r
+ assertArrayContains(selEng.select("h1[id]:contains(Selectors)", e).getLength(), 1);\r
}\r
\r
// This method is used to initialize a huge html String, because\r