Skip to content

Content of file ECPAbstractCustomControlSWT_PTest.java

/*******************************************************************************
 * Copyright (c) 2011-2013 EclipseSource Muenchen GmbH 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:
 * Jonas - initial API and implementation
 ******************************************************************************/
package org.eclipse.emf.ecp.view.custom.ui.swt.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
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.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;

import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContextFactory;
import org.eclipse.emf.ecp.view.spi.custom.model.VCustomControl;
import org.eclipse.emf.ecp.view.spi.custom.model.VCustomDomainModelReference;
import org.eclipse.emf.ecp.view.spi.custom.model.VCustomFactory;
import org.eclipse.emf.ecp.view.spi.custom.model.VCustomPackage;
import org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT;
import org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT.SWTCustomControlHelper;
import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
import org.eclipse.emf.ecp.view.test.common.swt.spi.DatabindingClassRunner;
import org.eclipse.emf.ecp.view.test.common.swt.spi.SWTViewTestHelper;
import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
import org.eclipse.emfforms.spi.swt.core.EMFFormsNoRendererException;
import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * @author Jonas
 *
 */
@RunWith(DatabindingClassRunner.class)
public class ECPAbstractCustomControlSWT_PTest {

	static final String LABELTEXT = "Some Text";
	private Set<VDomainModelReference> allFeatures;
	private Set<VFeaturePathDomainModelReference> referencedFeatures;
	private Set<VFeaturePathDomainModelReference> editableFeaturess;
	private ECPAbstractCustomControlSWTStub customControl;
	private Composite testComposite;
	private VCustomDomainModelReference domainObject;
	private VCustomControl controlModel;

	@Before
	public void init() {
		referencedFeatures = null;
		editableFeaturess = null;
		customControl = new ECPAbstractCustomControlSWTStub();
		domainObject = VCustomFactory.eINSTANCE.createCustomDomainModelReference();
		controlModel = VCustomFactory.eINSTANCE.createCustomControl();
		controlModel.setBundleName("org.eclipse.emf.ecp.view.custom.ui.swt.test");
		controlModel.setClassName("org.eclipse.emf.ecp.view.custom.ui.swt.test.ECPAbstractCustomControlSWTStub");
		final VCustomDomainModelReference domainModelReference = VCustomFactory.eINSTANCE
			.createCustomDomainModelReference();
		domainModelReference.setBundleName("org.eclipse.emf.ecp.view.custom.ui.swt.test");
		domainModelReference
			.setClassName("org.eclipse.emf.ecp.view.custom.ui.swt.test.ECPAbstractCustomControlSWTStub");

		// final VHardcodedDomainModelReference domainModelReference = VCustomFactory.eINSTANCE
		// .createHardcodedDomainModelReference();
		// domainModelReference.setControlId("org.eclipse.emf.ecp.view.custom.ui.swt.test.control.stub");
		domainModelReference.getDomainModelReferences().addAll(createFeatures());
		controlModel.setDomainModelReference(domainModelReference);
		// customControl.init(ViewTestHelper.createECPControlContext(domainObject,
		// SWTViewTestHelper.createShell()), null);
		customControl.init(
			controlModel, ViewModelContextFactory.INSTANCE.createViewModelContext(controlModel, domainObject));
		testComposite = new Composite(SWTViewTestHelper.createShell(), SWT.NONE);

		// for (final VDomainModelReference modelReference : allFeatures) {
		// modelReference.resolve(domainObject);
		// }
	}

	public Set<VDomainModelReference> createFeatures() {

		allFeatures = new LinkedHashSet<VDomainModelReference>();
		allFeatures.addAll(createEditableFeatures());
		allFeatures.addAll(createReferencedFeatures());

		return allFeatures;
	}

	/**
	 * @return a test set of {@link VFeaturePathDomainModelReference}
	 */
	public Set<VFeaturePathDomainModelReference> createReferencedFeatures() {
		if (referencedFeatures == null) {
			// referencedFeatures = new LinkedHashSet<VFeaturePathDomainModelReference>();
			// final EList<EStructuralFeature> eAllStructuralFeatures = VCustomPackage.eINSTANCE
			// .getCustomDomainModelReference()
			// .getEAllStructuralFeatures();
			// for (final EStructuralFeature eStructuralFeature : eAllStructuralFeatures) {
			// // new ECPCustomControlFeature(null, eStructuralFeature, false);
			// final VFeaturePathDomainModelReference domainModelReference = VViewFactory.eINSTANCE
			// .createFeaturePathDomainModelReference();
			// domainModelReference.setDomainModelEFeature(eStructuralFeature);
			// referencedFeatures.add(domainModelReference);
			// }
			final VFeaturePathDomainModelReference domainModelReference = VViewFactory.eINSTANCE
				.createFeaturePathDomainModelReference();
			domainModelReference.setDomainModelEFeature(VCustomPackage.eINSTANCE
				.getCustomDomainModelReference_BundleName());
			referencedFeatures = Collections.singleton(domainModelReference);
		}
		return referencedFeatures;
	}

	/**
	 * @return a test set of {@link VFeaturePathDomainModelReference}
	 */
	public Set<VFeaturePathDomainModelReference> createEditableFeatures() {
		if (editableFeaturess == null) {
			// editableFeaturess = new LinkedHashSet<VFeaturePathDomainModelReference>();
			// final EList<EStructuralFeature> eAllStructuralFeatures = VCustomPackage.eINSTANCE
			// .getCustomDomainModelReference()
			// .getEAllStructuralFeatures();
			// for (final EStructuralFeature eStructuralFeature : eAllStructuralFeatures) {
			// // new ECPCustomControlFeature(null, eStructuralFeature, true)
			// final VFeaturePathDomainModelReference domainModelReference = VViewFactory.eINSTANCE
			// .createFeaturePathDomainModelReference();
			// domainModelReference.setDomainModelEFeature(eStructuralFeature);
			// editableFeaturess.add(domainModelReference);
			//
			// }

			final VFeaturePathDomainModelReference domainModelReference = VViewFactory.eINSTANCE
				.createFeaturePathDomainModelReference();
			domainModelReference.setDomainModelEFeature(VCustomPackage.eINSTANCE
				.getCustomDomainModelReference_BundleName());
			editableFeaturess = Collections.singleton(domainModelReference);

		}
		return editableFeaturess;
	}

	/**
	 * Test method for
	 * {@link org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#renderControl(SWTGridCell,org.eclipse.swt.widgets.Composite)}
	 * .
	 *
	 * @throws NoPropertyDescriptorFoundExeption
	 * @throws NoRendererFoundException
	 */
	@Test
	public void testCreateControl() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
		// final Composite composite = customControl
		// .createControls(new Composite(SWTViewTestHelper.createShell(), SWT.NONE));

		final Composite composite = new Composite(SWTViewTestHelper.createShell(), SWT.NONE);
		customControl.renderControl(new SWTGridCell(0, 0, null), composite);

		assertTrue(customControl.isRendered());
		final Composite parentCompositeFromView = composite;
		final Control control = getLabelFromComposite(parentCompositeFromView);
		assertTrue("Control is not the one rendered by the custom control", control instanceof Label);
		final Label label = (Label) control;
		assertEquals(LABELTEXT, label.getText());
	}

	private Control getLabelFromComposite(final Composite parentCompositeFromView) {
		return parentCompositeFromView.getChildren()[0];
	}

	@Test
	public void testCreateValidationLabel() {
		customControl.createValidationLabelInStub(testComposite);
		final Control control = testComposite.getChildren()[0];
		assertTrue(control instanceof Label);
		assertNull(control.getLayoutData());

	}

	/**
	 * Test method for
	 * {@link org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#renderControl(SWTGridCell, org.eclipse.swt.widgets.Composite)}
	 * .
	 *
	 * @throws NoPropertyDescriptorFoundExeption
	 * @throws NoRendererFoundException
	 */
	@Test
	public void testCreateContentControl() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
		customControl.renderControl(new SWTGridCell(0, 0, null), testComposite);
		assertTrue(testComposite.getChildren()[0] instanceof Label);
	}

	/**
	 * Test method for {@link org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#applyValidation()} .
	 */
	@Test
	public void testHandleValidationWithoutLabel() {
		new Diagnostician().validate(domainObject);
		customControl.applyValidation();
		// Check Label, Check Image
		assertEquals(Diagnostic.ERROR, customControl.getLastValidationSeverity());
		assertSame(VCustomPackage.eINSTANCE.getCustomDomainModelReference_BundleName(),
			customControl.getLastValidationFeature());
		customControl.setValidationReseted(false);
		// customControl.resetValidation();
		// assertTrue(customControl.isValidationReseted());
	}

	/**
	 * Test method for {@link org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#applyValidation()} .
	 */
	@Test
	public void testHandleValidationWithLabel() {
		customControl.createValidationLabelInStub(testComposite);
		new Diagnostician().validate(domainObject);
		customControl.applyValidation();
		// Check Label, Check Image
		assertEquals(Diagnostic.ERROR, customControl.getLastValidationSeverity());

		assertSame(VCustomPackage.eINSTANCE.getCustomDomainModelReference_BundleName(),
			customControl.getLastValidationFeature());

		customControl.setValidationReseted(false);
		// customControl.resetValidation();
		// assertTrue(customControl.isValidationReseted());
	}

	@Test
	public void testHandleValidationWithLabelOriginalDiagniostic() {
		customControl.createValidationLabelInStub(testComposite);
		new Diagnostician().validate(domainObject);
		customControl.applyValidation();
		// Check Label, Check Image
		assertEquals(Diagnostic.ERROR, customControl.getLastValidationSeverity());
		// FIXME should a fitting sub diagnostic have been used?
		// assertSame(CustomPackage.eINSTANCE.getCustomControl_Bundle(), customControl.getLastValidationFeature());
		customControl.setValidationReseted(false);
		// customControl.resetValidation();
		// assertTrue(customControl.isValidationReseted());
	}

	@Ignore
	// Is this a correct behavior?
	@Test
	public void testHandleValidationNotErrorWarning() {
		// FIXME accept diagnostics without eObject?
		final Diagnostic validate = new BasicDiagnostic(Diagnostic.OK, null, 0, "All right!", null);
		customControl.applyValidation();
		// FIXME correct assumption?
		assertTrue(customControl.isValidationReseted());
	}

	// @Test
	// public void testHandleValidationWarningNoData() {
	// // FIXME accept diagnostics without eObject?
	// final Diagnostic validate = new BasicDiagnostic(Diagnostic.WARNING, null, 0, "Warning!", null);
	// customControl.applyValidation();
	// assertEquals(Diagnostic.WARNING, customControl.getLastValidationSeverity());
	// }

	@Test
	public void testHandleValidationErrorOnlyEObject() {
		final Diagnostic validate = new BasicDiagnostic(Diagnostic.ERROR, null, 0, "Error!",
			new Object[] { domainObject });
		customControl.applyValidation();
		assertEquals(Diagnostic.ERROR, customControl.getLastValidationSeverity());
	}

	@Test
	public void testHandleValidationErrorTwoEObject() {
		final Diagnostic validate = new BasicDiagnostic(Diagnostic.ERROR, null, 0, "Error!",
			new Object[] { domainObject, domainObject });
		customControl.applyValidation();
		assertEquals(Diagnostic.ERROR, customControl.getLastValidationSeverity());
	}

	/**
	 * Test method for
	 * {@link org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#applyValidation()}
	 * .
	 *
	 * @throws NoPropertyDescriptorFoundExeption
	 * @throws NoRendererFoundException
	 */
	@Test
	public void testHandleValidationOfControl() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
		customControl = new ECPAbstractCustomControlSWTStub(true);

		Diagnostic validate = new Diagnostician().validate(domainObject);
		// customControl.init(ViewTestHelper.createECPControlContext(domainObject,
		// SWTViewTestHelper.createShell()), null);
		customControl.init(
			controlModel, ViewModelContextFactory.INSTANCE.createViewModelContext(controlModel, domainObject));
		customControl.renderControl(new SWTGridCell(0, 0, null), testComposite);
		customControl.applyValidation();
		// Check Label, Check Image
		assertEquals(Diagnostic.ERROR, customControl.getLastValidationSeverity());

		assertSame(VCustomPackage.eINSTANCE.getCustomDomainModelReference_BundleName(),
			customControl.getLastValidationFeature());

		customControl.renderControl(new SWTGridCell(0, 0, null), testComposite);
		customControl.applyValidation();

		// assertNotNull(customControl.getValidationLabel().getImage());
		domainObject.setBundleName("not empty");
		customControl.setValidationReseted(false);
		// customControl.resetValidation();
		// assertTrue(customControl.isValidationReseted());
		validate = new Diagnostician().validate(domainObject);
		customControl.applyValidation();
		// assertNull(customControl.getValidationLabel().getImage());
	}

	/**
	 * Test method for
	 * {@link org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#handleContentValidation(int, org.eclipse.emf.ecore.EStructuralFeature)}
	 * .
	 */
	@Test
	public void testHandleContentValidation() {

		final EAttribute validationFeature = VCustomPackage.eINSTANCE.getCustomDomainModelReference_BundleName();

		final int severity = 4;
		customControl.handleContentValidation();
		assertEquals(severity, customControl.getLastValidationSeverity());
		assertSame(validationFeature, customControl.getLastValidationFeature());
	}

	/**
	 * Test method for {@link org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#resetValidation()}.
	 */
	@Test
	public void testResetValidation() {
		final Composite composite = new Composite(SWTViewTestHelper.createShell(), SWT.NONE);
		customControl.createValidationLabelInStub(composite);
		final Label validationLabel = (Label) composite.getChildren()[0];
		validationLabel.setImage(customControl.getStubSWTHelper().getImage(
			ECPAbstractCustomControlSWT.VALIDATION_ERROR_IMAGE));

		assertEquals(false, validationLabel.isVisible());
	}

	@Test
	public void testInit() {
		customControl.init(controlModel,
			ViewModelContextFactory.INSTANCE.createViewModelContext(controlModel, domainObject));
	}

	/**
	 * Test method for
	 * {@link org.eclipse.emf.ecp.view.spi.custom.ui.ECPAbstractCustomControl#getECPCustomControlFeatures()} .
	 */
	@Test
	public void testGetEditableFeatures() {
		final Set<VDomainModelReference> editableFeatures = customControl.getNeededDomainModelReferences();
		editableFeatures.removeAll(createFeatures());
		assertTrue(editableFeatures.isEmpty());
	}

	// /**
	// * Test method for {@link org.eclipse.emf.ecp.view.spi.custom.ui.ECPAbstractCustomControl#showLabel()}.
	// */
	// @Test
	// public void testShowLabel() {
	// assertFalse(customControl.showLabel());
	// }

	/**
	 * Test method for {@link org.eclipse.emf.ecp.view.spi.custom.ui.ECPAbstractCustomControl#dispose()}.
	 */
	@Test
	public void testDispose() {
		customControl.createValidationLabelInStub(testComposite);
		assertFalse(customControl.isDisposed());
		customControl.dispose();
		assertTrue(customControl.isDisposed());
	}

	// @Test
	// public void testDisposeOnShellDispose() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
	// final Composite composite = new Composite(SWTViewTestHelper.createShell(), SWT.NONE);
	// customControl.renderControl(new SWTGridCell(0, 0, new GridCellDescription()), composite);
	// assertFalse(customControl.isDisposed());
	// composite.dispose();
	// assertTrue(customControl.isDisposed());
	// }

	/**
	 * Test method for {@link org.eclipse.emf.ecp.view.spi.custom.ui.ECPAbstractCustomControl#disposeCustomControl()}.
	 */
	@Test
	public void testDisposeCustomControl() {
		customControl.disposeCustomControl();
	}

	/**
	 * Test method for {@link org.eclipse.emf.ecp.view.spi.custom.ui.ECPAbstractCustomControl#getHelper()}.
*/ @Test public void testGetHelper() { final SWTCustomControlHelper stubHelper = customControl.getStubSWTHelper(); assertNotNull(stubHelper); } @Test public void testGetAddImage() { final SWTCustomControlHelper stubHelper = customControl.getStubSWTHelper(); assertNotNull("Add image not loaded.", stubHelper.getImage(ECPAbstractCustomControlSWT.ADD_IMAGE)); } @Test public void testGetDeleteImage() { final SWTCustomControlHelper stubHelper = customControl.getStubSWTHelper(); assertNotNull("Delete image not loaded.", stubHelper.getImage(ECPAbstractCustomControlSWT.DELETE_IMAGE)); } @Test public void testGetHelpImage() { final SWTCustomControlHelper stubHelper = customControl.getStubSWTHelper(); assertNotNull("Help image not loaded.", stubHelper.getImage(ECPAbstractCustomControlSWT.HELP_IMAGE)); } @Test public void testGetValidationErrorImage() { final SWTCustomControlHelper stubHelper = customControl.getStubSWTHelper(); assertNotNull("ValidationError image not loaded.", stubHelper.getImage(ECPAbstractCustomControlSWT.VALIDATION_ERROR_IMAGE)); } @Test public void testGetDefaultImage() { final SWTCustomControlHelper stubHelper = customControl.getStubSWTHelper(); assertNull("Found undefined image.", stubHelper.getImage(-1)); } private VDomainModelReference getFeature(Collection<VDomainModelReference> features, EStructuralFeature structuralFeature, boolean isEditable) throws DatabindingFailedException { final Iterator<VDomainModelReference> iterator = features.iterator(); while (iterator.hasNext()) { final VDomainModelReference feature = iterator.next(); final IValueProperty valueProperty = Activator.getDefault().getEMFFormsDatabinding() .getValueProperty(feature, domainObject); final EStructuralFeature currentStructuralFeature = (EStructuralFeature) valueProperty.getValueType(); if (currentStructuralFeature == structuralFeature) { // && feature.isEditable() == isEditable return feature; } } throw new NoSuchElementException(); } @Test public void testCustomControlGetHelp() throws DatabindingFailedException { final VDomainModelReference feature = getFeature(customControl.getResolvedReferences(), VCustomPackage.eINSTANCE.getCustomDomainModelReference_BundleName(), true); final String help = customControl.getStubSWTHelper().getHelp(feature); final ComposedAdapterFactory caf = new ComposedAdapterFactory( ComposedAdapterFactory.Descriptor.Registry.INSTANCE); final AdapterFactoryItemDelegator afid = new AdapterFactoryItemDelegator(caf); final Setting setting = Activator.getDefault().getEMFFormsDatabinding().getSetting(feature, domainObject); final IItemPropertyDescriptor propertyDescriptor = afid.getPropertyDescriptor(setting.getEObject(), setting.getEStructuralFeature()); final String description = propertyDescriptor.getDescription(null); assertEquals(description, help); } @Test(expected = IllegalArgumentException.class) public void testCustomControlGetHelpWrongFeature() { final VFeaturePathDomainModelReference domainModelReference = VViewFactory.eINSTANCE .createFeaturePathDomainModelReference(); domainModelReference.setDomainModelEFeature(EcorePackage.eINSTANCE.getENamedElement_Name()); // final ECPCustomControlFeature feature = new ECPCustomControlFeature(null, // EcorePackage.eINSTANCE.getENamedElement_Name(), false); customControl.getStubSWTHelper().getHelp(domainModelReference); fail("No Exception thrown"); } @Test public void testCustomControlGetLabel() throws DatabindingFailedException { final VDomainModelReference feature = getFeature(customControl.getResolvedReferences(), VCustomPackage.eINSTANCE.getCustomDomainModelReference_BundleName(), true); final String label = customControl.getStubSWTHelper().getLabel(feature); final ComposedAdapterFactory caf = new ComposedAdapterFactory( ComposedAdapterFactory.Descriptor.Registry.INSTANCE); final AdapterFactoryItemDelegator afid = new AdapterFactoryItemDelegator(caf); final Setting setting = Activator.getDefault().getEMFFormsDatabinding().getSetting(feature, domainObject); final IItemPropertyDescriptor propertyDescriptor = afid.getPropertyDescriptor(setting.getEObject(), setting.getEStructuralFeature()); final String displayName = propertyDescriptor.getDisplayName(null); assertEquals(displayName, label); } @Test(expected = IllegalArgumentException.class) public void testCustomControlGetLabelWrongFeature() { // final ECPCustomControlFeature feature = new ECPCustomControlFeature(null, // EcorePackage.eINSTANCE.getENamedElement_Name(), false); final VFeaturePathDomainModelReference domainModelReference = VViewFactory.eINSTANCE .createFeaturePathDomainModelReference(); domainModelReference.setDomainModelEFeature(EcorePackage.eINSTANCE.getENamedElement_Name()); customControl.getStubSWTHelper().getLabel(domainModelReference); fail("No Exception thrown"); } // /** // * Test set value on {@link ECPCustomControlFeature}. // */ // @Test // public void testCustomControlFeatureSet() { // final VDomainModelReference bundleFeature = getFeature(customControl.getResolvedReferences(), // VCustomPackage.eINSTANCE.getCustomControl_BundleName(), true); // customControl.setValue(bundleFeature, "test"); // assertEquals(domainObject.eGet(VCustomPackage.eINSTANCE.getCustomControl_BundleName()), "test"); // // } // // /** // * Test set value on {@link ECPCustomControlFeature} that is not editable. // */ // @Test(expected = UnsupportedOperationException.class) // // function not supported anymore // @Ignore // public void testCustomControlFeatureSetNotEditable() { // // final VDomainModelReference bundleFeature = getFeature(customControl.getNeededDomainModelReferences(), // VViewPackage.eINSTANCE.getControl_LabelAlignment(), false); // customControl.setValue(bundleFeature, "test"); // // } // // /** // * Test get value on {@link ECPCustomControlFeature}. // */ // @Test // public void testCustomControlFeatureGet() { // // final VDomainModelReference bundleFeature = getFeature(customControl.getResolvedReferences(), // VCustomPackage.eINSTANCE.getCustomControl_BundleName(), true); // assertEquals(domainObject.eGet(VCustomPackage.eINSTANCE.getCustomControl_BundleName()), // customControl.getValue(bundleFeature)); // // } // // /** // * Test set listener on {@link ECPCustomControlFeature}. // */ // @Test // public void testCustomControlFeatureListener() { // // final VDomainModelReference bundleFeature = getFeature(customControl.getResolvedReferences(), // VCustomPackage.eINSTANCE.getCustomControl_BundleName(), true); // // final List<Integer> result = new ArrayList<Integer>(); // customControl.registerChangeListener(bundleFeature, new ECPCustomControlChangeListener() { // public void notifyChanged() { // result.add(1); // } // }); // // customControl.setValue(bundleFeature, "test"); // assertEquals("Listener should have been called once", 1, result.size()); // } // // @Test // public void testBindTargetToModel() { // // final VDomainModelReference bundleFeature = getFeature(customControl.getResolvedReferences(), // VCustomPackage.eINSTANCE.getCustomControl_BundleName(), true); // // customControl.createControls(testComposite); // final Label label = (Label) testComposite.getChildren()[0]; // final IObservableValue obsValue = SWTObservables.observeText(label); // customControl.bindTargetToModel(bundleFeature, obsValue, null, null); // // bundleFeature.bindTargetToModel(obsValue, null, null); // // bundleFeature.setValue("testtesttest"); // customControl.setValue(bundleFeature, "testtesttest"); // assertEquals("testtesttest", label.getText()); // } @Test public void testReadonlyCustomControl() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, EMFFormsNoRendererException { controlModel.setReadonly(true); controlModel.setBundleName("org.eclipse.emf.ecp.view.custom.ui.swt.test"); controlModel.setClassName("org.eclipse.emf.ecp.view.custom.ui.swt.test.CustomControlStub"); // domainObject.setBundle("org.eclipse.emf.ecp.view.custom.ui.swt.test"); // domainObject // .setClassName("org.eclipse.emf.ecp.view.custom.ui.swt.test.CustomControlStub"); final VCustomDomainModelReference domainModelReference = VCustomFactory.eINSTANCE .createCustomDomainModelReference(); domainModelReference.setBundleName("org.eclipse.emf.ecp.view.custom.ui.swt.test"); domainModelReference.setClassName("org.eclipse.emf.ecp.view.custom.ui.swt.test.CustomControlStub"); // domainModelReference.setControlId("org.eclipse.emf.ecp.view.custom.ui.swt.test.CustomControlStub"); controlModel.setDomainModelReference(domainModelReference); final Control control = SWTViewTestHelper.render(controlModel, SWTViewTestHelper.createShell()); assertFalse(control.getEnabled()); } private Map<SWTGridCell, Control> createControlMap(Control... controls) { final Map<SWTGridCell, Control> result = new LinkedHashMap<SWTGridCell, Control>(); for (int i = 0; i < controls.length; i++) { result.put(new SWTGridCell(0, i, null), controls[i]); } return result; } @Test public void testSetEditable() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption { customControl.renderControl(new SWTGridCell(0, 1, null), testComposite); assertTrue(customControl.getButton().isEnabled()); controlModel.setEnabled(false); customControl.applyEnable(createControlMap(customControl.getButton())); assertFalse(customControl.getButton().isEnabled()); controlModel.setEnabled(true); customControl.applyEnable(createControlMap(customControl.getButton())); assertTrue(customControl.getButton().isEnabled()); } }