@Test public void testCreateLabel() throws NoLabelFoundException { /* setup */ final VControl control1 = mock(VControl.class); final VFeaturePathDomainModelReference dmr1 = mock(VFeaturePathDomainModelReference.class); when(control1.getDomainModelReference()).thenReturn(dmr1); final VControl control2 = mock(VControl.class); final VFeaturePathDomainModelReference dmr2 = mock(VFeaturePathDomainModelReference.class); when(control2.getDomainModelReference()).thenReturn(dmr2); when(compoundControl.getControls()).thenReturn(ECollections.asEList(control1, control2)); final EObject domainModel = mock(EObject.class); when(viewModelContext.getDomainModel()).thenReturn(domainModel); when(emfFormsLabelProvider.getDisplayName(dmr1, domainModel)) .thenReturn(Observables.constantObservableValue(LABEL1, String.class)); when(emfFormsLabelProvider.getDisplayName(dmr2, domainModel)) .thenReturn(Observables.constantObservableValue(LABEL2, String.class)); final CompoundControlSWTRenderer renderer = createRenderer(); /* act */ final Control label = renderer.createLabel(shell); /* assert */ assertTrue(Composite.class.isInstance(label)); final Composite labelComposite = Composite.class.cast(label); assertEquals(3, labelComposite.getChildren().length); for (final Control control : labelComposite.getChildren()) { assertTrue(Label.class.isInstance(control)); } assertEquals(LABEL1, Label.class.cast(labelComposite.getChildren()[0]).getText()); assertEquals("/", Label.class.cast(labelComposite.getChildren()[1]).getText()); // $NON-NLS-1$ assertEquals(LABEL2, Label.class.cast(labelComposite.getChildren()[2]).getText()); }
@Test public void testCreateControls() throws EMFFormsNoRendererException { /* setup */ final VControl control1 = mock(VControl.class); final VFeaturePathDomainModelReference dmr1 = mock(VFeaturePathDomainModelReference.class); when(control1.getDomainModelReference()).thenReturn(dmr1); final VControl control2 = mock(VControl.class); final VFeaturePathDomainModelReference dmr2 = mock(VFeaturePathDomainModelReference.class); when(control2.getDomainModelReference()).thenReturn(dmr2); when(compoundControl.getControls()).thenReturn(ECollections.asEList(control1, control2)); final EObject domainModel = mock(EObject.class); when(viewModelContext.getDomainModel()).thenReturn(domainModel); final DummyRenderer dummyRenderer1 = createDummyRenderer(control1); final DummyRenderer dummyRenderer2 = createDummyRenderer(control2); when(emfFormsRendererFactory.getRendererInstance(control1, viewModelContext)) .thenReturn(dummyRenderer1); when(emfFormsRendererFactory.getRendererInstance(control2, viewModelContext)) .thenReturn(dummyRenderer2); final CompoundControlSWTRenderer renderer = spy(createRenderer()); doReturn(GridLayoutFactory.fillDefaults().create()) .when(renderer) .getColumnLayout(any(Integer.class), any(Boolean.class)); doReturn(GridDataFactory.fillDefaults().create()) .when(renderer) .getLayoutData( any(SWTGridCell.class), any(SWTGridDescription.class), any(SWTGridDescription.class), any(SWTGridDescription.class), any(VElement.class), any(EObject.class), any(Control.class)); doReturn(GridDataFactory.fillDefaults().create()) .when(renderer) .getSpanningLayoutData( any(VContainedElement.class), any(Integer.class), any(Integer.class)); /* act */ final Control controls = renderer.createControls(shell); /* assert */ assertTrue(Composite.class.isInstance(controls)); final Composite controlsComposite = Composite.class.cast(controls); assertEquals(2, controlsComposite.getChildren().length); for (final Control control : controlsComposite.getChildren()) { assertTrue(Composite.class.isInstance(control)); } final Composite control1Composite = Composite.class.cast(controlsComposite.getChildren()[0]); assertEquals(2, control1Composite.getChildren().length); for (final Control control : control1Composite.getChildren()) { assertTrue(Label.class.isInstance(control)); } assertEquals(C_VALIDATION, Label.class.cast(control1Composite.getChildren()[0]).getText()); assertEquals(C_CONTROL, Label.class.cast(control1Composite.getChildren()[1]).getText()); final Composite control2Composite = Composite.class.cast(controlsComposite.getChildren()[1]); assertEquals(2, control2Composite.getChildren().length); for (final Control control : control2Composite.getChildren()) { assertTrue(Label.class.isInstance(control)); } assertEquals(C_VALIDATION, Label.class.cast(control2Composite.getChildren()[0]).getText()); assertEquals(C_CONTROL, Label.class.cast(control2Composite.getChildren()[1]).getText()); verify(control1, times(1)).setLabelAlignment(LabelAlignment.NONE); verify(control2, times(1)).setLabelAlignment(LabelAlignment.NONE); }
/** * Copies the values from one {@link VControl} to another. * * @param from the {@link VControl} holding the values * @param fromDomainModel The domain model belonging to the 'from control'. * @param to the {@link VControl} which values should be updated * @param toDomainModel The domain model belonging to the 'to control'. * @since 1.6 */ @SuppressWarnings("unchecked") public static void copyValues( VControl from, EObject fromDomainModel, VControl to, EObject toDomainModel) { final IObservableValue fromObservableValue; final IObservableValue toObservableValue; try { fromObservableValue = Activator.getDefault() .getEMFFormsDatabinding() .getObservableValue(from.getDomainModelReference(), fromDomainModel); toObservableValue = Activator.getDefault() .getEMFFormsDatabinding() .getObservableValue(to.getDomainModelReference(), toDomainModel); } catch (final DatabindingFailedException ex) { Activator.getDefault().getReportService().report(new DatabindingFailedReport(ex)); return; } final EObject fromEObject = (EObject) ((IObserving) fromObservableValue).getObserved(); final EStructuralFeature fromStructuralFeature = (EStructuralFeature) fromObservableValue.getValueType(); final EObject toEObject = (EObject) ((IObserving) toObservableValue).getObserved(); final EStructuralFeature toStructuralFeature = (EStructuralFeature) toObservableValue.getValueType(); fromObservableValue.dispose(); toObservableValue.dispose(); if (!toStructuralFeature.isChangeable()) { return; } final EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(toEObject); if (toStructuralFeature.isMany()) { editingDomain .getCommandStack() .execute( RemoveCommand.create( editingDomain, toEObject, toStructuralFeature, (Collection<?>) toEObject.eGet(toStructuralFeature, true))); } if (EAttribute.class.isInstance(toStructuralFeature)) { if (toStructuralFeature.isMany()) { editingDomain .getCommandStack() .execute( AddCommand.create( editingDomain, toEObject, toStructuralFeature, (Collection<?>) fromEObject.eGet(fromStructuralFeature, true))); } else { editingDomain .getCommandStack() .execute( SetCommand.create( editingDomain, toEObject, toStructuralFeature, fromEObject.eGet(fromStructuralFeature, true))); } } if (EReference.class.isInstance(toStructuralFeature)) { if (toStructuralFeature.isMany()) { for (final EObject eObject : (Collection<EObject>) fromEObject.eGet(fromStructuralFeature, true)) { editingDomain .getCommandStack() .execute( AddCommand.create( editingDomain, toEObject, toStructuralFeature, EcoreUtil.copy(eObject))); } return; } editingDomain .getCommandStack() .execute( SetCommand.create( editingDomain, toEObject, toStructuralFeature, EcoreUtil.copy((EObject) fromEObject.eGet(fromStructuralFeature, true)))); } }