package org.tessell.util;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.tessell.model.properties.NewProperty.stringProperty;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.tessell.model.events.PropertyChangedEvent;
import org.tessell.model.events.PropertyChangedHandler;
import org.tessell.model.properties.Property;
import org.tessell.model.properties.StringProperty;
public class PropertyUtilsTest {
@Test
public void defaultValue() {
StringProperty original = stringProperty("p");
Property<String> derived = PropertyUtils.defaultValue(original, "isnull");
assertThat(derived.get(), is("isnull"));
original.set("somevalue");
assertThat(derived.get(), is("somevalue"));
}
@Test
public void defaultValueFiresEvents() {
StringProperty original = stringProperty("p");
Property<String> derived = PropertyUtils.defaultValue(original, "isnull");
ChangedWatcher w = new ChangedWatcher();
derived.addPropertyChangedHandler(w);
original.set("blah");
original.set(null);
original.set("fixed");
assertThat(w.values, contains("blah", "isnull", "fixed"));
}
private static class ChangedWatcher implements PropertyChangedHandler<String> {
private final List<String> values = new ArrayList<String>();
@Override
public void onPropertyChanged(PropertyChangedEvent<String> event) {
values.add(event.getProperty().get());
}
}
}