Package org.nutz.ioc.json

Source Code of org.nutz.ioc.json.SimpleJsonIocTest

package org.nutz.ioc.json;

import static org.junit.Assert.*;
import static org.nutz.ioc.json.Utils.A;
import static org.nutz.ioc.json.Utils.I;
import static org.nutz.ioc.json.Utils.J;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.junit.Test;
import org.nutz.ioc.Ioc;
import org.nutz.ioc.IocException;
import org.nutz.ioc.IocLoader;
import org.nutz.ioc.ObjectLoadException;
import org.nutz.ioc.impl.NutIoc;
import org.nutz.ioc.json.pojo.Animal;
import org.nutz.ioc.json.pojo.AnimalRace;
import org.nutz.ioc.json.pojo.IocSelf;
import org.nutz.ioc.json.pojo.IocTO00;
import org.nutz.ioc.loader.json.JsonLoader;
import org.nutz.ioc.loader.map.MapLoader;
import org.nutz.lang.Streams;

public class SimpleJsonIocTest {

    @Test
    public void test_2darray_by_map_iocvalue() {
        Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>();

        Map<String, Object> objMap = new HashMap<String, Object>();
        String[][] strss = new String[2][2];
        strss[0][0] = "a";
        strss[0][1] = "b";
        strss[1][0] = "c";
        strss[1][1] = "d";
        objMap.put("args", new Object[]{strss});

        map.put("obj", objMap);
        Ioc ioc = new NutIoc(new MapLoader(map));

        IocTO00 obj = ioc.get(IocTO00.class, "obj");
        assertEquals(2, obj.getStrss().length);
        assertEquals(2, obj.getStrss()[0].length);
        assertEquals("a", obj.getStrss()[0][0]);
        assertEquals("b", obj.getStrss()[0][1]);
        assertEquals("c", obj.getStrss()[1][0]);
        assertEquals("d", obj.getStrss()[1][1]);
    }

    @Test
    public void test_2darray_iocvalue() {
        Ioc ioc = I("obj:{args:[[['a','b'],['c','d']]]}");
        IocTO00 obj = ioc.get(IocTO00.class, "obj");
        assertEquals(2, obj.getStrss().length);
        assertEquals(2, obj.getStrss()[0].length);
        assertEquals("a", obj.getStrss()[0][0]);
        assertEquals("b", obj.getStrss()[0][1]);
        assertEquals("c", obj.getStrss()[1][0]);
        assertEquals("d", obj.getStrss()[1][1]);
    }

    @Test
    public void test_refer_self() {
        Ioc ioc = I(J("fox", "name:'Fox',another:{refer:'fox'}"));
        Animal f = ioc.get(Animal.class, "fox");
        assertEquals("Fox", f.getName());
        assertTrue(f == f.getAnother());
    }

    @Test
    public void test_null_json_file() {
        IocLoader loader = new JsonLoader("org/nutz/ioc/json/empty.js");
        Ioc ioc = new NutIoc(loader);
        assertEquals(0, ioc.getNames().length);
    }

    @Test
    public void test_normal() {
        Animal a = A("age:23,name:'monkey',race:'MAMMAL'");
        assertEquals(23, a.getAge());
        assertEquals("monkey", a.getName());
        assertEquals(AnimalRace.MAMMAL, a.getRace());
    }

    @Test
    public void test_singleon() {
        Ioc ioc = I(J("fox", "name:'Fox'"));
        Animal f = ioc.get(Animal.class, "fox");
        Animal f2 = ioc.get(Animal.class, "fox");
        assertTrue(f == f2);

        ioc = I(J("fox", "singleton:false, fields: {name:'Fox'}"));
        Animal f3 = ioc.get(Animal.class, "fox");
        Animal f4 = ioc.get(Animal.class, "fox");
        assertFalse(f3 == f4);
    }

    @Test
    public void test_refer() {
        Ioc ioc = I(J("fox", "type:'org.nutz.ioc.json.pojo.Animal',fields:{name:'Fox'}"),
                    J("rabit", "name:'Rabit',enemies:[{refer:'fox'},{refer:'fox'}]"));
        Animal r = ioc.get(Animal.class, "rabit");
        Animal f = ioc.get(Animal.class, "fox");
        assertEquals(2, r.getEnemies().length);
        assertTrue(f == r.getEnemies()[0]);
        assertTrue(f == r.getEnemies()[1]);
        assertEquals("Fox", f.getName());
        assertEquals("Rabit", r.getName());
    }

    @Test
    public void test_array_and_refer() {
        Ioc ioc = I(J("fox", "name:'Fox'"),
                    J(    "rabit",
                        "name:'Rabit',enemies:[{refer:'fox:org.nutz.ioc.json.pojo.Animal'},null]"));

        Animal r = ioc.get(Animal.class, "rabit");
        Animal f = ioc.get(Animal.class, "fox");
        assertEquals(2, r.getEnemies().length);
        assertTrue(f == r.getEnemies()[0]);
        assertEquals("Fox", f.getName());
        assertEquals("Rabit", r.getName());
        assertNull(r.getEnemies()[1]);
    }

    @Test
    public void test_env() {
        Animal f = A("name:{env:'PATH'},misc:[{env:'PATH'}]");
        assertTrue(f.getName().length() > 0);
        assertEquals(f.getName(), f.getMisc().get(0).toString());
    }

    @Test
    public void test_sys() {
        Properties properties = System.getProperties();
        properties.put("sysA", "XX");
        properties.put("sysP", "ZZZ");
        Animal f = A("name:{sys:'sysA'},misc:[{sys:'sysP'}]");
        assertEquals("XX", f.getName());
        assertEquals("ZZZ", f.getMisc().get(0).toString());
    }

    @Test
    public void test_file() {
        Animal f = A("misc:[{file:'org/nutz/ioc/json/pojo/Animal.class'}]");
        assertEquals("Animal.class", ((File) f.getMisc().get(0)).getName());
    }

    @Test
    public void test_inner() {
        Animal f = A("enemies: [ {type:'org.nutz.ioc.json.pojo.Animal', fields: {name:'xxx'}} ]");
        assertEquals("xxx", f.getEnemies()[0].getName());
    }

    @Test
    public void test_map() {
        Animal f = A("map : {asia:34, europe: 45}");
        assertEquals(34, f.getMap().get("asia").intValue());
        assertEquals(45, f.getMap().get("europe").intValue());

        f = A("relations: {a: {type:'org.nutz.ioc.json.pojo.Animal', fields: {name:'AAA'}}"
                + ",b: {type:'org.nutz.ioc.json.pojo.Animal', fields: {name:'BBB'}}}");
        assertEquals(2, f.getRelations().size());
        assertEquals("AAA", f.getRelations().get("a").getName());
        assertEquals("BBB", f.getRelations().get("b").getName());
    }

    @Test
    public void test_java_simple() {
        Ioc ioc = I(J("fox", "name:{java: '@Name.toUpperCase()'}, age:{java:'@Name.length()'}"));
        Animal fox = ioc.get(Animal.class, "fox");
        assertEquals("FOX", fox.getName());
        assertEquals(3, fox.getAge());
    }

    @Test
    public void test_java_with_arguments() {
        Ioc ioc = I(J("fox", "name:'Fox',age:10"),
                    J("wolf", "name:{java:'$fox.showName(\"_\", 2, \"W\")'},age:{java:'$fox.age'}"));
        Animal fox = ioc.get(Animal.class, "fox");
        Animal wolf = ioc.get(Animal.class, "wolf");
        assertEquals("Fox", fox.getName());
        assertEquals(fox.getAge(), wolf.getAge());
        assertEquals("__W", wolf.getName());
    }

    @Test
    public void test_parent() {
        Ioc ioc = I(J("fox", "name:'P',age:10"), J("f2", "parent:'fox',fields:{age:5}"));
        Animal fox = ioc.get(Animal.class, "fox");
        assertEquals("P", fox.getName());
        assertEquals(10, fox.getAge());
        Animal f2 = ioc.get(Animal.class, "f2");
        assertEquals("P", f2.getName());
        assertEquals(5, f2.getAge());
    }

    @Test
    public void test_muilt_parent() {
        Ioc ioc = I(J("fox", "name:'P',age:10"), J("f2", "parent:'fox'"), J("f3", "parent:'f2'"));
        Animal f3 = ioc.get(Animal.class, "f3");
        assertEquals(10, f3.getAge());
    }

    @Test
    public void test_create_by_args() {
        Ioc ioc = I(J("fox", "age:10"), J("xb", "parent:'fox',args:['XiaoBai']"));
        Animal xb = ioc.get(Animal.class, "xb");
        assertEquals("XiaoBai", xb.getName());
    }

    @Test(expected = IocException.class)
    public void test_break_parent() {
        Ioc ioc = I(J("f2", "parent:'f3'"), J("f3", "parent:'f2'"));
        ioc.get(Animal.class, "f3");
    }

    @Test(expected = IocException.class)
    public void test_break_parent2() {
        Ioc ioc = I(J("fox", "name:'P',age:10"), J("f2", "parent:'x'"), J("f3", "parent:'y'"));
        ioc.get(Animal.class, "f3");
    }

    @Test
    public void test_load_from_dir() throws ObjectLoadException {
        IocLoader loader = new JsonLoader("org/nutz/ioc/json/");
        assertTrue(loader.getName().length > 0);
    }

    @Test
    public void test_load_from_reader() throws ObjectLoadException {
        IocLoader loader = new JsonLoader(Streams.fileInr("org/nutz/ioc/json/main.js"));
        assertTrue(loader.getName().length > 0);
    }

    @Test
    public void test_get_ioc_self() {
        Ioc ioc = I(J("iocV", "type:'org.nutz.ioc.json.pojo.IocSelf',fields:{ioc:{refer : '$iOc'}}"));
        assertEquals(ioc, ioc.get(IocSelf.class, "iocV").getIoc());
    }
}
TOP

Related Classes of org.nutz.ioc.json.SimpleJsonIocTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.