blob: 1438fbd12812a49343fdbb094ce5e1368f6c2cff [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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.internal.databinding.provisional.observable.Diffs;
import org.eclipse.jface.internal.databinding.provisional.observable.IChangeListener;
import org.eclipse.jface.internal.databinding.provisional.observable.value.WritableValue;
import org.eclipse.jface.tests.databinding.util.Mocks;
public class ObservableTest extends TestCase {
private static class MyObservable extends WritableValue {
/**
* @param initialValue
*/
public MyObservable(Object initialValue) {
super(initialValue);
}
public void fireChange(Object oldValue, Object newValue) {
fireValueChange(Diffs.createValueDiff(oldValue, newValue));
}
}
private MyObservable observable;
protected void setUp() throws Exception {
super.setUp();
observable = new MyObservable(null);
}
protected void tearDown() throws Exception {
if (observable != null) {
try {
observable.dispose();
} catch (Exception ex) {
// ignore
}
}
observable = null;
super.tearDown();
}
/*
* Test method for
* 'org.eclipse.jface.databinding.Observable.addChangeListener(IChangeListener)'
*/
public void testAddChangeListener() {
IChangeListener changeListenerMock = (IChangeListener) Mocks
.createOrderedMock(IChangeListener.class);
// testing that no methods on the observable are called when adding the
// change listener
Mocks.startChecking(changeListenerMock);
observable.addChangeListener(changeListenerMock);
// testing that handleChange is actually called
Mocks.reset(changeListenerMock);
changeListenerMock.handleChange(null);
changeListenerMock.handleChange(null);
Mocks.startChecking(changeListenerMock);
observable.fireChange(null, null);
observable.fireChange(null, null);
Mocks.verify(changeListenerMock);
// testing that handleChange is called just once
Mocks.reset(changeListenerMock);
changeListenerMock.handleChange(null);
Mocks.startChecking(changeListenerMock);
observable.addChangeListener(changeListenerMock);
observable.fireChange(null, null);
Mocks.verify(changeListenerMock);
// dispose() will call another handleChange. Prevent this from causing a
// test failure
Mocks.reset(changeListenerMock);
changeListenerMock.handleChange(null);
Mocks.startChecking(changeListenerMock);
}
/*
* Test method for
* 'org.eclipse.jface.databinding.Observable.removeChangeListener(IChangeListener)'
*/
public void testRemoveChangeListener() {
IChangeListener changeListenerMock = (IChangeListener) Mocks
.createOrderedMock(IChangeListener.class);
// testing that no methods on the observable are called when removing
// the
// change listener
Mocks.startChecking(changeListenerMock);
observable.removeChangeListener(changeListenerMock);
// testing that no methods on the observable are called after adding and
// removing the change listener
observable.addChangeListener(changeListenerMock);
observable.removeChangeListener(changeListenerMock);
observable.fireChange(null, null);
}
/*
* Test method for
* 'org.eclipse.jface.databinding.Observable.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();
// }
// });
// observable.addChangeListener(changeListenerMock);
//
// Object o1 = new Object();
// Object o2 = new Object();
//
// changeListenerMock.handleChange(new ChangeEvent(observable, 0, null,
// null, ChangeEvent.POSITION_UNKNOWN));
// changeListenerMock.handleChange(new ChangeEvent(observable, 0, null,
// null, 1));
// changeListenerMock.handleChange(new ChangeEvent(observable,
// ChangeEvent.CHANGE, o1, o2, ChangeEvent.POSITION_UNKNOWN));
// changeListenerMock.handleChange(new ChangeEvent(observable,
// ChangeEvent.CHANGE, o1, o2, 42));
// Mocks.startChecking(changeListenerMock);
// observable.fireChange(0, null, null);
// observable.fireChange(0, null, null, 1);
// observable.fireChange(ChangeEvent.CHANGE, o1, o2);
// observable.fireChange(ChangeEvent.CHANGE, o1, o2, 42);
// Mocks.verify(changeListenerMock);
//
// // dispose() will call another handleChange. Prevent this from
// causing a test failure
// Mocks.reset(changeListenerMock);
// changeListenerMock.handleChange(null);
// Mocks.startChecking(changeListenerMock);
}
}