blob: 7db99e85c8c7abca79571d5936501a8dbc6f9f6b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016, 2017 1C-Soft LLC.
* 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:
* Vladimir Piskarev (1C) - initial API and implementation
*******************************************************************************/
package org.eclipse.handly.model.impl;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.handly.model.IElementChangeEvent;
import org.eclipse.handly.model.IElementChangeListener;
import junit.framework.TestCase;
/**
* <code>NotificationManager</code> tests.
*/
public class NotificationManagerTest
extends TestCase
{
private static final ElementDelta NULL_DELTA = new ElementDelta(
new SimpleElement(null, null, new SimpleModelManager()));
private static final IElementChangeEvent POST_CHANGE =
new ElementChangeEvent(ElementChangeEvent.POST_CHANGE, NULL_DELTA);
private static final IElementChangeEvent POST_RECONCILE =
new ElementChangeEvent(ElementChangeEvent.POST_RECONCILE, NULL_DELTA);
private NotificationManager manager;
private Listener listener;
@Override
protected void setUp() throws Exception
{
manager = new NotificationManager();
listener = new Listener();
}
public void test1()
{
manager.addElementChangeListener(listener);
manager.fireElementChangeEvent(POST_CHANGE);
assertSame(POST_CHANGE, listener.event);
manager.fireElementChangeEvent(POST_RECONCILE);
assertSame(POST_RECONCILE, listener.event);
listener.event = null;
manager.removeElementChangeListener(listener);
manager.fireElementChangeEvent(POST_CHANGE);
assertNull(listener.event);
manager.fireElementChangeEvent(POST_RECONCILE);
assertNull(listener.event);
}
public void test2()
{
manager.addElementChangeListener(listener);
manager.fireElementChangeEvent(POST_CHANGE);
assertSame(POST_CHANGE, listener.event);
manager.fireElementChangeEvent(POST_RECONCILE);
assertSame(POST_RECONCILE, listener.event);
manager.addElementChangeListener(listener,
ElementChangeEvent.POST_CHANGE);
manager.fireElementChangeEvent(POST_CHANGE);
assertSame(POST_CHANGE, listener.event);
manager.fireElementChangeEvent(POST_RECONCILE);
assertSame(POST_CHANGE, listener.event);
manager.addElementChangeListener(listener,
ElementChangeEvent.POST_RECONCILE);
manager.fireElementChangeEvent(POST_RECONCILE);
assertSame(POST_RECONCILE, listener.event);
manager.fireElementChangeEvent(POST_CHANGE);
assertSame(POST_RECONCILE, listener.event);
listener.event = null;
manager.addElementChangeListener(listener, 0);
manager.fireElementChangeEvent(POST_CHANGE);
assertNull(listener.event);
manager.fireElementChangeEvent(POST_RECONCILE);
assertNull(listener.event);
}
public void test3()
{
List<IElementChangeEvent> events = new ArrayList<>();
IElementChangeListener listener = event -> events.add(event);
manager.addElementChangeListener(listener);
manager.addElementChangeListener(listener);
manager.fireElementChangeEvent(POST_CHANGE);
assertEquals(1, events.size());
events.clear();
manager.removeElementChangeListener(listener);
manager.fireElementChangeEvent(POST_CHANGE);
assertTrue(events.isEmpty());
manager.removeElementChangeListener(listener);
}
private static class Listener
implements IElementChangeListener
{
public IElementChangeEvent event;
@Override
public void elementChanged(IElementChangeEvent event)
{
this.event = event;
}
}
}