blob: a9a44705c48c634ed30b45d7172c2d62426efc85 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2014 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 v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource Muenchen - initial API and implementation
******************************************************************************/
package org.eclipse.emf.ecp.view.template.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.isNull;
import static org.mockito.Matchers.notNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Collections;
import java.util.Set;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
import org.eclipse.emf.ecp.view.spi.model.VControl;
import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
import org.eclipse.emf.ecp.view.spi.model.VElement;
import org.eclipse.emf.ecp.view.template.model.VTStyle;
import org.eclipse.emf.ecp.view.template.model.VTStyleProperty;
import org.eclipse.emf.ecp.view.template.model.VTStyleSelector;
import org.eclipse.emf.ecp.view.template.model.VTViewTemplate;
import org.junit.Before;
import org.junit.Test;
public class ViewTemplateService_Test {
private ViewTemplateProviderImpl templateProvider;
private VTStyle mockedStyle;
@Before
public void setup() {
templateProvider = new ViewTemplateProviderImpl();
}
@Test
public void testNoTemplateModel() {
final Set<VTStyleProperty> styleProperties = templateProvider.getStyleProperties(mock(VElement.class),
mock(ViewModelContext.class));
assertTrue(styleProperties.isEmpty());
}
@Test
public void testVElementIsNull() {
mockTemplate(1d);
final Set<VTStyleProperty> styleProperties = templateProvider.getStyleProperties(null,
mock(ViewModelContext.class));
assertTrue(styleProperties.isEmpty());
}
@Test
public void testViewModelContextIsNull() {
mockTemplate(1d);
final Set<VTStyleProperty> styleProperties = templateProvider.getStyleProperties(mock(VElement.class), null);
assertTrue(styleProperties.isEmpty());
}
@Test
public void testIsApplicable() {
mockTemplate(1d);
final VControl vElement = mock(VControl.class);
final VDomainModelReference dmr = mock(VDomainModelReference.class);
when(vElement.getDomainModelReference()).thenReturn(dmr);
final Setting setting = mock(Setting.class);
when(dmr.getIterator()).thenReturn(Collections.singleton(setting).iterator());
final ViewModelContext viewModelContext = mock(ViewModelContext.class);
final Set<VTStyleProperty> styleProperties = templateProvider.getStyleProperties(vElement, viewModelContext);
assertEquals(1, styleProperties.size());
assertEquals(mockedStyle.getProperties().get(0), styleProperties.iterator().next());
}
@Test
public void testMultipleStyles() {
mockTemplate(1d);
final VTStyle mockedStyle2 = mockStyle(1d);
templateProvider.getViewTemplate().getStyles().add(mockedStyle2);
final VControl vElement = mock(VControl.class);
final VDomainModelReference dmr = mock(VDomainModelReference.class);
when(vElement.getDomainModelReference()).thenReturn(dmr);
final Setting setting = mock(Setting.class);
when(dmr.getIterator()).thenReturn(Collections.singleton(setting).iterator());
final ViewModelContext viewModelContext = mock(ViewModelContext.class);
final Set<VTStyleProperty> styleProperties = templateProvider.getStyleProperties(vElement, viewModelContext);
assertEquals(2, styleProperties.size());
assertTrue(styleProperties.contains(mockedStyle2.getProperties().get(0)));
assertTrue(styleProperties.contains(templateProvider.getViewTemplate().getStyles().get(0).getProperties()
.get(0)));
}
@Test
public void testOnlyOneStyleProperty() {
mockTemplate(1d);
final VTStyle mockedStyle2 = mockStyle(10);
templateProvider.getViewTemplate().getStyles().add(mockedStyle2);
when(
templateProvider.getViewTemplate().getStyles().get(0).getProperties().get(0)
.equalStyles(mockedStyle2.getProperties().get(0))).thenReturn(true);
final VControl vElement = mock(VControl.class);
final VDomainModelReference dmr = mock(VDomainModelReference.class);
when(vElement.getDomainModelReference()).thenReturn(dmr);
final Setting setting = mock(Setting.class);
when(dmr.getIterator()).thenReturn(Collections.singleton(setting).iterator());
final ViewModelContext viewModelContext = mock(ViewModelContext.class);
final Set<VTStyleProperty> styleProperties = templateProvider.getStyleProperties(vElement, viewModelContext);
assertEquals(1, styleProperties.size());
assertEquals(mockedStyle2.getProperties().get(0), styleProperties.iterator().next());
}
private void mockTemplate(double specificity) {
mockedStyle = mockStyle(specificity);
final EList<VTStyle> styles = new BasicEList<VTStyle>();
styles.add(mockedStyle);
final VTViewTemplate viewTemplate = mock(VTViewTemplate.class);
templateProvider.setViewTemplate(viewTemplate);
when(viewTemplate.getStyles()).thenReturn(styles);
}
private VTStyle mockStyle(double specificity) {
final VTStyle style = mock(VTStyle.class);
final VTStyleSelector styleSelector = mock(VTStyleSelector.class);
when(style.getSelector()).thenReturn(styleSelector);
when(styleSelector.isApplicable(isNull(VElement.class), isNull(ViewModelContext.class))).thenReturn(
VTStyleSelector.NOT_APPLICABLE);
when(styleSelector.isApplicable(isNull(VElement.class), notNull(ViewModelContext.class))).thenReturn(
VTStyleSelector.NOT_APPLICABLE);
when(styleSelector.isApplicable(notNull(VElement.class), isNull(ViewModelContext.class))).thenReturn(
VTStyleSelector.NOT_APPLICABLE);
when(styleSelector.isApplicable(notNull(VElement.class), notNull(ViewModelContext.class))).thenReturn(
specificity);
final VTStyleProperty styleProperty = mock(VTStyleProperty.class);
final EList<VTStyleProperty> properties = new BasicEList<VTStyleProperty>();
properties.add(styleProperty);
when(style.getProperties()).thenReturn(properties);
return style;
}
@Test
public void testIsNotApplicable() {
mockTemplate(VTStyleSelector.NOT_APPLICABLE);
final VControl vElement = mock(VControl.class);
final VDomainModelReference dmr = mock(VDomainModelReference.class);
when(vElement.getDomainModelReference()).thenReturn(dmr);
final Setting setting = mock(Setting.class);
when(dmr.getIterator()).thenReturn(Collections.singleton(setting).iterator());
final ViewModelContext viewModelContext = mock(ViewModelContext.class);
final Set<VTStyleProperty> styleProperties = templateProvider.getStyleProperties(vElement, viewModelContext);
assertEquals(0, styleProperties.size());
}
}