package org.nutz.ioc.json;
import java.util.Map;
import org.junit.Test;
import org.nutz.ioc.Ioc2;
import org.nutz.ioc.ObjectProxy;
import org.nutz.ioc.impl.ScopeContext;
import org.nutz.ioc.json.pojo.Animal;
import static org.junit.Assert.*;
import static org.nutz.ioc.json.Utils.*;
public class ScopeJsonIocTest {
@Test
public void test_simple_scope() {
Ioc2 ioc = I( J("f1", "scope:'app',fields:{name:'F1'}"),
J("f2", "scope:'MyScope',fields:{name:'F2'}"));
Animal f1 = ioc.get(Animal.class, "f1");
assertEquals("F1", f1.getName());
Animal f2 = ioc.get(Animal.class, "f2");
assertEquals("F2", f2.getName());
Animal f22 = ioc.get(Animal.class, "f2");
assertEquals("F2", f22.getName());
assertFalse(f2 == f22);
ScopeContext ic = new ScopeContext("MyScope");
Map<String, ObjectProxy> map = ic.getObjs();
f2 = ioc.get(Animal.class, "f2", ic);
assertEquals("F2", f2.getName());
f22 = ioc.get(Animal.class, "f2", ic);
assertEquals("F2", f22.getName());
assertTrue(f2 == f22);
assertEquals(1, map.size());
ioc.get(Animal.class, "f1", ic);
assertEquals(1, map.size());
}
@Test
public void test_refer_from_diffenent_scope(){
Ioc2 ioc = I( J("f1", "type : 'org.nutz.ioc.json.pojo.Animal' , scope:'app',fields:{name:'F1'}"),
J("f2", "type : 'org.nutz.ioc.json.pojo.Animal' , scope:'MyScope',fields:{name:{refer : 'f3'}}"),
J("f3", "type : 'org.nutz.ioc.json.pojo.Animal' , scope:'MyScope'}"));
ioc.get(null, "f2");
}
}