blob: dff4ab16d94cdca68c8f15c5fe0f862326045a06 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2021 IBM Corporation and others.
*
* 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:
* IBM Corporation - initial API and implementation
* Thibault Le Ouay <thibaultleouay@gmail.com> - Bug 443094
*******************************************************************************/
package org.eclipse.e4.ui.css.swt.properties.preference;
import static org.eclipse.e4.ui.css.swt.helpers.EclipsePreferencesHelper.PROPS_OVERRIDDEN_BY_CSS_PROP;
import static org.eclipse.e4.ui.css.swt.properties.preference.EclipsePreferencesHandler.PREFERENCES_PROP;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.eclipse.core.internal.preferences.EclipsePreferences;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
import org.eclipse.e4.ui.css.swt.dom.preference.EclipsePreferencesElement;
import org.junit.Ignore;
import org.junit.Test;
import org.w3c.dom.css.CSSValue;
import org.w3c.dom.css.CSSValueList;
public class EclipsePreferencesHandlerTest {
@Test
public void testApplyCSSProperty() {
// given
CSSEngine engine = mock(CSSEngine.class);
IEclipsePreferences preferences = new EclipsePreferences();
EclipsePreferencesElement element = new EclipsePreferencesElement(
preferences, engine);
CSSValue value = mock(CSSValue.class);
doReturn(CSSValue.CSS_PRIMITIVE_VALUE).when(value).getCssValueType();
EclipsePreferencesHandlerTestable handler = spy(new EclipsePreferencesHandlerTestable());
// when
try {
handler.applyCSSProperty(element, PREFERENCES_PROP, value, null, engine);
} catch (Exception e) {
fail("Apply CSSProperty should not throw exception");
}
// then
verify(handler, times(1)).overrideProperty(preferences, value);
engine.dispose();
}
@Test
public void testApplyCSSPropertyWhenCssValueList() {
// given
CSSEngine engine = mock(CSSEngine.class);
IEclipsePreferences preferences = new EclipsePreferences();
EclipsePreferencesElement element = new EclipsePreferencesElement(
preferences, engine);
CSSValue[] values = new CSSValue[] { mock(CSSValue.class),
mock(CSSValue.class) };
CSSValueList listValue = mock(CSSValueList.class);
doReturn(CSSValue.CSS_VALUE_LIST).when(listValue).getCssValueType();
doReturn(values.length).when(listValue).getLength();
doReturn(values[0]).when(listValue).item(0);
doReturn(values[1]).when(listValue).item(1);
EclipsePreferencesHandlerTestable handler = spy(new EclipsePreferencesHandlerTestable());
// when
try {
handler.applyCSSProperty(element, PREFERENCES_PROP, listValue, null, engine);
} catch (Exception e) {
fail("Apply CSSProperty should not throw exception");
}
// then
verify(handler, times(2)).overrideProperty(
any(IEclipsePreferences.class), any(CSSValue.class));
verify(handler, times(1)).overrideProperty(preferences, values[0]);
verify(handler, times(1)).overrideProperty(preferences, values[1]);
engine.dispose();
}
@Test
public void testOverridePropertyWithCSSValue() {
// given
IEclipsePreferences preferences = new EclipsePreferences();
CSSValue value1 = mock(CSSValue.class);
doReturn("name1=value1").when(value1).getCssText();
CSSValue value2 = mock(CSSValue.class);
doReturn(" name2 = value2").when(value2).getCssText();
EclipsePreferencesHandlerTestable handler = spy(new EclipsePreferencesHandlerTestable());
// when
handler.overridePropertyUnMocked(preferences, value1);
handler.overridePropertyUnMocked(preferences, value2);
// then
verify(handler, times(1)).overrideProperty(preferences, "name1",
"value1");
verify(handler, times(1)).overrideProperty(preferences, "name2",
"value2");
}
@Test
public void testOverridePropertyWithNameAndValueSplit() {
// given
IEclipsePreferences preferences = new EclipsePreferences();
EclipsePreferencesHandlerTestable handler = new EclipsePreferencesHandlerTestable();
// when
handler.overridePropertyUnMocked(preferences, "name", "value");
// then
assertEquals("value", preferences.get("name", null));
assertTrue(preferences.get(PROPS_OVERRIDDEN_BY_CSS_PROP, "").contains(
"name"));
}
@Test
@Ignore("Failing on Hudson, see Bug 501875")
public void testOverridePropertyWithNameAndValueSplitAndNameAlreadyAddedByUser() {
// given
IEclipsePreferences preferences = new EclipsePreferences();
// pref is already set that means that user has overridden it with the
// preference dialog
preferences.put("name", "valueSetByUser");
EclipsePreferencesHandlerTestable handler = new EclipsePreferencesHandlerTestable();
// when
handler.overridePropertyUnMocked(preferences, "name", "value");
// then
assertEquals("valueSetByUser", preferences.get("name", null));
assertNull(preferences.get(PROPS_OVERRIDDEN_BY_CSS_PROP, null));
}
@Test
public void testCustomizePreferenceOverriddenByCSS() {
// given
IEclipsePreferences preferences = new EclipsePreferences();
EclipsePreferencesHandlerTestable handler = new EclipsePreferencesHandlerTestable();
// when
handler.overridePropertyUnMocked(preferences, "name", "value");
assertEquals("value", preferences.get("name", null));
assertTrue(preferences.get(PROPS_OVERRIDDEN_BY_CSS_PROP, "").contains(
"name"));
preferences.put("name", "customizedValue");
// then
assertEquals("customizedValue", preferences.get("name", null));
assertFalse(preferences.get(PROPS_OVERRIDDEN_BY_CSS_PROP, "").contains(
"name"));
}
public static class EclipsePreferencesHandlerTestable extends
EclipsePreferencesHandler {
@Override
public void overrideProperty(IEclipsePreferences preferences,
CSSValue value) {
}
public void overridePropertyUnMocked(IEclipsePreferences preferences,
CSSValue value) {
super.overrideProperty(preferences, value);
}
@Override
public void overrideProperty(IEclipsePreferences preferences,
String name, String value) {
}
public void overridePropertyUnMocked(IEclipsePreferences preferences,
String name, String value) {
super.overrideProperty(preferences, name, value);
}
}
}