package net.ion.craken.node.convert.map;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import net.ion.craken.node.TransactionJob;
import net.ion.craken.node.WriteSession;
import net.ion.craken.node.crud.TestBaseCrud;
import net.ion.craken.node.crud.tree.impl.PropertyId;
import net.ion.craken.node.crud.tree.impl.PropertyValue;
public class TestToPropertyMap extends TestBaseCrud {
public void testToMapIsUnmodifiable() throws Exception {
session.tran(new TransactionJob<Void>() {
@Override
public Void handle(WriteSession wsession) {
wsession.root().child("/bleujin").property("name", "bleujin").property("age", 10) ;
return null ;
}
}).get() ;
Map<PropertyId, PropertyValue> map = session.pathBy("/bleujin").toMap();
assertEquals("bleujin", map.get(PropertyId.normal("name")).value()) ;
try {
map.put(PropertyId.normal("newkey"), PropertyValue.createPrimitive("newvalue")) ;
fail() ;
} catch(UnsupportedOperationException expect){} ;
}
public void testPropertyMap() throws Exception {
session.tran(new TransactionJob<Void>() {
@Override
public Void handle(WriteSession wsession) {
wsession.root().child("/bleujin").property("name", "bleujin").property("age", 10).append("age", 20) ;
return null ;
}
}).get() ;
Map<String, Object> map = session.pathBy("/bleujin").toPropertyMap(0);
assertEquals("bleujin", map.get("name")) ;
assertEquals(2, ((Set)map.get("age")).size()) ;
try {
map.put("newkey", "newvalue") ;
fail() ;
} catch(UnsupportedOperationException expect){} ;
}
public void testIncludeChild() throws Exception {
session.tran(new TransactionJob<Void>() {
@Override
public Void handle(WriteSession wsession) {
wsession.root().child("/bleujin").property("name", "bleujin").property("age", 10).append("age", 20)
.child("address").property("city", "seoul")
.child("grandchild") ;
return null ;
}
}).get() ;
Map<String, Object> map = session.pathBy("/bleujin").toPropertyMap(1);
Map<String, Object> addressMap = (Map<String, Object>) map.get("/address");
assertEquals(1, addressMap.size()) ;
Map<String, Object> gchildMap = (Map<String, Object>) addressMap.get("/grandchild");
assertEquals(true, gchildMap == null); // depth == 1
}
public void testMultipleChild() throws Exception {
session.tran(new TransactionJob<Void>() {
@Override
public Void handle(WriteSession wsession) {
wsession.root().child("/bleujin").property("name", "bleujin").property("age", 10).append("age", 20)
.child("address").property("city", "seoul").parent()
.child("pic").property("name", "bleujin.jpg") ;
return null ;
}
}).get() ;
Map<String, Object> map = session.pathBy("/bleujin").toPropertyMap(1);
Map<String, Object> addressMap = (Map<String, Object>) map.get("/address");
assertEquals(1, addressMap.size()) ;
Map<String, Object> picMap = (Map<String, Object>) map.get("/pic");
assertEquals(1, picMap.size()) ;
assertEquals("bleujin.jpg", picMap.get("name")) ;
}
public void testReference() throws Exception {
session.tran(new TransactionJob<Void>() {
@Override
public Void handle(WriteSession wsession) {
wsession.root().child("/bleujin").property("name", "bleujin").property("age", 10).append("age", 20)
.refTos("friends", "/hero")
.refTos("friends", "/jin")
.refTos("friends", "/notfound");
wsession.root().child("/hero").property("name", "hero") ;
wsession.root().child("/jin").property("name", "jin") ;
return null ;
}
}).get() ;
Map<String, Object> map = session.pathBy("/bleujin").toPropertyMap(1);
Set<Map<String, Object>> refs = (Set<Map<String, Object>>) map.get("@friends");
assertEquals(3, refs.size()) ;
final Iterator<Map<String, Object>> iter = refs.iterator();
assertEquals("hero", iter.next().get("name")) ;
assertEquals("jin", iter.next().get("name")) ;
assertEquals(true, iter.next().get("name") == null) ;
}
}