blob: 1138d15f7739c0ca29401d80a487e259e69407bd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.tests.databinding;
import junit.framework.TestCase;
import org.eclipse.jface.databinding.*;
import org.eclipse.jface.tests.databinding.util.Mocks;
public class UpdatableTest extends TestCase {
private static class MyUpdatable extends Updatable {
public void fireChange(int changeType, Object oldValue,
Object newValue, int position) {
fireChangeEvent(changeType, oldValue, newValue, position);
}
public void fireChange(int changeType, Object oldValue, Object newValue) {
fireChangeEvent(changeType, oldValue, newValue);
}
}
private MyUpdatable updatable;
protected void setUp() throws Exception {
super.setUp();
updatable = new MyUpdatable();
}
protected void tearDown() throws Exception {
if (updatable != null) {
try {
updatable.dispose();
} catch (Exception ex) {
// ignore
}
}
updatable = null;
super.tearDown();
}
/*
* Test method for
* 'org.eclipse.jface.databinding.Updatable.addChangeListener(IChangeListener)'
*/
public void testAddChangeListener() {
IChangeListener changeListenerMock = (IChangeListener) Mocks
.createOrderedMock(IChangeListener.class);
// testing that no methods on the updatable are called when adding the
// change listener
Mocks.startChecking(changeListenerMock);
updatable.addChangeListener(changeListenerMock);
// testing that handleChange is actually called
Mocks.reset(changeListenerMock);
changeListenerMock.handleChange(null);
changeListenerMock.handleChange(null);
Mocks.startChecking(changeListenerMock);
updatable.fireChange(0, null, null, 0);
updatable.fireChange(0, null, null, 0);
Mocks.verify(changeListenerMock);
// testing that handleChange is called just once
Mocks.reset(changeListenerMock);
changeListenerMock.handleChange(null);
Mocks.startChecking(changeListenerMock);
updatable.addChangeListener(changeListenerMock);
updatable.fireChange(0, null, null, 0);
Mocks.verify(changeListenerMock);
}
/*
* Test method for
* 'org.eclipse.jface.databinding.Updatable.removeChangeListener(IChangeListener)'
*/
public void testRemoveChangeListener() {
IChangeListener changeListenerMock = (IChangeListener) Mocks
.createOrderedMock(IChangeListener.class);
// testing that no methods on the updatable are called when removing the
// change listener
Mocks.startChecking(changeListenerMock);
updatable.removeChangeListener(changeListenerMock);
// testing that no methods on the updatable are called after adding and
// removing the change listener
updatable.addChangeListener(changeListenerMock);
updatable.removeChangeListener(changeListenerMock);
updatable.fireChange(0, null, null, 0);
}
/*
* Test method for 'org.eclipse.jface.databinding.Updatable.fireChangeEvent(int,
* Object, Object)'
*/
public void testFireChangeEvent() {
IChangeListener changeListenerMock = (IChangeListener) Mocks
.createMock(IChangeListener.class,
new Mocks.EqualityComparator() {
public boolean equals(Object o1, Object o2) {
ChangeEvent changeEvent1 = (ChangeEvent) o1;
ChangeEvent changeEvent2 = (ChangeEvent) o2;
return changeEvent1.getChangeType() == changeEvent2
.getChangeType()
&& changeEvent1.getPosition() == changeEvent2
.getPosition()
&& changeEvent1.getOldValue() == changeEvent2
.getOldValue()
&& changeEvent1.getNewValue() == changeEvent2
.getNewValue();
}
});
updatable.addChangeListener(changeListenerMock);
Object o1 = new Object();
Object o2 = new Object();
changeListenerMock.handleChange(new ChangeEvent(updatable, 0, null,
null, ChangeEvent.POSITION_UNKNOWN));
changeListenerMock.handleChange(new ChangeEvent(updatable, 0, null,
null, 1));
changeListenerMock.handleChange(new ChangeEvent(updatable,
ChangeEvent.CHANGE, o1, o2, ChangeEvent.POSITION_UNKNOWN));
changeListenerMock.handleChange(new ChangeEvent(updatable,
ChangeEvent.CHANGE, o1, o2, 42));
Mocks.startChecking(changeListenerMock);
updatable.fireChange(0, null, null);
updatable.fireChange(0, null, null, 1);
updatable.fireChange(ChangeEvent.CHANGE, o1, o2);
updatable.fireChange(ChangeEvent.CHANGE, o1, o2, 42);
Mocks.verify(changeListenerMock);
}
}