/* * Copyright (C) 2015 Red Hat, Inc. and/or its affiliates. * * 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 org.jboss.errai.ui.test.element.client; import static elemental.client.Browser.getDocument; import org.jboss.errai.common.client.ui.ElementWrapperWidget; import org.jboss.errai.enterprise.client.cdi.AbstractErraiCDITest; import org.jboss.errai.ioc.client.container.IOC; import org.jboss.errai.ui.shared.TemplateUtil; import org.junit.Test; import com.google.gwt.dom.client.Element; import elemental.dom.Document; import elemental.events.EventTarget; import elemental.events.MouseEvent; public class ElementTemplateTest extends AbstractErraiCDITest { @Override public String getModuleName() { return getClass().getName().replaceAll("client.*$", "Test"); } @Test public void testUseElementInCompositeComponent() { final ElementTemplateTestApp app = IOC.getBeanManager().lookupBean(CompositeElementTemplateTestApp.class).getInstance(); assertContentIsCorrect(app); } @Test public void testUseElementInNonCompositeComponent() { final ElementTemplateTestApp app = IOC.getBeanManager().lookupBean(NonCompositeElementTemplateTestApp.class).getInstance(); assertContentIsCorrect(app); } @Test public void testElementWrapperWidgetIsRemovedOnDestructionInNonCompositeTemplate() throws Exception { final ElementTemplateTestApp app = IOC.getBeanManager().lookupBean(NonCompositeElementTemplateTestApp.class).getInstance(); assertWrapperWidgetIsRemovedOnDestruction(app); } @Test public void testElementWrapperWidgetIsRemovedOnDestructionInCompositeTemplate() throws Exception { final ElementTemplateTestApp app = IOC.getBeanManager().lookupBean(CompositeElementTemplateTestApp.class).getInstance(); assertWrapperWidgetIsRemovedOnDestruction(app); } private void assertWrapperWidgetIsRemovedOnDestruction(final ElementTemplateTestApp app) { final Element formElement = app.getForm().getForm(); final ElementWrapperWidget<?> wrapper = ElementWrapperWidget.getWidget(formElement); assertSame("Control failed: This method should return the same instance until it is removed.", wrapper, ElementWrapperWidget.getWidget(formElement)); IOC.getBeanManager().destroyBean(app); assertNotSame("Wrapper widget was not removed.", wrapper, ElementWrapperWidget.getWidget(formElement)); } private void assertContentIsCorrect(final ElementTemplateTestApp app) { final Element form = app.getForm().getElement(); assertTrue("Form component element is missing text.", form.getInnerHTML().contains("Keep me logged in on this computer")); assertTrue("[form] element in component is missing text.", app.getForm().getForm().getInnerHTML().contains("Keep me logged in on this computer")); assertEquals("Cancel button is missing text.", "Cancel", app.getForm().getCancel().getTextContent()); assertEquals("Username field is missing placeholder attribute.", "Username", TemplateUtil.asElement(app.getForm().getUsername()).getAttribute("placeholder")); // This assertion on it's own could fail if there is a problem with how we use JsInterop assertEquals("Username field is missing placeholder attribute.", "Username", app.getForm().getUsername().getAttribute("placeholder")); assertEquals("Button pressed incorrect number of times.", 0, app.getForm().getNumberOfTimesPressed()); click(app.getForm().getCancel()); assertEquals("Button pressed incorrect number of times.", 1, app.getForm().getNumberOfTimesPressed()); assertEquals("Did not copy inner text from template for element presenter div", "Inner presenter text", app.getForm().getElementPresenter().getElement().getInnerHTML()); } /** * Fires a left-click event on the given target (typically a DOM node). */ public static void click(final EventTarget target) { final MouseEvent evt = (MouseEvent) getDocument().createEvent( Document.Events.MOUSE); evt.initMouseEvent("click", true, true, null, 0, 0, 0, 0, 0, false, false, false, false, MouseEvent.Button.PRIMARY, null); target.dispatchEvent(evt); } }