package ch.vorburger.blueprints.data.tests; import static org.junit.Assert.*; import junit.framework.Assert; import org.junit.Test; import ch.vorburger.blueprints.data.DataObject; import ch.vorburger.blueprints.data.binding.SimpleBinding; import ch.vorburger.blueprints.data.binding.BindingException; /** * Tests for Binding. * * @author Michael Vorburger */ public class BindingTest { @Test public void testBinding() throws Exception { SimpleBinding b = new SimpleBinding(); b.addMappingFromTo("a.something", "c.somethingElse"); b.addMappingFromTo("b.somethingElse", "c.something"); TestDataObject a_fromObject = new TestDataObject(); a_fromObject.something = 27L; TestDataObject b_fromObject = new TestDataObject(); b_fromObject.somethingElse = 113L; TestDataObject c_toObject = new TestDataObject(); b.mapFromTo(SimpleBinding.newNamedDataObject("a", a_fromObject), SimpleBinding.newNamedDataObject("b", b_fromObject), SimpleBinding.newNamedDataObject("c", c_toObject)); // a & b should not have changed: Assert.assertEquals(new Long(27), a_fromObject.something); Assert.assertEquals(null, a_fromObject.somethingElse); Assert.assertEquals(null, b_fromObject.something); Assert.assertEquals(new Long(113), b_fromObject.somethingElse); // c should have been mapped: Assert.assertEquals(new Long(113), c_toObject.something); Assert.assertEquals(new Long(27), c_toObject.somethingElse); } @Test(expected=IllegalArgumentException.class) public void testBadBinding1() throws Exception { new SimpleBinding().addMappingFromTo("a.something", "c."); } @Test(expected=IllegalArgumentException.class) public void testBadBinding2() throws Exception { new SimpleBinding().addMappingFromTo("something", "c.somethingElse"); } @Test(expected=IllegalArgumentException.class) public void testBadBinding3() throws Exception { new SimpleBinding().addMappingFromTo("b.somethingElse", "something"); } private static class TestDataObject implements DataObject { Long something; Long somethingElse; @Override public Object get(String path) throws IllegalArgumentException { if (path.equals("something")) { return something; } else if (path.equals("somethingElse")) { return somethingElse; } throw new UnsupportedOperationException(path); } @Override public void set(String path, Object value) throws IllegalArgumentException { if (path.equals("something")) { this.something = (Long) value; } else if (path.equals("somethingElse")) { this.somethingElse = (Long) value; } else { throw new UnsupportedOperationException(path); } } @Override public <T> T get(String path, Class<T> type) throws IllegalArgumentException { throw new UnsupportedOperationException(); } } }