package com.codiform.moo;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNotSame;
import org.junit.Assert;
import org.junit.Test;
import com.codiform.moo.domain.Ordinal;
import com.codiform.moo.domain.OrdinalDto;
/**
* Testing how properties that contain collection classes are translated.
*/
public class ArrayPropertyTranslationTest {
/**
* Defensively copies arrays.
*/
@Test
public void testTranslateCopiesArrays() {
String[] before = new String[] { "a", "b", "c" };
StringsDto dto = new Moo().translate(new StringsDomain(
before), StringsDto.class);
assertArrayEquals(before, dto.getStrings());
assertNotSame(before, dto.getStrings());
assertArrayEquals(before, dto.getStrings());
}
/**
* Safely copy nulls inside arrays.
*/
@Test
public void testCopiesNullsInsideCollections() {
String[] before = new String[] { "a", "b", null, "c" };
StringsDto dto = new Moo().translate(new StringsDomain(
before), StringsDto.class);
assertArrayEquals(before, dto.getStrings());
}
@Test
public void testTranslatesArrayContents() {
Ordinals ordinals = new Ordinals(new Ordinal(1, "first"), new Ordinal(
2, "second"), new Ordinal(3, "third"));
OrdinalsDto ordinalsDto = new Moo().translate(ordinals,
OrdinalsDto.class);
Assert.assertNotNull(ordinalsDto.getOrdinals());
Assert.assertEquals(ordinals.getOrdinals().length, ordinalsDto
.getOrdinals().length);
for (int index = 0; index < ordinals.getOrdinals().length; index++) {
Ordinal ordinal = ordinals.getOrdinals()[index];
OrdinalDto ordinalDto = ordinalsDto.getOrdinals()[index];
Assert.assertEquals(ordinal.getRank(), ordinalDto.getRank());
Assert.assertEquals(ordinal.getName(), ordinalDto.getName());
}
}
public static class Ordinals {
private Ordinal[] ordinals;
public Ordinals(Ordinal... ordinals) {
this.ordinals = ordinals;
}
public Ordinal[] getOrdinals() {
return ordinals;
}
}
public static class OrdinalsDto {
private OrdinalDto[] ordinals;
public OrdinalDto[] getOrdinals() {
return ordinals;
}
}
public static class StringsDomain {
private String[] strings;
public StringsDomain(String[] strings) {
this.strings = strings;
}
public String[] getStrings() {
return strings;
}
}
public static class StringsDto {
private String[] strings;
public String[] getStrings() {
return strings;
}
}
}