package gueei.binding.test;
import gueei.binding.Binder;
import gueei.binding.ISyntaxResolver.SyntaxResolveException;
import gueei.binding.IObservable;
import gueei.binding.InnerFieldObservable;
import gueei.binding.Observable;
import gueei.binding.Observer;
import gueei.binding.observables.StringObservable;
import java.util.ArrayList;
import java.util.Collection;
import android.test.AndroidTestCase;
@SuppressWarnings("rawtypes")
public class InnerFieldObservableTest extends AndroidTestCase {
// Simple get and set
public void testInnerField_OA_OB(){
InnerFieldObservable<?> ifo = new InnerFieldObservable("TestObservable.STRING");
ifo.createNodes(this);
assertEquals("test", ifo.get());
ifo._setObject("hello", new ArrayList<Object>());
assertEquals("hello", ifo.get());
}
// Field is readonly
public void testInnerField_OA_FB(){
InnerFieldObservable<?> ifo = new InnerFieldObservable("TestObservable.FIELD");
ifo.createNodes(this);
assertEquals("StringField", ifo.get());
ifo._setObject("hello", new ArrayList<Object>());
assertNotSame("hello", ifo.get());
}
// This is getting complicated
public void testInnerField_OA_OB_OC(){
InnerFieldObservable<?> ifo = new InnerFieldObservable("TestObservable.TESTB.STRINGB");
ifo.createNodes(this);
assertEquals("test", ifo.get());
ifo._setObject("hello", new ArrayList<Object>());
assertEquals("hello", ifo.get());
// Now modify B to see if it works
TestObservable.get().TESTB.set(new TestClassB());
assertEquals("test", ifo.get());
ifo._setObject("hello", new ArrayList<Object>());
assertEquals("hello", ifo.get());
// Now modify A to see
TestObservable.set(new TestClassA());
assertEquals("test", ifo.get());
}
// This is getting complicated
public void testInnerField_OA_OB_OC_OD(){
InnerFieldObservable<?> ifo = new InnerFieldObservable("TestObservable.TESTB.TESTC.STRINGC");
ifo.createNodes(this);
assertEquals("test", ifo.get());
ifo._setObject("hello", new ArrayList<Object>());
assertEquals("hello", ifo.get());
// Now modify B to see if it works
TestObservable.get().TESTB.set(new TestClassB());
assertEquals("test", ifo.get());
ifo._setObject("hello", new ArrayList<Object>());
assertEquals("hello", ifo.get());
// Now modify A to see
TestObservable.set(new TestClassA());
assertEquals("test", ifo.get());
}
// Observable A -> Field B -> Observable C
public void testInnerField_OA_FB_OC(){
InnerFieldObservable<?> ifo = new InnerFieldObservable("TestObservable.FIELDB.STRINGB");
ifo.createNodes(this);
assertEquals("test", ifo.get());
ifo._setObject("hello", new ArrayList<Object>());
assertEquals("hello", ifo.get());
}
public void testSyntaxResolver() throws SyntaxResolveException{
IObservable obs = Binder.getSyntaxResolver()
.constructObservableFromStatement(
getContext(), "TestObservable.TESTB.TESTC.STRINGC", this);
assertNotNull(obs);
assertEquals(String.class, obs.getType());
obs.set("hello");
assertEquals("hello", obs.get());
}
public final Observable<TestClassA> TestObservable =
new Observable<TestClassA>(TestClassA.class, new TestClassA());
public static class TestClassA{
public final Observable<TestClassB> TESTB =
new Observable<TestClassB>(TestClassB.class, new TestClassB());
public TestClassB FIELDB = new TestClassB();
public final StringObservable STRING = new StringObservable("test");
public String FIELD = "StringField";
}
public static class TestClassB{
public final StringObservable STRINGB = new StringObservable("test");
public final Observable<TestClassC> TESTC =
new Observable<TestClassC>(TestClassC.class, new TestClassC());
}
public static class TestClassC{
public final StringObservable STRINGC = new StringObservable("test");
}
}