blob: 31efa499834ea570ac5bddfe73aaaf655855dafc [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 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:
* Johannes Faltermeier - initial API and implementation
******************************************************************************/
package org.eclipse.emf.ecp.ui.validation.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecp.internal.ui.validation.ECPValidationResultServiceImpl;
import org.eclipse.emf.ecp.ui.validation.ECPValidationResultService.ECPValidationResultServiceListener;
import org.eclipse.emf.emfstore.bowling.BowlingFactory;
import org.eclipse.emf.emfstore.bowling.BowlingPackage;
import org.eclipse.emf.emfstore.bowling.League;
import org.eclipse.emf.emfstore.bowling.Player;
import org.junit.Before;
import org.junit.Test;
public class ValidationResultService_Test {
private ECPValidationResultServiceImpl service;
private Player player;
private League league;
private ECPTestValidationResultListener listener;
@Before
public void before() {
service = new ECPValidationResultServiceImpl();
player = BowlingFactory.eINSTANCE.createPlayer();
league = BowlingFactory.eINSTANCE.createLeague();
listener = new ECPTestValidationResultListener();
}
@Test
public void registerForAll() {
service.register(listener);
assertNull(listener.getDiagnostic());
service.setResult(diagnostic(league));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
service.setResult(diagnostic(player));
assertNotNull(listener.getDiagnostic());
}
@Test
public void registerForAllClassifier() {
service.register(listener, classifiers(true, true));
assertNull(listener.getDiagnostic());
service.setResult(diagnostic(league));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
service.setResult(diagnostic(player));
assertNotNull(listener.getDiagnostic());
}
@Test
public void registerForSpecificClassifier() {
service.register(listener, classifiers(false, true));
assertNull(listener.getDiagnostic());
service.setResult(diagnostic(league));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
service.setResult(diagnostic(player));
assertNull(listener.getDiagnostic());
}
@Test
public void reregisterFromAllToSpecific() {
service.register(listener);
service.register(listener, classifiers(true, false));
service.setResult(diagnostic(player));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
service.setResult(diagnostic(league));
assertNull(listener.getDiagnostic());
}
@Test
public void reregisterFromSpecificToAllToOtherSpecific() {
service.register(listener, classifiers(true, false));
service.register(listener);
service.setResult(diagnostic(player));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
service.setResult(diagnostic(league));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
service.register(listener, classifiers(false, true));
service.setResult(diagnostic(player));
assertNull(listener.getDiagnostic());
service.setResult(diagnostic(league));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
}
@Test
public void reregisterForMore() {
service.register(listener, classifiers(true, false));
service.register(listener, classifiers(true, true));
service.setResult(diagnostic(player));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
service.setResult(diagnostic(league));
assertNotNull(listener.getDiagnostic());
listener.resetDiagnostic();
}
@Test
public void deregisterFromAll() {
service.register(listener);
service.deregister(listener);
service.setResult(diagnostic(player));
assertNull(listener.getDiagnostic());
service.setResult(diagnostic(league));
assertNull(listener.getDiagnostic());
}
@Test
public void deregisterFromSpecific() {
service.register(listener, classifiers(true, false));
service.deregister(listener);
service.setResult(diagnostic(player));
assertNull(listener.getDiagnostic());
service.setResult(diagnostic(league));
assertNull(listener.getDiagnostic());
}
@Test
public void testResultSingle() {
service.register(listener);
final Diagnostic diagnostic = diagnostic(league);
service.setResult(diagnostic);
assertEquals(diagnostic, listener.getDiagnostic());
}
@Test
public void testResultList() {
service.register(listener);
final List<Diagnostic> list = new ArrayList<Diagnostic>();
list.add(diagnostic(league));
list.add(diagnostic(player));
service.setResult(list);
assertEquals(list, listener.getDiagnostic());
}
@Test
public void testResultArray() {
service.register(listener);
final Diagnostic[] array = new Diagnostic[2];
array[0] = diagnostic(league);
array[1] = diagnostic(player);
service.setResult(array);
assertEquals(array, listener.getDiagnostic());
}
private Set<EClassifier> classifiers(boolean player, boolean league) {
final Set<EClassifier> set = new LinkedHashSet<EClassifier>();
if (player) {
set.add(BowlingPackage.eINSTANCE.getPlayer());
}
if (league) {
set.add(BowlingPackage.eINSTANCE.getLeague());
}
return set;
}
private Diagnostic diagnostic(EObject object) {
return createDiagnostic(Diagnostic.ERROR, "source", 0, "There is something wrong",
new Object[] { object }, new LinkedHashMap<Object, Object>());
}
private Diagnostic createDiagnostic(int severity, String source, int code, String message, Object[] data,
Map<Object, Object> context) {
return new BasicDiagnostic(severity, source, code, message, data);
}
private class ECPTestValidationResultListener implements ECPValidationResultServiceListener {
private Object diagnostic;
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.ui.validation.ECPValidationResultService.ECPValidationResultServiceListener#resultChanged(java.lang.Object)
*/
@Override
public void resultChanged(Object diagnostic) {
this.diagnostic = diagnostic;
}
public Object getDiagnostic() {
return diagnostic;
}
public void resetDiagnostic() {
diagnostic = null;
assertNull(diagnostic);
}
}
}