/* * 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 = Integer.valueOf(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())); } @SuppressWarnings("deprecation") @Override 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; } @SuppressWarnings("deprecation") @Override public void finalize() throws Throwable { this.oldValue = null; this.newValue = null; super.finalize(); } } }