/*
* Copyright 2010 Gal Dolber.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.guit.client.binder;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.guit.client.GuitEntryPoint;
import com.guit.client.async.event.AsyncExceptionEvent;
import com.guit.client.binder.useraction.event.UserActionEvent;
import com.guit.client.binder.useraction.event.UserActionHandler;
import com.guit.client.common.HasState;
import com.guit.client.dom.Div;
import com.guit.client.dom.GuitDom;
import com.guit.client.dom.Span;
import com.guit.client.dom.impl.GuitDomImpl;
import java.util.Date;
import java.util.List;
public class GuitBinderGwtTest extends GWTTestCase {
@Override
public String getModuleName() {
return "com.guit.client.binder.TestBinderModule";
}
private SomePresenter presenter;
private EditorPresenter editorPresenter;
private WidgetPresenter widgetPresenter;
private EventBus eventBus;
@Override
protected void gwtSetUp() throws Exception {
GuitEntryPoint entryPoint = new GuitEntryPoint();
entryPoint.onModuleLoad();
presenter = SomePresenter.instance;
editorPresenter = EditorPresenter.instance;
widgetPresenter = WidgetPresenter.instance;
eventBus = GuitEntryPoint.getEventBus();
}
GuitDom f = new GuitDomImpl();
public void testexSelector() {
Div e = f.div();
e.html("<div><input name='name' /></div>");
com.guit.client.dom.Element el = f.element("span");
el.attr("name", "name");
Span span = f.span().from(el);
assertEquals("name", span.attr("name"));
List<com.guit.client.dom.Element> r = e.query("* input[name='name']");
assertEquals(1, r.size());
assertEquals("input", r.get(0).tag());
}
public void testElementsClick() {
NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
widgetPresenter.divclicked = false;
widgetPresenter.div.getElement().dispatchEvent(event);
assertTrue(widgetPresenter.divclicked);
widgetPresenter.div1clicked = false;
widgetPresenter.div1.getElement().dispatchEvent(event);
assertTrue(widgetPresenter.div1clicked);
widgetPresenter.spanclicked = false;
widgetPresenter.span.getElement().dispatchEvent(event);
assertTrue(widgetPresenter.spanclicked);
}
public void testViewFieldsBindings() {
assertNotNull(presenter.button);
assertTrue(presenter.button instanceof Button);
assertNotNull(presenter.button2);
assertTrue(presenter.button2 instanceof Button);
assertNotNull(presenter.anotherButton2Bind);
assertTrue(presenter.anotherButton2Bind instanceof Button);
assertEquals(presenter.button2, presenter.anotherButton2Bind);
assertNotNull(presenter.runasync);
assertTrue(presenter.runasync instanceof Button);
assertNotNull(presenter.div);
assertFalse(presenter.div instanceof Element); // Is emulated
}
public void testConventionViewHandler() {
presenter.convention$singlefield$click$triggered = false;
((Button) presenter.button).click();
assertTrue(presenter.convention$singlefield$click$triggered);
}
public void testAnnotationViewHandler() {
presenter.annotation$singlefield$click$triggered = false;
((Button) presenter.button).click();
assertTrue(presenter.annotation$singlefield$click$triggered);
}
public void testConventionMultiFieldsHandler() {
presenter.convention$manyfields$click$triggered = false;
((Button) presenter.button).click();
assertTrue(presenter.convention$manyfields$click$triggered);
presenter.convention$manyfields$click$triggered = false;
((Button) presenter.button2).click();
assertTrue(presenter.convention$manyfields$click$triggered);
}
public void testAnnotationMultiFieldsHandler() {
presenter.annotation$manyfields$click$triggered = false;
((Button) presenter.button).click();
assertTrue(presenter.annotation$manyfields$click$triggered);
presenter.annotation$manyfields$click$triggered = false;
((Button) presenter.button2).click();
assertTrue(presenter.annotation$manyfields$click$triggered);
}
// public void testRunAsyncViewHandler() {
// presenter.runasync$triggered = false;
// ((Button) presenter.runasync).click();
// assertTrue(presenter.runasync$triggered);
// }
public void testUserActionViewHandler() {
final HasState<Boolean> state = new HasState<Boolean>();
state.value = false;
eventBus.addHandler(UserActionEvent.getType(), new UserActionHandler() {
@Override
public void onUserAction(UserActionEvent event) {
assertEquals("Test", event.getUserAction());
assertEquals("TestCategory", event.getCategory());
assertEquals("3", event.getText());
assertEquals(3, (int) event.getNumber());
state.value = true;
}
});
presenter.userAction$triggered = false;
((Button) presenter.userAction).click();
assertTrue(presenter.userAction$triggered);
assertTrue(state.value);
}
public void testHasAttributeAndAttibuteAnnotationsHandler() {
NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
presenter.hasAttribute$triggered = null;
((Element) presenter.trueElement.getTarget()).dispatchEvent(event);
assertTrue(presenter.hasAttribute$triggered);
presenter.hasAttribute$triggered = null;
((Element) presenter.falseElement.getTarget()).dispatchEvent(event);
assertFalse(presenter.hasAttribute$triggered);
}
public void testKeyCodeViewHandler() {
presenter.keyCode$triggered = false;
NativeEvent event =
Document.get().createKeyDownEvent(false, false, false, false, KeyCodes.KEY_ENTER);
KeyPressEvent.fireNativeEvent(event, ((TextBox) presenter.textbox));
assertTrue(presenter.keyCode$triggered);
presenter.keyCode$triggered = false;
event = Document.get().createKeyDownEvent(false, false, false, false, KeyCodes.KEY_ALT);
KeyPressEvent.fireNativeEvent(event, ((TextBox) presenter.textbox));
assertFalse(presenter.keyCode$triggered);
}
public void testPreventDefaultViewHandler() {
presenter.preventDefault$triggered = false;
((Button) presenter.preventDefault).click();
assertTrue(presenter.preventDefault$triggered);
}
public void testStopPropagationViewHandler() {
presenter.stopPropagation$triggered = false;
presenter.stopPropagationPanel$triggered = false;
NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
((Label) presenter.stopPropagation).getElement().dispatchEvent(event);
assertTrue(presenter.stopPropagation$triggered);
assertFalse(presenter.stopPropagationPanel$triggered);
}
public void testDontStopPropagationViewHandler() {
presenter.dontStopPropagation$triggered = false;
presenter.dontStopPropagationPanel$triggered = false;
NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
((Label) presenter.dontStopPropagation).getElement().dispatchEvent(event);
assertTrue(presenter.dontStopPropagation$triggered);
assertTrue(presenter.dontStopPropagationPanel$triggered);
}
public void testHtmlElements() {
String src = "http://imagesrc";
presenter.image.setSrc(src);
assertEquals(src, presenter.image.getSrc());
}
public void testAutofocus() {
// assertTrue(presenter.focus);
}
public void testEditor() {
editorPresenter.getView();
editorPresenter.driver.edit(new Pojo());
long time = 1296893958140L;
Date birthday = new Date(time);
editorPresenter.birthday.setValue(birthday);
Boolean enabled = false;
editorPresenter.enabled.setValue(enabled);
String name = "Einstein";
editorPresenter.name.setValue(name);
Integer votes = 33;
editorPresenter.votes.setValue(votes);
Double age = 33.33;
editorPresenter.age.setValue(age);
Pojo pojo = editorPresenter.driver.flush();
assertEquals(enabled, pojo.getEnabled());
assertEquals(name, pojo.getName());
assertEquals(votes, pojo.getVotes());
assertEquals(age, pojo.getAge());
// assertEquals(time, pojo.getBirthday().getTime());
}
public void testEventBus() {
presenter.asyncActivity = false;
eventBus.fireEvent(new AsyncExceptionEvent(null));
assertTrue(presenter.asyncActivity);
}
}