| /** |
| * Copyright (c) 2012, 2015 - Lunifera GmbH (Austria), Loetz GmbH&Co.KG and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Florian Pirchner - initial API and implementation |
| */ |
| package org.eclipse.osbp.ecview.core.ui.common.tests.editparts.emf.binding; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertSame; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import java.util.List; |
| |
| import org.eclipse.osbp.ecview.core.common.context.ViewContext; |
| import org.eclipse.osbp.ecview.core.common.editpart.DelegatingEditPartManager; |
| import org.eclipse.osbp.ecview.core.common.editpart.IViewEditpart; |
| import org.eclipse.osbp.ecview.core.common.editpart.binding.IBindingEditpart; |
| import org.eclipse.osbp.ecview.core.common.editpart.binding.IBindingSetEditpart; |
| import org.eclipse.osbp.ecview.core.common.editpart.binding.IValueBindingEditpart; |
| import org.eclipse.osbp.ecview.core.common.editpart.emf.ViewEditpart; |
| import org.eclipse.osbp.ecview.core.common.model.binding.BindingFactory; |
| import org.eclipse.osbp.ecview.core.common.model.binding.YBeanValueBindingEndpoint; |
| import org.eclipse.osbp.ecview.core.common.model.binding.YBindingSet; |
| import org.eclipse.osbp.ecview.core.common.model.binding.YValueBinding; |
| import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory; |
| import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableValueEndpoint; |
| import org.eclipse.osbp.ecview.core.common.model.core.YView; |
| import org.eclipse.osbp.ecview.core.extension.model.extension.YTextField; |
| import org.eclipse.osbp.ecview.core.extension.model.extension.util.SimpleExtensionModelFactory; |
| import org.eclipse.osbp.runtime.common.dispose.IDisposable; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| /** |
| * Tests the {@link ViewEditpart}. |
| */ |
| @SuppressWarnings("restriction") |
| public class BindingSetEditpartTest { |
| |
| private DelegatingEditPartManager editpartManager = DelegatingEditPartManager |
| .getInstance(); |
| private BindingFactory bindingFactory = BindingFactory.eINSTANCE; |
| private SimpleExtensionModelFactory elementFactory = new SimpleExtensionModelFactory(); |
| |
| /** |
| * Setup. |
| */ |
| @Before |
| public void setup() { |
| editpartManager.clear(); |
| editpartManager |
| .addDelegate(new org.eclipse.osbp.ecview.core.common.editpart.emf.EditpartManager()); |
| editpartManager |
| .addDelegate(new org.eclipse.osbp.ecview.core.extension.editpart.emf.EditpartManager()); |
| } |
| |
| /** |
| * Tests the activation. |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_bindAll() { |
| // END SUPRESS CATCH EXCEPTION |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| |
| assertFalse(bindingSetEditpart.isActive()); |
| bindingSetEditpart.activate(); |
| assertTrue(bindingSetEditpart.isActive()); |
| |
| bindingSetEditpart.dispose(); |
| } |
| |
| /** |
| * Tests setContent by editPart. |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_getView() { |
| // END SUPRESS CATCH EXCEPTION |
| // ...> view1 |
| YView view1 = CoreModelFactory.eINSTANCE.createYView(); |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| view1.setBindingSet(bindingSet); |
| IViewEditpart view1Editpart = editpartManager.getEditpart( |
| new ViewContext(), view1); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| assertEquals(view1Editpart, bindingSetEditpart.getView()); |
| } |
| |
| /** |
| * Tests the disposal. |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_dispose() { |
| // END SUPRESS CATCH EXCEPTION |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| |
| assertFalse(bindingSetEditpart.isDisposed()); |
| bindingSetEditpart.dispose(); |
| assertTrue(bindingSetEditpart.isDisposed()); |
| |
| bindingSetEditpart.isDisposed(); |
| bindingSetEditpart.dispose(); |
| |
| try { |
| bindingSetEditpart.addDisposeListener(new IDisposable.Listener() { |
| @Override |
| public void notifyDisposed(IDisposable notifier) { |
| } |
| }); |
| fail(); |
| // BEGIN SUPRESS CATCH EXCEPTION |
| } catch (Exception e) { |
| // END SUPRESS CATCH EXCEPTION |
| // expected |
| } |
| |
| try { |
| bindingSetEditpart.activate(); |
| fail(); |
| // BEGIN SUPRESS CATCH EXCEPTION |
| } catch (Exception e) { |
| // END SUPRESS CATCH EXCEPTION |
| // expected |
| } |
| try { |
| bindingSetEditpart.isActive(); |
| fail(); |
| // BEGIN SUPRESS CATCH EXCEPTION |
| } catch (Exception e) { |
| // END SUPRESS CATCH EXCEPTION |
| // expected |
| } |
| |
| try { |
| bindingSetEditpart.getId(); |
| fail(); |
| // BEGIN SUPRESS CATCH EXCEPTION |
| } catch (Exception e) { |
| // END SUPRESS CATCH EXCEPTION |
| // expected |
| } |
| |
| try { |
| bindingSetEditpart.getModel(); |
| fail(); |
| // BEGIN SUPRESS CATCH EXCEPTION |
| } catch (Exception e) { |
| // END SUPRESS CATCH EXCEPTION |
| // expected |
| } |
| |
| try { |
| bindingSetEditpart |
| .removeDisposeListener(new IDisposable.Listener() { |
| @Override |
| public void notifyDisposed(IDisposable notifier) { |
| } |
| }); |
| fail(); |
| // BEGIN SUPRESS CATCH EXCEPTION |
| } catch (Exception e) { |
| // END SUPRESS CATCH EXCEPTION |
| // expected |
| } |
| } |
| |
| /** |
| * Tests add and remove. |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_addRemoveBinding_byModel() { |
| // END SUPRESS CATCH EXCEPTION |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| bindingSetEditpart.setBindingManager(new DefaultBindingManager()); |
| |
| YValueBinding binding = bindingFactory.createYValueBinding(); |
| Bean bean1 = new Bean("value"); |
| Bean bean2 = new Bean("value"); |
| YBeanValueBindingEndpoint ep1 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| YBeanValueBindingEndpoint ep2 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| ep1.setBean(bean1); |
| ep1.setPropertyPath("value"); |
| ep2.setBean(bean2); |
| ep2.setPropertyPath("value"); |
| binding.setModelEndpoint(ep1); |
| binding.setTargetEndpoint(ep2); |
| bindingSet.addBinding(binding); |
| |
| // test binded |
| bean1.setValue("test1"); |
| assertEquals("test1", bean1.getValue()); |
| assertEquals("test1", bean2.getValue()); |
| |
| IValueBindingEditpart bindingEditpart = editpartManager.getEditpart( |
| new ViewContext(), binding); |
| assertFalse(bindingSetEditpart.isActive()); |
| assertEquals(1, bindingSetEditpart.getBindings().size()); |
| assertSame(bindingEditpart, bindingSetEditpart.getBindings().get(0)); |
| assertTrue(bindingEditpart.isBound()); |
| |
| // remove the binding |
| // |
| bindingSet.removeBinding(binding); |
| // test unbinded |
| bean1.setValue("test2"); |
| assertEquals("test2", bean1.getValue()); |
| assertEquals("test1", bean2.getValue()); |
| |
| assertEquals(0, bindingSetEditpart.getBindings().size()); |
| assertTrue(bindingEditpart.isDisposed()); |
| // ensure that editpart was detached |
| assertNull(editpartManager.findEditpart(binding)); |
| } |
| |
| /** |
| * Tests add and remove. |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_addRemoveBinding_byModel_II() { |
| // END SUPRESS CATCH EXCEPTION |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| bindingSetEditpart.setBindingManager(new DefaultBindingManager()); |
| |
| Bean bean1 = new Bean("value"); |
| Bean bean2 = new Bean("value"); |
| YBeanValueBindingEndpoint ep1 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| YBeanValueBindingEndpoint ep2 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| ep1.setBean(bean1); |
| ep1.setPropertyPath("value"); |
| ep2.setBean(bean2); |
| ep2.setPropertyPath("value"); |
| |
| // use helper method |
| YValueBinding binding = bindingSet.addBinding(ep1, ep2); |
| |
| // test binded |
| bean1.setValue("test1"); |
| assertEquals("test1", bean1.getValue()); |
| assertEquals("test1", bean2.getValue()); |
| |
| IValueBindingEditpart bindingEditpart = editpartManager.getEditpart( |
| new ViewContext(), binding); |
| assertFalse(bindingSetEditpart.isActive()); |
| assertEquals(1, bindingSetEditpart.getBindings().size()); |
| assertSame(bindingEditpart, bindingSetEditpart.getBindings().get(0)); |
| assertTrue(bindingEditpart.isBound()); |
| |
| // remove the binding |
| // |
| bindingSet.removeBinding(binding); |
| // test unbinded |
| bean1.setValue("test2"); |
| assertEquals("test2", bean1.getValue()); |
| assertEquals("test1", bean2.getValue()); |
| |
| assertEquals(0, bindingSetEditpart.getBindings().size()); |
| assertTrue(bindingEditpart.isDisposed()); |
| // ensure that editpart was detached |
| assertNull(editpartManager.findEditpart(binding)); |
| } |
| |
| /** |
| * Tests adding a binding. But the binding set is not initialized yet! |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_addRemoveBinding_byModel__but_BindingSet_NotInitialized() { |
| // END SUPRESS CATCH EXCEPTION |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| |
| YValueBinding binding = bindingFactory.createYValueBinding(); |
| Bean bean1 = new Bean("value"); |
| Bean bean2 = new Bean("value"); |
| YBeanValueBindingEndpoint ep1 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| YBeanValueBindingEndpoint ep2 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| ep1.setBean(bean1); |
| ep1.setPropertyPath("value"); |
| ep2.setBean(bean2); |
| ep2.setPropertyPath("value"); |
| binding.setModelEndpoint(ep1); |
| binding.setTargetEndpoint(ep2); |
| bindingSet.addBinding(binding); |
| |
| // |
| // initialize the binding set late |
| // |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| bindingSetEditpart.setBindingManager(new DefaultBindingManager()); |
| |
| // test binded |
| bean1.setValue("test1"); |
| assertEquals("test1", bean1.getValue()); |
| assertEquals("value", bean2.getValue()); |
| |
| // activate binding set |
| bindingSetEditpart.activate(); |
| bean1.setValue("test2"); |
| assertEquals("test2", bean1.getValue()); |
| assertEquals("test2", bean2.getValue()); |
| |
| IValueBindingEditpart bindingEditpart = editpartManager.getEditpart( |
| new ViewContext(), binding); |
| assertEquals(1, bindingSetEditpart.getBindings().size()); |
| assertSame(bindingEditpart, bindingSetEditpart.getBindings().get(0)); |
| assertTrue(bindingEditpart.isBound()); |
| |
| // remove the binding |
| // |
| bindingSet.removeBinding(binding); |
| // test unbinded |
| bean1.setValue("test3"); |
| assertEquals("test3", bean1.getValue()); |
| assertEquals("test2", bean2.getValue()); |
| |
| assertEquals(0, bindingSetEditpart.getBindings().size()); |
| assertTrue(bindingEditpart.isDisposed()); |
| // ensure that editpart was detached |
| assertNull(editpartManager.findEditpart(binding)); |
| } |
| |
| /** |
| * Tests add and remove. |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_addRemoveBinding_byEditPart() { |
| // END SUPRESS CATCH EXCEPTION |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| bindingSetEditpart.setBindingManager(new DefaultBindingManager()); |
| |
| // create binding |
| YValueBinding binding = bindingFactory.createYValueBinding(); |
| Bean bean1 = new Bean("value"); |
| Bean bean2 = new Bean("value"); |
| YBeanValueBindingEndpoint ep1 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| YBeanValueBindingEndpoint ep2 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| ep1.setBean(bean1); |
| ep1.setPropertyPath("value"); |
| ep2.setBean(bean2); |
| ep2.setPropertyPath("value"); |
| binding.setModelEndpoint(ep1); |
| binding.setTargetEndpoint(ep2); |
| |
| IValueBindingEditpart bindingEditpart = editpartManager.getEditpart( |
| new ViewContext(), binding); |
| assertFalse(bindingSetEditpart.isActive()); |
| |
| bindingSetEditpart.addBinding(bindingEditpart); |
| // test binded |
| bean1.setValue("test1"); |
| assertEquals("test1", bean1.getValue()); |
| assertEquals("test1", bean2.getValue()); |
| |
| assertFalse(bindingSetEditpart.isActive()); |
| assertEquals(1, bindingSetEditpart.getBindings().size()); |
| assertSame(bindingEditpart, bindingSetEditpart.getBindings().get(0)); |
| assertTrue(bindingEditpart.isBound()); |
| |
| // unset the layout |
| // |
| bindingSet.removeBinding(binding); |
| // test unbinded |
| bean1.setValue("test2"); |
| assertEquals("test2", bean1.getValue()); |
| assertEquals("test1", bean2.getValue()); |
| |
| assertEquals(0, bindingSetEditpart.getBindings().size()); |
| assertTrue(bindingEditpart.isDisposed()); |
| // ensure that editpart was detached |
| assertNull(editpartManager.findEditpart(binding)); |
| } |
| |
| /** |
| * Tests getBindings method. |
| */ |
| @Test |
| // BEGIN SUPRESS CATCH EXCEPTION |
| public void test_getBindings() { |
| // END SUPRESS CATCH EXCEPTION |
| // ...> view1 |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| bindingSetEditpart.setBindingManager(new DefaultBindingManager()); |
| |
| // add binding 1 |
| YValueBinding binding = bindingFactory.createYValueBinding(); |
| Bean bean1 = new Bean("value"); |
| Bean bean2 = new Bean("value"); |
| YBeanValueBindingEndpoint ep1 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| YBeanValueBindingEndpoint ep2 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| ep1.setBean(bean1); |
| ep1.setPropertyPath("value"); |
| ep2.setBean(bean2); |
| ep2.setPropertyPath("value"); |
| binding.setModelEndpoint(ep1); |
| binding.setTargetEndpoint(ep2); |
| bindingSet.addBinding(binding); |
| |
| // add binding 2 |
| YValueBinding binding2 = bindingFactory.createYValueBinding(); |
| Bean bean2_1 = new Bean("value"); |
| Bean bean2_2 = new Bean("value"); |
| YBeanValueBindingEndpoint ep2_1 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| YBeanValueBindingEndpoint ep2_2 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| ep2_1.setBean(bean2_1); |
| ep2_1.setPropertyPath("value"); |
| ep2_2.setBean(bean2_2); |
| ep2_2.setPropertyPath("value"); |
| binding2.setModelEndpoint(ep2_1); |
| binding2.setTargetEndpoint(ep2_2); |
| bindingSet.addBinding(binding2); |
| |
| List<IBindingEditpart<?>> bindings = bindingSetEditpart.getBindings(); |
| assertSame(binding, bindings.get(0).getModel()); |
| assertSame(binding2, bindings.get(1).getModel()); |
| |
| // remove the binding |
| // |
| bindingSet.removeBinding(binding); |
| bindings = bindingSetEditpart.getBindings(); |
| assertEquals(1, bindings.size()); |
| assertSame(binding2, bindings.get(0).getModel()); |
| } |
| |
| @Test |
| public void test_findBindingsFor() { |
| |
| // END SUPRESS CATCH EXCEPTION |
| // ...> view1 |
| YBindingSet bindingSet = bindingFactory.createYBindingSet(); |
| IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart( |
| new ViewContext(), bindingSet); |
| bindingSetEditpart.setBindingManager(new DefaultBindingManager()); |
| |
| YTextField text1 = elementFactory.createTextField(); |
| |
| // add binding 1 |
| YValueBinding binding = bindingFactory.createYValueBinding(); |
| Bean bean1 = new Bean("value"); |
| YBeanValueBindingEndpoint ep1 = bindingFactory |
| .createYBeanValueBindingEndpoint(); |
| YEmbeddableValueEndpoint ep2 = text1.createValueEndpoint(); |
| ep1.setBean(bean1); |
| ep1.setPropertyPath("value"); |
| binding.setModelEndpoint(ep1); |
| binding.setTargetEndpoint(ep2); |
| bindingSet.addBinding(binding); |
| |
| List<IBindingEditpart<?>> result = bindingSetEditpart |
| .findBindings(text1); |
| Assert.assertEquals(1, result.size()); |
| IBindingEditpart<?> bindingResult = result.get(0); |
| Assert.assertSame(bindingResult.getModelEndpoint().getModel(), ep1); |
| Assert.assertSame(bindingResult.getTargetEndpoint().getModel(), ep2); |
| Assert.assertSame(binding, bindingResult.getModel()); |
| |
| } |
| |
| public class Bean extends AbstractBean { |
| |
| private String value; |
| |
| public Bean(String value) { |
| super(); |
| this.value = value; |
| } |
| |
| /** |
| * @return the value |
| */ |
| public String getValue() { |
| return value; |
| } |
| |
| /** |
| * @param value |
| * the value to set |
| */ |
| public void setValue(String value) { |
| firePropertyChanged("value", this.value, this.value = value); |
| } |
| |
| } |
| } |