package org.mongodb.morphia.converters;
import org.junit.Assert;
import org.junit.Test;
import org.mongodb.morphia.TestBase;
import org.mongodb.morphia.query.Query;
import org.mongodb.morphia.testutil.TestEntity;
import java.util.EnumSet;
/**
* @author Uwe Schaefer, (us@thomas-daily.de)
*/
public class EnumSetTest extends TestBase {
@Test
public void testNastyEnumPersistence() throws Exception {
NastyEnumEntity n = new NastyEnumEntity();
getDs().save(n);
n = getDs().get(n);
Assert.assertNull(n.isNull);
Assert.assertNotNull(n.empty);
Assert.assertNotNull(n.in);
Assert.assertNotNull(n.out);
Assert.assertEquals(0, n.empty.size());
Assert.assertEquals(3, n.in.size());
Assert.assertEquals(1, n.out.size());
Assert.assertTrue(n.in.contains(NastyEnum.B));
Assert.assertTrue(n.in.contains(NastyEnum.C));
Assert.assertTrue(n.in.contains(NastyEnum.D));
Assert.assertFalse(n.in.contains(NastyEnum.A));
Assert.assertTrue(n.out.contains(NastyEnum.A));
Assert.assertFalse(n.out.contains(NastyEnum.B));
Assert.assertFalse(n.out.contains(NastyEnum.C));
Assert.assertFalse(n.out.contains(NastyEnum.D));
Query<NastyEnumEntity> q = getDs().find(NastyEnumEntity.class).filter("in", NastyEnum.C);
Assert.assertEquals(1, q.count());
q = getDs().find(NastyEnumEntity.class).filter("out", NastyEnum.C);
Assert.assertEquals(0, q.count());
}
public enum NastyEnum {
A {
@Override
public String toString() {
return "Never use toString for other purposes than debugging";
}
},
B {
public String toString() {
return "Never use toString for other purposes than debugging ";
}
},
C,
D
}
public static class NastyEnumEntity extends TestEntity {
private final EnumSet<NastyEnum> in = EnumSet.of(NastyEnum.B, NastyEnum.C, NastyEnum.D);
private final EnumSet<NastyEnum> out = EnumSet.of(NastyEnum.A);
private final EnumSet<NastyEnum> empty = EnumSet.noneOf(NastyEnum.class);
private EnumSet<NastyEnum> isNull;
}
}