package org.mongodb.morphia.mapping.primitives; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import org.bson.types.ObjectId; import org.junit.Assert; import org.junit.Test; import org.mongodb.morphia.TestBase; import org.mongodb.morphia.annotations.Id; import org.mongodb.morphia.mapping.MappingException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Uwe Schaefer, (us@thomas-daily.de) */ public class CharacterMappingTest extends TestBase { @Test public void emptyStringToPrimitive() { final Characters characters = testMapping("singlePrimitive", ""); Assert.assertEquals(0, characters.singlePrimitive); } @Test public void emptyStringToPrimitiveArray() { final Characters characters = testMapping("primitiveArray", ""); Assert.assertArrayEquals("".toCharArray(), characters.primitiveArray); } @Test public void emptyStringToWrapper() { final Characters characters = testMapping("singleWrapper", ""); Assert.assertEquals(new Character((char) 0), characters.singleWrapper); } @Test public void emptyStringToWrapperArray() { final Characters characters = testMapping("wrapperArray", ""); compare("", characters.wrapperArray); } @Test public void mapping() throws Exception { getMorphia().map(Characters.class); final Characters entity = new Characters(); entity.listWrapperArray.add(new Character[]{'1', 'g', '#'}); entity.listPrimitiveArray.add(new char[]{'1', 'd', 'z'}); entity.listWrapper.addAll(Arrays.asList('*', ' ', '\u8888')); entity.singlePrimitive = 'a'; entity.singleWrapper = 'b'; entity.primitiveArray = new char[]{'a', 'b'}; entity.wrapperArray = new Character[]{'X', 'y', 'Z'}; entity.nestedPrimitiveArray = new char[][]{{'5', '-'}, {'a', 'b'}}; entity.nestedWrapperArray = new Character[][]{{'*', '$', '\u4824'}, {'X', 'y', 'Z'}}; getDs().save(entity); final Characters loaded = getDs().get(entity); Assert.assertNotNull(loaded.id); Assert.assertArrayEquals(entity.listWrapperArray.get(0), loaded.listWrapperArray.get(0)); Assert.assertArrayEquals(entity.listPrimitiveArray.get(0), loaded.listPrimitiveArray.get(0)); Assert.assertEquals(entity.listWrapper, loaded.listWrapper); Assert.assertEquals(entity.singlePrimitive, loaded.singlePrimitive); Assert.assertEquals(entity.singleWrapper, loaded.singleWrapper); Assert.assertArrayEquals(entity.primitiveArray, loaded.primitiveArray); Assert.assertArrayEquals(entity.wrapperArray, loaded.wrapperArray); Assert.assertArrayEquals(entity.nestedPrimitiveArray, loaded.nestedPrimitiveArray); Assert.assertArrayEquals(entity.nestedWrapperArray, loaded.nestedWrapperArray); } @Test public void singleCharToPrimitive() { final Characters characters = testMapping("singlePrimitive", "a"); Assert.assertEquals('a', characters.singlePrimitive); } @Test public void singleCharToPrimitiveArray() { final Characters characters = testMapping("primitiveArray", "a"); Assert.assertArrayEquals("a".toCharArray(), characters.primitiveArray); getDs().save(characters); } @Test public void singleCharToWrapper() { final Characters characters = testMapping("singleWrapper", "a"); Assert.assertEquals(new Character('a'), characters.singleWrapper); } @Test public void singleCharToWrapperArray() { final Characters characters = testMapping("wrapperArray", "a"); compare("a", characters.wrapperArray); } @Test(expected = MappingException.class) public void stringToPrimitive() { final Characters characters = testMapping("singlePrimitive", "ab"); } @Test public void stringToPrimitiveArray() { final Characters characters = testMapping("primitiveArray", "abc"); Assert.assertArrayEquals("abc".toCharArray(), characters.primitiveArray); } @Test(expected = MappingException.class) public void stringToWrapper() { final Characters characters = testMapping("singleWrapper", "ab"); } @Test public void stringToWrapperArray() { final Characters characters = testMapping("wrapperArray", "abc"); compare("abc", characters.wrapperArray); } private void compare(final String abc, final Character[] wrapperArray) { Assert.assertEquals(abc.length(), wrapperArray.length); for (int i = 0; i < wrapperArray.length; i++) { Assert.assertEquals(abc.charAt(i), wrapperArray[i].charValue()); } } private Characters testMapping(final String field, final String value) { getMorphia().map(Characters.class); final DBCollection collection = getDs().getCollection(Characters.class); collection.insert(new BasicDBObject(field, value)); return getDs().find(Characters.class).get(); } public static class Characters { @Id private ObjectId id; private List<Character[]> listWrapperArray = new ArrayList<Character[]>(); private List<char[]> listPrimitiveArray = new ArrayList<char[]>(); private List<Character> listWrapper = new ArrayList<Character>(); private char singlePrimitive; private Character singleWrapper; private char[] primitiveArray; private Character[] wrapperArray; private char[][] nestedPrimitiveArray; private Character[][] nestedWrapperArray; } }