/*
* Copyright (c) 2003-2008Israfil Consulting Services Corporation
* Copyright (c) 2003-2008 Christian Edward Gruber
* All Rights Reserved
*
* $Id: Types.java 129 2006-12-31 23:20:02Z cgruber $
*/
package net.israfil.foundation.valuemodel;
import net.israfil.foundation.core.Copyright;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* Tests for ValueHolder
*
* @author Christian Edward Gruber
* @author Latest: $Author: cgruber $
* @version $Revision: 129 $
*/
@Copyright(years={"2003","2004","2005","2006","2007","2008"},owner="Israfil Consulting Services Corporation",license="BSD")
@Test
public class ValueHolderTest {
private String stringValue = null;
private Integer integerValue = null;
private ValueHolder stringValueHolder = null;
private ValueHolder integerValueHolder = null;
@BeforeMethod
protected void setUp() throws Exception {
stringValue = "String Value";
integerValue = new Integer(5);
stringValueHolder = new ValueHolder(stringValue);
integerValueHolder = new ValueHolder(integerValue);
}
@AfterMethod
protected void tearDown() throws Exception {
stringValue = null;
integerValue = null;
stringValueHolder = null;
integerValueHolder = null;
}
/*
* Test for void ValueHolder(Object)
*/
public void testValueHolderObject() {
String valueString = "Value";
ValueHoldervalueHolder = new ValueHolder(valueString);
Assert.assertEquals(valueString,valueHolder.get());
}
public void testGetValue() {
Assert.assertEquals(stringValue,stringValueHolder.get());
Assert.assertEquals(integerValue,integerValueHolder.get());
}
public void testSetValueObject() {
String stringValue2 = "String Value 2";
stringValueHolder.set(stringValue2);
Assert.assertEquals(stringValue2,stringValueHolder.get());
}
public void testAddObserverObjectString() {
String stringValue2 = "String Value 2";
CallbackObject callback = new CallbackObject(stringValueHolder);
stringValueHolder.addObservers("notifyMe:java.lang.Object:java.lang.Object:java.lang.Object",callback);
stringValueHolder.set(stringValue2);
Assert.assertTrue(callback.notified);
}
public void testRemoveObserverObjectString() {
String stringValue2 = "String Value 2";
CallbackObject callback = new CallbackObject(stringValueHolder);
stringValueHolder.addObservers("notifyMe:java.lang.Object:java.lang.Object:java.lang.Object",callback);
stringValueHolder.removeObservers(callback);
stringValueHolder.set(stringValue2);
Assert.assertFalse(callback.notified);
}
public void testAddApproverObjectString() {
String stringValue2 = "String Value 2";
CallbackObject callback = new CallbackObject(stringValueHolder);
stringValueHolder.addVetoers("approve:java.lang.Object:java.lang.Object:java.lang.Object",callback);
stringValueHolder.set(stringValue2);
Assert.assertEquals(stringValue2,stringValueHolder.get());
callback = new CallbackObject(stringValueHolder);
stringValueHolder.addVetoers("approve:java.lang.Object:java.lang.Object:java.lang.Object",callback);
stringValueHolder.set(stringValue2);
stringValueHolder.set(stringValue);
Assert.assertEquals(stringValue2,stringValueHolder.get());
Assert.assertFalse(stringValue.equals(stringValueHolder.get()));
}
public void testRemoveApproverObjectString() {
String stringValue2 = "String Value 2";
CallbackObject callback = new CallbackObject(stringValueHolder);
stringValueHolder.addVetoers("approve:java.lang.Object:java.lang.Object:java.lang.Object",callback);
stringValueHolder.removeVetoers(callback);
stringValueHolder.set(stringValue2);
stringValueHolder.set(stringValue);
Assert.assertEquals(stringValue,stringValueHolder.get());
Assert.assertFalse(stringValue2.equals(stringValueHolder.get()));
}
public void finalize() throws Throwable {
stringValue = null;
integerValue = null;
stringValueHolder = null;
integerValueHolder = null;
super.finalize();
}
public class CallbackObject {
private final MutableValue valueModel;
public boolean notified = false;
public Object oldValue = null;
public Object newValue = null;
public CallbackObject(MutableValue valueModel) {
this.valueModel = valueModel;
}
public void notifyMe(Object sender, Object oldValue, Object newValue) {
this.oldValue = oldValue;
this.newValue = newValue;
Assert.assertEquals(this.valueModel,sender);
notified = true;
}
public boolean approve(Object sender, Object oldValue, Object newValue) {
this.oldValue = oldValue;
this.newValue = newValue;
Assert.assertEquals(this.valueModel,sender);
if (!newValue.equals(stringValue)) return true;
return false;
}
public void finalize() throws Throwable {
this.oldValue = null;
this.newValue = null;
super.finalize();
}
}
}