blob: bb6bcb8db54f9df6e367eabf6e1b7747f9f9253c [file] [log] [blame]
/**
* 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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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 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.binding.IBindableValueEndpointEditpart;
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.YBinding;
import org.eclipse.osbp.ecview.core.common.model.binding.YBindingEndpoint;
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.binding.YValueBindingEndpoint;
import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
import org.eclipse.osbp.runtime.common.dispose.IDisposable;
import org.junit.Before;
import org.junit.Test;
/**
* Tests the {@link ViewEditpart}.
*/
@SuppressWarnings("restriction")
public class BindingEditpartTest {
private DelegatingEditPartManager editpartManager = DelegatingEditPartManager
.getInstance();
private BindingFactory bindingFactory = BindingFactory.eINSTANCE;
private CoreModelFactory factory = CoreModelFactory.eINSTANCE;
/**
* 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 bind method.
*/
@Test
// BEGIN SUPRESS CATCH EXCEPTION
public void test_bind_withoutBindingSet() {
// END SUPRESS CATCH EXCEPTION
YBinding yBinding = bindingFactory.createYValueBinding();
IValueBindingEditpart bindingEditpart = editpartManager.getEditpart(
new ViewContext(), yBinding);
assertFalse(bindingEditpart.isBound());
bindingEditpart.bind();
assertFalse(bindingEditpart.isBound());
bindingEditpart.dispose();
}
/**
* Tests the bind method.
*/
@Test
// BEGIN SUPRESS CATCH EXCEPTION
public void test_bind_exception() {
// END SUPRESS CATCH EXCEPTION
YValueBinding yBinding = bindingFactory.createYValueBinding();
IValueBindingEditpart bindingEditpart = editpartManager.getEditpart(
new ViewContext(), yBinding);
Bean bean1 = new Bean("value");
Bean bean2 = new Bean("value");
YBeanValueBindingEndpoint ep1 = bindingFactory
.createYBeanValueBindingEndpoint();
YBeanValueBindingEndpoint ep2 = bindingFactory
.createYBeanValueBindingEndpoint();
ep1.setBean(bean1);
ep2.setBean(bean2);
yBinding.setModelEndpoint(ep1);
yBinding.setTargetEndpoint(ep2);
bindingEditpart.bind();
bindingEditpart.dispose();
}
/**
* Tests the activation.
*/
@Test
// BEGIN SUPRESS CATCH EXCEPTION
public void test_bind_unbind() {
// END SUPRESS CATCH EXCEPTION
YBindingSet yBindingSet = bindingFactory.createYBindingSet();
IBindingSetEditpart bindingSetEditpart = editpartManager.getEditpart(
new ViewContext(), yBindingSet);
bindingSetEditpart.setBindingManager(new DefaultBindingManager());
YValueBinding yBinding = bindingFactory.createYValueBinding();
IValueBindingEditpart bindingEditpart = editpartManager.getEditpart(
new ViewContext(), yBinding);
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");
yBinding.setModelEndpoint(ep1);
yBinding.setTargetEndpoint(ep2);
assertFalse(bindingEditpart.isBound());
bindingSetEditpart.addBinding(bindingEditpart);
assertTrue(bindingEditpart.isBound());
bean1.setValue("test1");
assertEquals("test1", bean1.getValue());
assertEquals("test1", bean2.getValue());
bean2.setValue("test2");
assertEquals("test2", bean1.getValue());
assertEquals("test2", bean2.getValue());
bindingEditpart.unbind();
assertFalse(bindingEditpart.isBound());
bean1.setValue("test3");
assertEquals("test3", bean1.getValue());
assertEquals("test2", bean2.getValue());
bean2.setValue("test4");
assertEquals("test4", bean2.getValue());
assertEquals("test3", bean1.getValue());
bindingEditpart.bind();
assertTrue(bindingEditpart.isBound());
assertEquals("test3", bean1.getValue());
assertEquals("test3", bean2.getValue());
bindingSetEditpart.removeBinding(bindingEditpart);
assertTrue(bindingEditpart.isDisposed());
bean1.setValue("test5");
assertEquals("test5", bean1.getValue());
assertEquals("test3", bean2.getValue());
}
/**
* Tests the disposal.
*/
@Test
// BEGIN SUPRESS CATCH EXCEPTION
public void test_dispose() {
// END SUPRESS CATCH EXCEPTION
YBinding yBinding = bindingFactory.createYValueBinding();
IValueBindingEditpart bindingEditpart = editpartManager.getEditpart(
new ViewContext(), yBinding);
assertFalse(bindingEditpart.isDisposed());
bindingEditpart.dispose();
assertTrue(bindingEditpart.isDisposed());
bindingEditpart.isDisposed();
bindingEditpart.dispose();
try {
bindingEditpart.addDisposeListener(new IDisposable.Listener() {
@Override
public void notifyDisposed(IDisposable notifier) {
}
});
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.bind();
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.unbind();
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.getModelEndpoint();
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.getTargetEndpoint();
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.setModelEndpoint(null);
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.setTargetEndpoint(null);
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.getId();
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.getModel();
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
try {
bindingEditpart.removeDisposeListener(new IDisposable.Listener() {
@Override
public void notifyDisposed(IDisposable notifier) {
}
});
fail();
// BEGIN SUPRESS CATCH EXCEPTION
} catch (Exception e) {
// END SUPRESS CATCH EXCEPTION
// expected
}
}
/**
* Tests setEndpoint by model.
*/
@Test
// BEGIN SUPRESS CATCH EXCEPTION
public void test_setEndpoint_byModel() {
// END SUPRESS CATCH EXCEPTION
// ...> view1
YValueBinding binding = bindingFactory.createYValueBinding();
YValueBindingEndpoint targetEndpoint = factory
.createYContextValueBindingEndpoint();
YValueBindingEndpoint modelEndpoint = factory
.createYContextValueBindingEndpoint();
IValueBindingEditpart bindingEditpart = editpartManager.getEditpart(
new ViewContext(), binding);
IBindableValueEndpointEditpart targetEndpointEditpart = editpartManager
.getEditpart(new ViewContext(), targetEndpoint);
IBindableValueEndpointEditpart modelEndpointEditpart = editpartManager
.getEditpart(new ViewContext(), modelEndpoint);
// set the value
//
binding.setTargetEndpoint(targetEndpoint);
assertSame(targetEndpointEditpart, bindingEditpart.getTargetEndpoint());
assertFalse(targetEndpointEditpart.isDisposed());
assertNull(bindingEditpart.getModelEndpoint());
binding.setModelEndpoint(modelEndpoint);
assertSame(modelEndpointEditpart, bindingEditpart.getModelEndpoint());
assertFalse(modelEndpointEditpart.isDisposed());
binding.setTargetEndpoint(null);
assertNull(bindingEditpart.getTargetEndpoint());
assertSame(modelEndpointEditpart, bindingEditpart.getModelEndpoint());
assertFalse(targetEndpointEditpart.isDisposed());
binding.setModelEndpoint(null);
assertNull(bindingEditpart.getTargetEndpoint());
assertNull(bindingEditpart.getModelEndpoint());
assertFalse(targetEndpointEditpart.isDisposed());
}
/**
* Tests setEndpoint by editPart.
*/
@Test
// BEGIN SUPRESS CATCH EXCEPTION
public void test_setEndpoint_byEditPart() {
// END SUPRESS CATCH EXCEPTION
// ...> view1
YBinding binding = bindingFactory.createYValueBinding();
YBindingEndpoint targetEndpoint = factory
.createYContextValueBindingEndpoint();
YBindingEndpoint modelEndpoint = factory
.createYContextValueBindingEndpoint();
IValueBindingEditpart bindingEditpart = editpartManager.getEditpart(
new ViewContext(), binding);
IBindableValueEndpointEditpart targetEndpointEditpart = editpartManager
.getEditpart(new ViewContext(), targetEndpoint);
IBindableValueEndpointEditpart modelEndpointEditpart = editpartManager
.getEditpart(new ViewContext(), modelEndpoint);
// set the value
//
bindingEditpart.setTargetEndpoint(targetEndpointEditpart);
assertSame(targetEndpoint, binding.getTargetEndpoint());
assertFalse(targetEndpointEditpart.isDisposed());
assertNull(binding.getModelEndpoint());
bindingEditpart.setModelEndpoint(modelEndpointEditpart);
assertSame(modelEndpoint, binding.getModelEndpoint());
assertFalse(modelEndpointEditpart.isDisposed());
bindingEditpart.setTargetEndpoint(null);
assertNull(binding.getTargetEndpoint());
assertSame(modelEndpoint, binding.getModelEndpoint());
assertFalse(targetEndpointEditpart.isDisposed());
bindingEditpart.setModelEndpoint(null);
assertNull(binding.getTargetEndpoint());
assertNull(binding.getModelEndpoint());
assertFalse(targetEndpointEditpart.isDisposed());
}
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);
}
}
}