package org.drugis.common.validation;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.beans.PropertyChangeListener;
import java.util.Arrays;
import org.drugis.common.JUnitUtil;
import org.junit.Test;
import com.jgoodies.binding.value.ValueHolder;
import com.jgoodies.binding.value.ValueModel;
public class BooleanModelTest {
@Test
public void testValuesBooleanNot() {
assertNull(new BooleanNotModel(new ValueHolder(null)).getValue());
assertNull(new BooleanNotModel(new ValueHolder(new Object())).getValue());
assertFalse(new BooleanNotModel(new ValueHolder(true)).getValue());
assertTrue(new BooleanNotModel(new ValueHolder(false)).getValue());
}
@Test
public void testValuesBooleanAnd() {
ValueModel model1 = new ValueHolder(null);
ValueModel model2 = new ValueHolder(null);
assertNull(new BooleanAndModel(model1, model2).getValue());
assertNull(new BooleanAndModel(Arrays.asList(new ValueModel[] {model1, model2})).getValue());
model1.setValue(false);
assertFalse(new BooleanAndModel(model1, model2).getValue());
model2.setValue(false);
assertFalse(new BooleanAndModel(model1, model2).getValue());
model1.setValue(true);
model2.setValue(true);
assertTrue(new BooleanAndModel(model1, model2).getValue());
}
@Test
public void testValuesBooleanOr() {
ValueModel model1 = new ValueHolder(null);
ValueModel model2 = new ValueHolder(null);
assertNull(new BooleanOrModel(model1, model2).getValue());
assertNull(new BooleanOrModel(Arrays.asList(new ValueModel[] {model1, model2})).getValue());
model1.setValue(false);
assertNull(new BooleanOrModel(model1, model2).getValue());
model2.setValue(false);
assertFalse(new BooleanOrModel(model1, model2).getValue());
model2.setValue(true);
assertTrue(new BooleanOrModel(model1, model2).getValue());
model1.setValue(true);
assertTrue(new BooleanOrModel(model1, model2).getValue());
}
@Test(expected=UnsupportedOperationException.class)
public void testSetValueNotSupported() {
new BooleanNotModel(new ValueHolder(null)).setValue("");
}
@Test
public void testEventChainingNotModel() {
ValueHolder holder = new ValueHolder(null);
BooleanNotModel model = new BooleanNotModel(holder);
PropertyChangeListener mock = JUnitUtil.mockStrictListener(model, "value", null, false);
model.addValueChangeListener(mock);
holder.setValue(true);
verify(mock);
model.removeValueChangeListener(mock);
mock = JUnitUtil.mockStrictListener(model, "value", false, true);
model.addValueChangeListener(mock);
holder.setValue(false);
verify(mock);
}
}