package com.scaleunlimited.cascading;
import junit.framework.Assert;
import org.junit.Test;
import com.scaleunlimited.cascading.BaseDatum;
import com.scaleunlimited.cascading.PayloadDatum;
import cascading.tuple.Fields;
import cascading.tuple.TupleEntry;
public class PayloadDatumTest {
@SuppressWarnings("serial")
private static class MyDatum extends PayloadDatum {
public static final String A_FN = BaseDatum.fieldName(MyDatum.class, "a");
public static final Fields FIELDS = new Fields(A_FN).append(BaseDatum.getSuperFields(MyDatum.class));
public MyDatum() {
super(FIELDS);
}
public MyDatum(TupleEntry tupleEntry) {
super(tupleEntry);
}
public MyDatum(String a) {
super(FIELDS);
setA(a);
}
public String getA() {
return _tupleEntry.getString(A_FN);
}
public void setA(String a) {
_tupleEntry.set(A_FN, a);
}
}
@Test
public void testFieldDefinitions() throws Exception {
Assert.assertEquals(2, MyDatum.FIELDS.size());
MyDatum.FIELDS.verifyContains(new Fields(MyDatum.A_FN));
Assert.assertEquals(MyDatum.FIELDS, new MyDatum().getFields());
}
@Test
public void testPayloadRoundTrip() throws Exception {
MyDatum d1 = new MyDatum("test");
d1.setPayloadValue("key", "value");
Assert.assertEquals("value", d1.getPayloadValue("key"));
TupleEntry te = d1.getTupleEntry();
MyDatum d2 = new MyDatum(te);
Assert.assertEquals("value", d2.getPayloadValue("key"));
}
@Test
public void testSettingTuple() throws Exception {
MyDatum d1 = new MyDatum("test");
d1.setPayloadValue("key", "value");
Assert.assertEquals("value", d1.getPayloadValue("key"));
MyDatum d2 = new MyDatum();
d1.setTuple(d2.getTuple());
Assert.assertNull(d1.getPayloadValue("key"));
}
@Test
public void testDirectCopyOfPayload() throws Exception {
MyDatum d1 = new MyDatum("test");
d1.setPayloadValue("key", "value");
MyDatum d2 = new MyDatum();
d2.setPayload(d1);
Assert.assertEquals("value", d2.getPayloadValue("key"));
// Make sure we've got a real copy
d1.setPayloadValue("key", "value2");
Assert.assertEquals("value", d2.getPayloadValue("key"));
}
}