/* * Copyright (C) 2012 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.stylebinding.client; import org.jboss.errai.enterprise.client.cdi.AbstractErraiCDITest; import org.jboss.errai.ioc.client.container.IOC; import org.jboss.errai.ioc.client.container.SyncBeanDef; import org.jboss.errai.ui.shared.TemplateUtil; import org.jboss.errai.ui.shared.TemplateWidgetMapper; import org.jboss.errai.ui.shared.api.style.StyleBindingsRegistry; import org.jboss.errai.ui.test.stylebinding.client.res.CompositeStyleBoundTemplate; import org.jboss.errai.ui.test.stylebinding.client.res.NonCompositeStyleBoundTemplate; import org.jboss.errai.ui.test.stylebinding.client.res.StyleBoundTemplate; import org.jboss.errai.ui.test.stylebinding.client.res.StyleControl; import org.jboss.errai.ui.test.stylebinding.client.res.TestModel; import com.google.gwt.dom.client.Element; /** * @author Mike Brock */ public class StyleBindingTest extends AbstractErraiCDITest { @Override public String getModuleName() { return "org.jboss.errai.ui.test.stylebinding.Test"; } @Override protected void gwtSetUp() throws Exception { setRemoteCommunicationEnabled(false); super.gwtSetUp(); StyleBindingsRegistry.get().updateStyles(); } public void testStyleBindingWithCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); styleBindingAssertions(instance); } public void testStyleBindingWithNonCompositeNonComposite() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); styleBindingAssertions(instance); } private void styleBindingAssertions(final StyleBoundTemplate instance) { assertEquals("hidden", instance.getTestA().getElement().getStyle().getVisibility()); final SyncBeanDef<StyleControl> styleControl = IOC.getBeanManager().lookupBean(StyleControl.class); styleControl.getInstance().setAdmin(true); StyleBindingsRegistry.get().updateStyles(); assertEquals("visible", instance.getTestA().getElement().getStyle().getVisibility()); } public void testStyleBindingWithElementalElementWithCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); elementalStyleBindingAssertions(instance); } public void testStyleBindingWithElementalElementWithNonCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); elementalStyleBindingAssertions(instance); } private void elementalStyleBindingAssertions(final StyleBoundTemplate instance) { assertEquals("hidden", instance.getElementalElement().getStyle().getVisibility()); final SyncBeanDef<StyleControl> styleControl = IOC.getBeanManager().lookupBean(StyleControl.class); styleControl.getInstance().setAdmin(true); StyleBindingsRegistry.get().updateStyles(); assertEquals("visible", instance.getElementalElement().getStyle().getVisibility()); } public void testStyleBindingWithGwtUserElementWithCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); gwtUserElementBindingAssertions(instance); } public void testStyleBindingWithGwtUserElementWithNonCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); gwtUserElementBindingAssertions(instance); } private void gwtUserElementBindingAssertions(final StyleBoundTemplate instance) { assertEquals("hidden", instance.getUserSpanElement().getStyle().getVisibility()); final SyncBeanDef<StyleControl> styleControl = IOC.getBeanManager().lookupBean(StyleControl.class); styleControl.getInstance().setAdmin(true); StyleBindingsRegistry.get().updateStyles(); assertEquals("visible", instance.getUserSpanElement().getStyle().getVisibility()); } public void testStyleBindingWithJsTypeElement() throws Exception { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); jsTypeElementBindingAssertions(instance); } public void testStyleBindingNonWithJsTypeElement() throws Exception { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); jsTypeElementBindingAssertions(instance); } private void jsTypeElementBindingAssertions(final StyleBoundTemplate instance) { final Element element = TemplateUtil.asElement(instance.getJstype()); assertEquals("hidden", element.getStyle().getVisibility()); final SyncBeanDef<StyleControl> styleControl = IOC.getBeanManager().lookupBean(StyleControl.class); styleControl.getInstance().setAdmin(true); StyleBindingsRegistry.get().updateStyles(); assertEquals("visible", element.getStyle().getVisibility()); } public void testStyleBindingWithNonCompositeComponentInCompositeTemplate() throws Exception { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); nonCompositeComponentAssertions(instance); } public void testStyleBindingWithNonCompositeComponentInNonCompositeTemplate() throws Exception { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); nonCompositeComponentAssertions(instance); } private void nonCompositeComponentAssertions(final StyleBoundTemplate instance) { final Element element = TemplateWidgetMapper.get(instance.getTestD()).getElement().cast(); assertEquals("hidden", element.getStyle().getVisibility()); final SyncBeanDef<StyleControl> styleControl = IOC.getBeanManager().lookupBean(StyleControl.class); styleControl.getInstance().setAdmin(true); StyleBindingsRegistry.get().updateStyles(); assertEquals("visible", element.getStyle().getVisibility()); } public void testDataBindingChangesUpdatesStyleWithCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); bindingChangesUpdateStyleAssertions(instance); } public void testDataBindingChangesUpdatesStyleWithNonCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); bindingChangesUpdateStyleAssertions(instance); } private void bindingChangesUpdateStyleAssertions(final StyleBoundTemplate instance) { assertEquals("", instance.getTestB().getElement().getStyle().getVisibility()); instance.getTestModel().setTestB("0"); assertEquals("0", instance.getTestB().getText()); assertEquals("hidden", instance.getTestB().getElement().getStyle().getVisibility()); } public void testCustomComponentDataBindingChangesUpdatesStyleWithCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); customComponenetBindingChangesUpdateStyleAssertions(instance); } public void testCustomComponentDataBindingChangesUpdatesStyleWithNonCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); customComponenetBindingChangesUpdateStyleAssertions(instance); } private void customComponenetBindingChangesUpdateStyleAssertions(final StyleBoundTemplate instance) { assertEquals("", instance.getTestC().getElement().getStyle().getVisibility()); instance.getTestModel().setTestC("0"); assertEquals("0", instance.getTestC().getValue()); assertEquals("hidden", instance.getTestC().getElement().getStyle().getVisibility()); } public void testDestroyingBeanCleansUpStyleBindingsWithCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); destructionCleanupAssertions(instance); } public void testDestroyingBeanCleansUpStyleBindingsWithNonCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); destructionCleanupAssertions(instance); } private void destructionCleanupAssertions(final StyleBoundTemplate instance) { assertEquals("hidden", instance.getTestA().getElement().getStyle().getVisibility()); IOC.getBeanManager().destroyBean(instance); final SyncBeanDef<StyleControl> styleControl = IOC.getBeanManager().lookupBean(StyleControl.class); styleControl.getInstance().setAdmin(true); StyleBindingsRegistry.get().updateStyles(); assertEquals("hidden", instance.getTestA().getElement().getStyle().getVisibility()); } public void testDestroyingBeanCleansUpPropertyChangeHandlerWithCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(CompositeStyleBoundTemplate.class).getInstance(); propertyChangeHandlerCleanupAssertions(instance); } public void testDestroyingBeanCleansUpPropertyChangeHandlerWithNonCompositeTemplate() { final StyleBoundTemplate instance = IOC.getBeanManager().lookupBean(NonCompositeStyleBoundTemplate.class).getInstance(); propertyChangeHandlerCleanupAssertions(instance); } private void propertyChangeHandlerCleanupAssertions(final StyleBoundTemplate instance) { final StyleBindingsRegistry oldReg = StyleBindingsRegistry.get(); try { StyleBindingsRegistry registry = new StyleBindingsRegistry() { @Override public void updateStyles(Object beanInst) { fail("updateStyles should not be called after bean was destroyed"); } }; TestModel model = instance.getTestModel(); model.setTestB(""); assertEquals("", instance.getTestB().getText()); assertEquals("", instance.getTestB().getElement().getStyle().getVisibility()); IOC.getBeanManager().destroyBean(instance); StyleBindingsRegistry.set(registry); model.setTestB("0"); assertEquals("", instance.getTestB().getText()); assertEquals("", instance.getTestB().getElement().getStyle().getVisibility()); } finally { StyleBindingsRegistry.set(oldReg); } } }