Skip to content

Package: DateTimeControlRenderer_PTest$2

DateTimeControlRenderer_PTest$2

nameinstructionbranchcomplexitylinemethod
answer(InvocationOnMock)
M: 0 C: 11
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
{...}
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2015 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Eugen Neufeld - initial API and implementation
13: * Lucas Koehler - databinding tests
14: ******************************************************************************/
15: package org.eclipse.emf.ecp.view.internal.core.swt.renderer;
16:
17: import static org.junit.Assert.assertEquals;
18: import static org.junit.Assert.assertFalse;
19: import static org.junit.Assert.assertTrue;
20: import static org.mockito.Matchers.any;
21: import static org.mockito.Mockito.mock;
22: import static org.mockito.Mockito.when;
23:
24: import java.util.Calendar;
25: import java.util.Date;
26: import java.util.LinkedHashSet;
27: import java.util.Set;
28:
29: import org.eclipse.core.databinding.observable.Diffs;
30: import org.eclipse.core.databinding.observable.value.IObservableValue;
31: import org.eclipse.core.databinding.observable.value.IValueChangeListener;
32: import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
33: import org.eclipse.emf.common.util.BasicEList;
34: import org.eclipse.emf.common.util.EList;
35: import org.eclipse.emf.ecore.EObject;
36: import org.eclipse.emf.ecore.EStructuralFeature;
37: import org.eclipse.emf.ecp.test.common.DefaultRealm;
38: import org.eclipse.emf.ecp.ui.view.ECPRendererException;
39: import org.eclipse.emf.ecp.view.core.swt.test.model.SimpleTestObject;
40: import org.eclipse.emf.ecp.view.core.swt.test.model.TestFactory;
41: import org.eclipse.emf.ecp.view.core.swt.test.model.TestPackage;
42: import org.eclipse.emf.ecp.view.internal.core.swt.MessageKeys;
43: import org.eclipse.emf.ecp.view.spi.model.DateTimeDisplayType;
44: import org.eclipse.emf.ecp.view.spi.model.LabelAlignment;
45: import org.eclipse.emf.ecp.view.spi.model.VAttachment;
46: import org.eclipse.emf.ecp.view.spi.model.VControl;
47: import org.eclipse.emf.ecp.view.spi.model.VDateTimeDisplayAttachment;
48: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
49: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
50: import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
51: import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
52: import org.eclipse.emf.ecp.view.spi.util.swt.ImageRegistryService;
53: import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
54: import org.eclipse.emf.ecp.view.test.common.swt.spi.SWTTestUtil;
55: import org.eclipse.emfforms.spi.common.report.ReportService;
56: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
57: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
58: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
59: import org.eclipse.emfforms.spi.core.services.label.NoLabelFoundException;
60: import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
61: import org.eclipse.emfforms.spi.swt.core.SWTDataElementIdHelper;
62: import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
63: import org.eclipse.emfforms.swt.common.test.AbstractControl_PTest;
64: import org.eclipse.swt.SWT;
65: import org.eclipse.swt.custom.StackLayout;
66: import org.eclipse.swt.layout.GridData;
67: import org.eclipse.swt.widgets.Button;
68: import org.eclipse.swt.widgets.Composite;
69: import org.eclipse.swt.widgets.Control;
70: import org.eclipse.swt.widgets.DateTime;
71: import org.eclipse.swt.widgets.Event;
72: import org.eclipse.swt.widgets.Label;
73: import org.junit.After;
74: import org.junit.Before;
75: import org.junit.Test;
76: import org.mockito.Mockito;
77: import org.mockito.invocation.InvocationOnMock;
78: import org.mockito.stubbing.Answer;
79:
80: public class DateTimeControlRenderer_PTest extends AbstractControl_PTest<VControl> {
81:
82:         private DefaultRealm realm;
83:         private static final String NOTIME = "No time set! Click to set time."; //$NON-NLS-1$
84:         private static final String NODATE = "No date set! Click to set date."; //$NON-NLS-1$
85:         private static final String CLEANDATE = "Clean Date"; //$NON-NLS-1$
86:         private static final String SELECTDATE = "Select Date"; //$NON-NLS-1$
87:         private static final String CLEANTIME = "Clean Time"; //$NON-NLS-1$
88:         private static final String SELECTTIME = "Select Time"; //$NON-NLS-1$
89:
90:         @Before
91:         public void before() throws DatabindingFailedException {
92:                 realm = new DefaultRealm();
93:                 final ReportService reportService = mock(ReportService.class);
94:                 setDatabindingService(mock(EMFFormsDatabinding.class));
95:                 setLabelProvider(mock(EMFFormsLabelProvider.class));
96:                 setTemplateProvider(mock(VTViewTemplateProvider.class));
97:                 final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class);
98:                 final ImageRegistryService imageRegistryService = mock(ImageRegistryService.class);
99:                 when(
100:                         localizationService.getString(DateTimeControlSWTRenderer.class,
101:                                 MessageKeys.DateTimeControl_NoDateSetClickToSetDate))
102:                                         .thenReturn(NODATE);
103:                 when(
104:                         localizationService.getString(DateTimeControlSWTRenderer.class,
105:                                 MessageKeys.DateTimeControlSWTRenderer_CleanDate))
106:                                         .thenReturn(CLEANDATE);
107:                 when(
108:                         localizationService.getString(DateTimeControlSWTRenderer.class,
109:                                 MessageKeys.DateTimeControlSWTRenderer_SelectData))
110:                                         .thenReturn(SELECTDATE);
111:                 when(
112:                         localizationService.getString(DateTimeControlSWTRenderer.class,
113:                                 MessageKeys.DateTimeControl_NoTimeSetClickToSetTime))
114:                                         .thenReturn(NOTIME);
115:                 when(
116:                         localizationService.getString(DateTimeControlSWTRenderer.class,
117:                                 MessageKeys.DateTimeControlSWTRenderer_CleanTime))
118:                                         .thenReturn(CLEANTIME);
119:                 when(
120:                         localizationService.getString(DateTimeControlSWTRenderer.class,
121:                                 MessageKeys.DateTimeControlSWTRenderer_SelectTime))
122:                                         .thenReturn(SELECTTIME);
123:
124:                 setup();
125:                 setRenderer(new DateTimeControlSWTRenderer(getvControl(), getContext(), reportService, getDatabindingService(),
126:                         getLabelProvider(),
127:                         getTemplateProvider(), localizationService, imageRegistryService));
128:                 getRenderer().init();
129:         }
130:
131:         @After
132:         public void testTearDown() {
133:                 realm.dispose();
134:                 dispose();
135:         }
136:
137:         @Test
138:         public void renderControlLabelAlignmentNone()
139:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
140:                 setMockLabelAlignment(LabelAlignment.NONE);
141:                 final TestObservableValue mockedObservableValue = mock(TestObservableValue.class);
142:                 when(mockedObservableValue.getRealm()).thenReturn(realm);
143:                 final EObject mockedEObject = mock(EObject.class);
144:                 when(mockedEObject.eIsSet(any(EStructuralFeature.class))).thenReturn(true);
145:                 when(mockedObservableValue.getObserved()).thenReturn(mockedEObject);
146:
147:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
148:                         .thenReturn(
149:                                 mockedObservableValue);
150:                 final Control render = renderControl(new SWTGridCell(0, 1, getRenderer()));
151:                 assertControl(render, true, true);
152:         }
153:
154:         @Test
155:         public void renderControlLabelAlignmentLeft()
156:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
157:                 setMockLabelAlignment(LabelAlignment.LEFT);
158:                 final TestObservableValue mockedObservableValue = mock(TestObservableValue.class);
159:                 when(mockedObservableValue.getRealm()).thenReturn(realm);
160:                 final EObject mockedEObject = mock(EObject.class);
161:                 when(mockedEObject.eIsSet(any(EStructuralFeature.class))).thenReturn(true);
162:                 when(mockedObservableValue.getObserved()).thenReturn(mockedEObject);
163:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
164:                         .thenReturn(
165:                                 mockedObservableValue);
166:                 final Control render = renderControl(new SWTGridCell(0, 2, getRenderer()));
167:                 assertControl(render, true, true);
168:         }
169:
170:         private void assertControl(Control render, boolean dateWidgetVisible, boolean timeWidgetVisible) {
171:                 // making the shell visible, so that the visibility of controls can be checked
172:                 getShell().setVisible(true);
173:                 assertTrue(Composite.class.isInstance(render));
174:                 final Composite top = Composite.class.cast(render);
175:                 assertEquals(2, top.getChildren().length);
176:                 assertTrue(Composite.class.isInstance(top.getChildren()[0]));
177:                 assertTrue(Button.class.isInstance(top.getChildren()[1]));
178:                 final Composite stack = Composite.class.cast(top.getChildren()[0]);
179:                 assertTrue(StackLayout.class.isInstance(stack.getLayout()));
180:                 assertEquals(2, stack.getChildren().length);
181:                 assertTrue(Composite.class.isInstance(stack.getChildren()[0]));
182:                 assertTrue(Label.class.isInstance(stack.getChildren()[1]));
183:                 final Composite dateTime = Composite.class.cast(stack.getChildren()[0]);
184:                 assertEquals(3, dateTime.getChildren().length);
185:                 assertTrue(DateTime.class.isInstance(dateTime.getChildren()[0]));
186:                 assertEquals(dateWidgetVisible, dateTime.getChildren()[0].isVisible());
187:                 assertTrue(DateTime.class.isInstance(dateTime.getChildren()[1]));
188:                 assertEquals(timeWidgetVisible, dateTime.getChildren()[1].isVisible());
189:                 assertTrue(Button.class.isInstance(dateTime.getChildren()[2]));
190:
191:                 assertEquals(UUID + "#unset", //$NON-NLS-1$
192:                         SWTTestUtil.findControl(render, 0, Button.class).getData(SWTDataElementIdHelper.ELEMENT_ID_KEY));
193:                 assertEquals(UUID + "#set", //$NON-NLS-1$
194:                         SWTTestUtil.findControl(render, 1, Button.class).getData(SWTDataElementIdHelper.ELEMENT_ID_KEY));
195:                 assertEquals(UUID + "#date", //$NON-NLS-1$
196:                         SWTTestUtil.findControl(render, 0, DateTime.class).getData(SWTDataElementIdHelper.ELEMENT_ID_KEY));
197:                 assertEquals(UUID + "#time", //$NON-NLS-1$
198:                         SWTTestUtil.findControl(render, 1, DateTime.class).getData(SWTDataElementIdHelper.ELEMENT_ID_KEY));
199:         }
200:
201:         private Label getUnsetLabel(Control render) {
202:                 final Composite composite = Composite.class.cast(render);
203:                 return Label.class.cast(((Composite) composite.getChildren()[0]).getChildren()[1]);
204:         }
205:
206:         private Button getUnsetButton(Control render) {
207:                 final Composite composite = Composite.class.cast(render);
208:                 final Composite dateTimeComposite = (Composite) ((Composite) composite.getChildren()[0]).getChildren()[0];
209:                 return Button.class.cast(dateTimeComposite.getChildren()[2]);
210:         }
211:
212:         private Button getSetButton(Control render) {
213:                 final Composite composite = Composite.class.cast(render);
214:                 return Button.class.cast(composite.getChildren()[1]);
215:         }
216:
217:         @Override
218:         protected void mockControl() throws DatabindingFailedException {
219:                 final SimpleTestObject eObject = TestFactory.eINSTANCE.createSimpleTestObject();
220:                 super.mockControl(eObject, TestPackage.eINSTANCE.getSimpleTestObject_Date());
221:         }
222:
223:         @Test
224:         public void testDatabindingServiceUsageInitialBinding() throws NoRendererFoundException,
225:                 NoPropertyDescriptorFoundExeption, DatabindingFailedException {
226:                 final Date initialValue = new Date();
227:                 final EStructuralFeature mockedEStructuralFeature = mock(EStructuralFeature.class);
228:                 final EObject mockedEObject = mock(EObject.class);
229:                 when(mockedEObject.eIsSet(mockedEStructuralFeature)).thenReturn(true);
230:
231:                 final TestObservableValue mockedObservable = mock(TestObservableValue.class);
232:                 when(mockedObservable.getRealm()).thenReturn(realm);
233:                 when(mockedObservable.getValueType()).thenReturn(mockedEStructuralFeature);
234:                 when(mockedObservable.getObserved()).thenReturn(mockedEObject);
235:                 when(mockedObservable.getValue()).thenReturn(initialValue);
236:
237:                 final DateTime[] widgets = setUpDatabindingTest(mockedObservable);
238:                 final DateTime dateWidget = widgets[0];
239:                 final DateTime timeWidget = widgets[1];
240:
241:                 assertTrue(isDateEqualToDateTimes(initialValue, dateWidget, timeWidget));
242:
243:         }
244:
245:         @Test
246:         @SuppressWarnings({ "rawtypes", "unchecked" })
247:         public void testDatabindingServiceUsageChangeObservable() throws NoRendererFoundException,
248:                 NoPropertyDescriptorFoundExeption, DatabindingFailedException {
249:                 final Date initialValue = new Date();
250:                 final Date changedValue = new Date(System.currentTimeMillis() * 2);
251:                 final Set<IValueChangeListener> listeners = new LinkedHashSet<>();
252:                 final EStructuralFeature mockedEStructuralFeature = mock(EStructuralFeature.class);
253:                 final EObject mockedEObject = mock(EObject.class);
254:                 when(mockedEObject.eIsSet(mockedEStructuralFeature)).thenReturn(true);
255:
256:                 final TestObservableValue mockedObservable = mock(TestObservableValue.class);
257:                 when(mockedObservable.getRealm()).thenReturn(realm);
258:                 when(mockedObservable.getValueType()).thenReturn(mockedEStructuralFeature);
259:                 when(mockedObservable.getObserved()).thenReturn(mockedEObject);
260:                 when(mockedObservable.getValue()).thenReturn(initialValue);
261:                 Mockito.doAnswer(new Answer<Void>() {
262:
263:                         @Override
264:                         public Void answer(InvocationOnMock invocation) throws Throwable {
265:                                 listeners.add((IValueChangeListener) invocation.getArguments()[0]);
266:                                 return null;
267:                         }
268:                 }).when(mockedObservable).addValueChangeListener(any(IValueChangeListener.class));
269:
270:                 final DateTime[] widgets = setUpDatabindingTest(mockedObservable);
271:                 final DateTime dateWidget = widgets[0];
272:                 final DateTime timeWidget = widgets[1];
273:
274:                 when(mockedObservable.getValue()).thenReturn(changedValue);
275:                 for (final IValueChangeListener valueChangeListener : listeners) {
276:                         valueChangeListener.handleValueChange(new ValueChangeEvent(mockedObservable, Diffs.createValueDiff(
277:                                 initialValue, changedValue)));
278:                 }
279:
280:                 assertTrue(isDateEqualToDateTimes(changedValue, dateWidget, timeWidget));
281:
282:         }
283:
284:         @Test
285:         @SuppressWarnings("unchecked")
286:         public void testDatabindingServiceUsageChangeControl() throws NoRendererFoundException,
287:                 NoPropertyDescriptorFoundExeption, DatabindingFailedException {
288:                 final Date initialValue = new Date();
289:                 final Date changedValue = new Date(System.currentTimeMillis() * 2);
290:                 final Date[] setValue = new Date[1];
291:                 final EStructuralFeature mockedEStructuralFeature = mock(EStructuralFeature.class);
292:                 final EObject mockedEObject = mock(EObject.class);
293:                 when(mockedEObject.eIsSet(mockedEStructuralFeature)).thenReturn(true);
294:
295:                 final TestObservableValue mockedObservable = mock(TestObservableValue.class);
296:                 when(mockedObservable.getRealm()).thenReturn(realm);
297:                 when(mockedObservable.getValueType()).thenReturn(mockedEStructuralFeature);
298:                 when(mockedObservable.getObserved()).thenReturn(mockedEObject);
299:                 when(mockedObservable.getValue()).thenReturn(initialValue);
300:                 Mockito.doAnswer(new Answer<Void>() {
301:
302:                         @Override
303:                         public Void answer(InvocationOnMock invocation) throws Throwable {
304:                                 setValue[0] = (Date) invocation.getArguments()[0];
305:                                 return null;
306:                         }
307:                 }).when(mockedObservable).setValue(any(Object.class));
308:                 final DateTime[] widgets = setUpDatabindingTest(mockedObservable);
309:                 final DateTime dateWidget = widgets[0];
310:                 final DateTime timeWidget = widgets[1];
311:
312:                 final Calendar cal = Calendar.getInstance();
313:                 cal.setTime(changedValue);
314:                 dateWidget.setDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
315:                 // dateWidget.notifyListeners(SWT.Selection, new Event());
316:                 timeWidget.setTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
317:                 timeWidget.notifyListeners(SWT.Selection, new Event());
318:
319:                 // mockedObservable.getValue() cannot be compared directly to changedValue because the widgets can't save
320:                 // milliseconds. From this it follows that mockedObservable.getValue() and changedValue might not be equal
321:                 // even though the binding is working.
322:
323:                 final Calendar calChangedValue = Calendar.getInstance();
324:                 calChangedValue.setTime(changedValue);
325:                 calChangedValue.set(Calendar.MILLISECOND, 0);
326:
327:                 final Calendar calSetValue = Calendar.getInstance();
328:                 calSetValue.setTime(setValue[0]);
329:                 calSetValue.set(Calendar.MILLISECOND, 0);
330:
331:                 assertTrue(calChangedValue.equals(calSetValue));
332:         }
333:
334:         /**
335:          * Universal set up stuff for the data binding test cases.
336:          *
337:          * @param mockedObservable
338:          * @return A DateTime array. DateTime[0] contains the date widget and DateTime[1] the time widget.
339:          * @throws NoRendererFoundException
340:          * @throws NoPropertyDescriptorFoundExeption
341:          * @throws DatabindingFailedException
342:          */
343:         @SuppressWarnings({ "rawtypes" })
344:         private DateTime[] setUpDatabindingTest(final IObservableValue mockedObservable) throws NoRendererFoundException,
345:                 NoPropertyDescriptorFoundExeption, DatabindingFailedException {
346:                 mockDatabindingIsSettableAndChangeable();
347:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
348:                         .thenReturn(
349:                                 mockedObservable);
350:
351:                 final Control renderControl = renderControl(new SWTGridCell(0, 2, getRenderer()));
352:
353:                 final Composite composite = (Composite) renderControl;
354:                 final Composite stackComposite = (Composite) composite.getChildren()[0];
355:                 final Composite dateTimeComposite = (Composite) stackComposite.getChildren()[0];
356:                 final DateTime dateWidget = (DateTime) dateTimeComposite.getChildren()[0];
357:                 final DateTime timeWidget = (DateTime) dateTimeComposite.getChildren()[1];
358:                 final DateTime[] widgets = new DateTime[] { dateWidget, timeWidget };
359:
360:                 return widgets;
361:         }
362:
363:         private boolean isDateEqualToDateTimes(Date date, DateTime dateWidget, DateTime timeWidget) {
364:                 final Calendar cal = Calendar.getInstance();
365:                 cal.setTime(date);
366:                 final int dateYear = cal.get(Calendar.YEAR);
367:                 final int dateMonth = cal.get(Calendar.MONTH);
368:                 final int dateDay = cal.get(Calendar.DAY_OF_MONTH);
369:                 final int dateHour = cal.get(Calendar.HOUR_OF_DAY);
370:                 final int dateMinute = cal.get(Calendar.MINUTE);
371:                 final int dateSeconds = cal.get(Calendar.SECOND);
372:
373:                 final int widgetYear = dateWidget.getYear();
374:                 final int widgetMonth = dateWidget.getMonth();
375:                 final int widgetDay = dateWidget.getDay();
376:                 final int widgetHour = timeWidget.getHours();
377:                 final int widgetMinute = timeWidget.getMinutes();
378:                 final int widgetSeconds = timeWidget.getSeconds();
379:
380:                 if (dateYear == widgetYear && dateMonth == widgetMonth && dateDay == widgetDay
381:                         && dateHour == widgetHour && dateMinute == widgetMinute && dateSeconds == widgetSeconds) {
382:                         return true;
383:                 }
384:                 return false;
385:         }
386:
387:         /**
388:          * Tests whether the {@link EMFFormsLabelProvider} is used to get the labels of the control.
389:          *
390:          * @throws ECPRendererException
391:          * @throws DatabindingFailedException
392:          * @throws NoLabelFoundException
393:          */
394:         @Test
395:         public void testLabelServiceUsage() throws ECPRendererException, DatabindingFailedException, NoLabelFoundException {
396:                 labelServiceUsage();
397:         }
398:
399:         /**
400:          * Tests the date control with a TIME_AND_DATE {@link VDateTimeDisplayAttachment}.
401:          * The control should behave the same way as the default one (with no VDateTimeDisplayAttachment set).
402:          */
403:         @Test
404:         public void testDateTimeDisplayAttachmentDateAndTime()
405:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
406:
407:                 setMockDateTimeDisplayAttachment(DateTimeDisplayType.TIME_AND_DATE);
408:
409:                 final TestObservableValue mockedObservableValue = mock(TestObservableValue.class);
410:                 when(mockedObservableValue.getRealm()).thenReturn(realm);
411:                 final EObject mockedEObject = mock(EObject.class);
412:                 when(mockedEObject.eIsSet(any(EStructuralFeature.class))).thenReturn(true);
413:                 when(mockedObservableValue.getObserved()).thenReturn(mockedEObject);
414:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
415:                         .thenReturn(
416:                                 mockedObservableValue);
417:
418:                 final Control render = renderControl(new SWTGridCell(0, 2, getRenderer()));
419:                 assertControl(render, true, true);
420:
421:                 final Button setButton = getSetButton(render);
422:                 assertEquals(SELECTDATE, setButton.getToolTipText());
423:                 final Label unsetLabel = getUnsetLabel(render);
424:                 assertEquals(NODATE, unsetLabel.getText());
425:                 final Button unsetButton = getUnsetButton(render);
426:                 assertEquals(CLEANDATE, unsetButton.getToolTipText());
427:         }
428:
429:         /**
430:          * Tests the date control with a DATE_ONLY {@link VDateTimeDisplayAttachment}.
431:          * The control should have only the date widget visible.
432:          */
433:         @Test
434:         public void testDateTimeDisplayAttachmentDateOnly()
435:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
436:
437:                 setMockDateTimeDisplayAttachment(DateTimeDisplayType.DATE_ONLY);
438:
439:                 final TestObservableValue mockedObservableValue = mock(TestObservableValue.class);
440:                 when(mockedObservableValue.getRealm()).thenReturn(realm);
441:                 final EObject mockedEObject = mock(EObject.class);
442:                 when(mockedEObject.eIsSet(any(EStructuralFeature.class))).thenReturn(true);
443:                 when(mockedObservableValue.getObserved()).thenReturn(mockedEObject);
444:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
445:                         .thenReturn(
446:                                 mockedObservableValue);
447:
448:                 final Control render = renderControl(new SWTGridCell(0, 2, getRenderer()));
449:                 assertControl(render, true, false);
450:
451:                 final Button setButton = getSetButton(render);
452:                 assertEquals(SELECTDATE, setButton.getToolTipText());
453:                 final Label unsetLabel = getUnsetLabel(render);
454:                 assertEquals(NODATE, unsetLabel.getText());
455:                 final Button unsetButton = getUnsetButton(render);
456:                 assertEquals(CLEANDATE, unsetButton.getToolTipText());
457:
458:         }
459:
460:         /**
461:          * Tests the date control with a DATE_ONLY {@link VDateTimeDisplayAttachment}.
462:          * The control should have only the time widget visible.
463:          */
464:         @Test
465:         public void testDateTimeDisplayAttachmentTimeOnly()
466:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
467:
468:                 setMockDateTimeDisplayAttachment(DateTimeDisplayType.TIME_ONLY);
469:
470:                 final TestObservableValue mockedObservableValue = mock(TestObservableValue.class);
471:                 when(mockedObservableValue.getRealm()).thenReturn(realm);
472:                 final EObject mockedEObject = mock(EObject.class);
473:                 when(mockedEObject.eIsSet(any(EStructuralFeature.class))).thenReturn(true);
474:                 when(mockedObservableValue.getObserved()).thenReturn(mockedEObject);
475:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
476:                         .thenReturn(
477:                                 mockedObservableValue);
478:
479:                 final Control render = renderControl(new SWTGridCell(0, 2, getRenderer()));
480:                 assertControl(render, false, true);
481:
482:                 final Button setButton = getSetButton(render);
483:                 assertEquals(SELECTTIME, setButton.getToolTipText());
484:                 final Label unsetLabel = getUnsetLabel(render);
485:                 assertEquals(NOTIME, unsetLabel.getText());
486:                 final Button unsetButton = getUnsetButton(render);
487:                 assertEquals(CLEANTIME, unsetButton.getToolTipText());
488:         }
489:
490:         @Test
491:         public void testEffectivelyReadOnly()
492:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
493:                 final EStructuralFeature mockedEStructuralFeature = mock(EStructuralFeature.class);
494:                 final EObject mockedEObject = mock(EObject.class);
495:                 when(mockedEObject.eIsSet(mockedEStructuralFeature)).thenReturn(true);
496:                 final TestObservableValue mockedObservable = mock(TestObservableValue.class);
497:                 when(mockedObservable.getRealm()).thenReturn(realm);
498:                 when(mockedObservable.getValueType()).thenReturn(mockedEStructuralFeature);
499:                 when(mockedObservable.getObserved()).thenReturn(mockedEObject);
500:                 when(mockedObservable.getValue()).thenReturn(null);
501:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
502:                         .thenReturn(mockedObservable);
503:
504:                 when(getvControl().isEffectivelyReadonly()).thenReturn(true);
505:                 final Control renderControl = renderControl(new SWTGridCell(0, 2, getRenderer()));
506:                 getRenderer().finalizeRendering(getShell());
507:                 assertFalse(renderControl.getEnabled());
508:                 final Button unset = SWTTestUtil.findControlById(renderControl, UUID + "#unset", Button.class); //$NON-NLS-1$
509:                 assertFalse(unset.getVisible());
510:                 assertTrue(GridData.class.cast(unset.getLayoutData()).exclude);
511:                 final Button setButton = getSetButton(renderControl);
512:                 assertFalse(setButton.getVisible());
513:                 assertTrue(GridData.class.cast(setButton.getLayoutData()).exclude);
514:         }
515:
516:         @Test
517:         public void testDisableDeactivatesControl()
518:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
519:                 final EStructuralFeature mockedEStructuralFeature = mock(EStructuralFeature.class);
520:                 final EObject mockedEObject = mock(EObject.class);
521:                 when(mockedEObject.eIsSet(mockedEStructuralFeature)).thenReturn(true);
522:                 final TestObservableValue mockedObservable = mock(TestObservableValue.class);
523:                 when(mockedObservable.getRealm()).thenReturn(realm);
524:                 when(mockedObservable.getValueType()).thenReturn(mockedEStructuralFeature);
525:                 when(mockedObservable.getObserved()).thenReturn(mockedEObject);
526:                 when(mockedObservable.getValue()).thenReturn(null);
527:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
528:                         .thenReturn(mockedObservable);
529:
530:                 when(getvControl().isEffectivelyReadonly()).thenReturn(false);
531:                 when(getvControl().isEffectivelyEnabled()).thenReturn(false);
532:                 final Control renderControl = renderControl(new SWTGridCell(0, 2, getRenderer()));
533:                 getRenderer().finalizeRendering(getShell());
534:                 assertFalse(renderControl.getEnabled());
535:                 final Button unset = SWTTestUtil.findControlById(renderControl, UUID + "#unset", Button.class); //$NON-NLS-1$
536:                 assertTrue(unset.getVisible());
537:                 assertFalse(unset.getEnabled());
538:         }
539:
540:         @Test
541:         public void testEnabledActivatesControl()
542:                 throws NoRendererFoundException, NoPropertyDescriptorFoundExeption, DatabindingFailedException {
543:                 final EStructuralFeature mockedEStructuralFeature = mock(EStructuralFeature.class);
544:                 final EObject mockedEObject = mock(EObject.class);
545:                 when(mockedEObject.eIsSet(mockedEStructuralFeature)).thenReturn(true);
546:                 final TestObservableValue mockedObservable = mock(TestObservableValue.class);
547:                 when(mockedObservable.getRealm()).thenReturn(realm);
548:                 when(mockedObservable.getValueType()).thenReturn(mockedEStructuralFeature);
549:                 when(mockedObservable.getObserved()).thenReturn(mockedEObject);
550:                 when(mockedObservable.getValue()).thenReturn(null);
551:                 when(getDatabindingService().getObservableValue(any(VDomainModelReference.class), any(EObject.class)))
552:                         .thenReturn(mockedObservable);
553:
554:                 when(getvControl().isEffectivelyReadonly()).thenReturn(false);
555:                 when(getvControl().isEffectivelyEnabled()).thenReturn(true);
556:                 final Control renderControl = renderControl(new SWTGridCell(0, 2, getRenderer()));
557:                 getRenderer().finalizeRendering(getShell());
558:                 assertTrue(renderControl.getEnabled());
559:                 final Button unset = SWTTestUtil.findControlById(renderControl, UUID + "#unset", Button.class); //$NON-NLS-1$
560:                 assertTrue(unset.getVisible());
561:                 assertTrue(unset.getEnabled());
562:
563:         }
564:
565:         private void setMockDateTimeDisplayAttachment(DateTimeDisplayType displayType) {
566:                 final EList<VAttachment> attachments = new BasicEList<>();
567:                 final VDateTimeDisplayAttachment displayAttachment = VViewFactory.eINSTANCE.createDateTimeDisplayAttachment();
568:                 displayAttachment.setDisplayType(displayType);
569:                 attachments.add(displayAttachment);
570:                 Mockito.when(getvControl().getAttachments()).thenReturn(attachments);
571:         }
572: }