Package org.nutz.mapl

Source Code of org.nutz.mapl.MaplTest

package org.nutz.mapl;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.junit.Test;
import org.nutz.json.Abc;
import org.nutz.json.Json;
import org.nutz.json.JsonFormat;
import org.nutz.lang.Lang;
import org.nutz.lang.Streams;

/**
* MapList测试
*
* @author juqkai(juqkai@gmail.com)
*/
public class MaplTest {

    /**
     * 测试MAP提取
     */
    @Test
    public void cellTest() {
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/person.txt"));
        assertEquals("dtri", Mapl.cell(dest, "company.name"));
        assertEquals("Dao", Mapl.cell(dest, "company.creator.name"));
    }

    /**
     * 测试提取LIST下的值
     */
    @Test
    public void cellArrayTest() {
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        assertEquals("1", Mapl.cell(dest, "users[0].name"));
        assertEquals("2", Mapl.cell(dest, "people[1].name"));
    }

    /**
     * 测试提取LIST下的值
     */
    @Test
    public void cellArrayTest1() {
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        assertEquals("1", Mapl.cell(dest, "users.0.name"));
        assertEquals("2", Mapl.cell(dest, "people.1.name"));
    }

    /**
     * 测试提取LIST
     */
    @Test
    public void cellArrayTest2() {
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        assertTrue(Mapl.cell(dest, "users") instanceof List);
        List<?> list = (List<?>) Mapl.cell(dest, "users");
        assertEquals(2, list.size());
    }

    /**
     * 测试根就是LIST的情况
     */
    @Test
    public void cellArrayTest3() {
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        assertTrue(Mapl.cell(dest, "users") instanceof List);
        List<?> list = (List<?>) Mapl.cell(dest, "users");
        assertEquals("1", Mapl.cell(list, "[0].name"));
    }

    /**
     * 包含过滤测试
     */
    @Test
    public void includeFilterConvertTest() {
        List<String> paths = new ArrayList<String>();
        paths.add("users[].name");
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        Object obj = Mapl.includeFilter(dest, paths);
        assertNull(Mapl.cell(obj, "people"));
        assertEquals("1", Mapl.cell(obj, "users[0].name"));
    }

    /**
     * 排除过滤测试
     */
    @Test
    public void excludeFilterConvertTest() {
        List<String> paths = new ArrayList<String>();
        paths.add("users[].name");
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        Object obj = Mapl.excludeFilter(dest, paths);
        assertNull(Mapl.cell(obj, "users[0].name"));
        assertEquals(12, Mapl.cell(obj, "users[0].age"));
    }

    /**
     * 排除过滤测试
     */
    @Test
    public void excludeFilterConvertTest2() {
        List<String> paths = new ArrayList<String>();
        paths.add("users");
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        Object obj = Mapl.excludeFilter(dest, paths);
        assertNull(Mapl.cell(obj, "users"));
        assertEquals(12, Mapl.cell(obj, "people[0].age"));
    }

    /**
     * 对象转MapList测试
     */
    @Test
    public void objCompileTest() {
        Abc abc = new Abc();
        abc.id = 1;
        abc.name = "jk";
        Object obj = Mapl.toMaplist(abc);
        assertTrue(obj instanceof Map);
        assertEquals(1, Mapl.cell(obj, "id"));
        assertEquals("jk", Mapl.cell(obj, "name"));
    }

    /**
     * 对象转MapList测试
     */
    @Test
    public void objCompileTest2() {
        A a1 = new A();
        a1.name = "a1";
        A a2 = new A();
        a2.name = "a2";
        B b = new B();
        a2.b = b;
        A a3 = new A();
        a3.name = "a3";

        C c = new C();
        c.mylist = new ArrayList<A>();
        c.mylist.add(a1);
        c.mylist.add(a2);
        c.mylist.add(a3);

        String abcJson = Json.toJson(c);
        Object abc = Json.fromJson(abcJson);
        C c2 = Mapl.maplistToT(abc, C.class);

        assertTrue(c.mylist.size() == c2.mylist.size());
        assertTrue(c.mylist.get(0).name.equals(c2.mylist.get(0).name));
        assertTrue(c.mylist.get(1).name.equals(c2.mylist.get(1).name));
        assertTrue(c.mylist.get(2).name.equals(c2.mylist.get(2).name));
        assertTrue(c.mylist.get(1).b.name.equals(c2.mylist.get(1).b.name));
    }

    /**
     * 对象转MapList测试
     */
    @Test
    public void objCompileArrayTest() {
        Abc abc = new Abc();
        abc.id = 1;
        abc.name = "jk";
        Abc b = new Abc();
        b.id = 2;
        b.name = "juqkai";
        List<Abc> list = new ArrayList<Abc>();
        list.add(abc);
        list.add(b);

        Object obj = Mapl.toMaplist(list);
        assertTrue(obj instanceof List);
        assertEquals(1, Mapl.cell(obj, "[0].id"));
        assertEquals("juqkai", Mapl.cell(obj, "1.name"));
    }

    /**
     * 对象转MapList循环引用测试
     */
    @Test
    public void objCompileCircularReferenceTest() {
        A a = new A();
        B b = new B();
        a.b = b;
        b.a = a;

        Object obj = Mapl.toMaplist(a);
        assertTrue(obj instanceof Map);
        assertNotNull(Mapl.cell(obj, "b"));
        assertEquals("b", Mapl.cell(obj, "b.name"));
        assertEquals("a", Mapl.cell(obj, "b.a.name"));
        assertEquals(Mapl.cell(obj, "b.a.b"), Mapl.cell(obj, "b"));
    }

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /**
     * 结构转换测试
     */
    /**
     * 简单转换
     */
    @Test
    public void structureConvertSimple() {
        String json = "{'name':'jk', 'age':12}";
        String model = "{'name':'姓名', 'age':'年龄'}";
        String dest = "{\"姓名\":\"jk\",\"年龄\":12}";
        Object obj = Mapl.convert(Json.fromJson(Lang.inr(json)), Lang.inr(model));
        assertEquals("jk", Mapl.cell(obj, "姓名"));
        assertEquals(12, Mapl.cell(obj, "年龄"));
        assertEquals(dest, Json.toJson(obj, new JsonFormat()));
    }

    /**
     * 数组转换
     */
    @Test
    public void structureConvertSimpleArray() {
        String json = "{'user':[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]}";
        String model = "{'user':[{'name':'user[].姓名', 'age':'user[].年龄'}]}";
        Object obj = Mapl.convert(Json.fromJson(Lang.inr(json)), Lang.inr(model));
        assertEquals("jk", Mapl.cell(obj, "user[0].姓名"));
        assertEquals("nutz", Mapl.cell(obj, "user[1].姓名"));
        assertEquals(12, Mapl.cell(obj, "user[0].年龄"));
        assertEquals(5, Mapl.cell(obj, "user[1].年龄"));
    }

    /**
     * 多路径转换
     */
    @Test
    public void structureConvertMultiPath() {
        String json = "{'user':[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]}";
        String model = "{'user':[{'name':['user[].姓名', 'people[].name'], 'age':['user[].年龄', 'people[].age']}]}";
        Object obj = Mapl.convert(Json.fromJson(Lang.inr(json)), Lang.inr(model));
        assertEquals("jk", Mapl.cell(obj, "user[0].姓名"));
        assertEquals("nutz", Mapl.cell(obj, "user[1].姓名"));
        assertEquals("jk", Mapl.cell(obj, "people[0].name"));
        assertEquals(5, Mapl.cell(obj, "people[1].age"));
    }

    /**
     * 根路径为Array的转换
     */
    @Test
    public void structureConvertRoot2Array() {
        String json = "[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]";
        String model = "[{'name':['user[].姓名', 'people[].name'], 'age':['user[].年龄', 'people[].age']}]";
        String dest = "{\"people\":[{\"age\":12,\"name\":\"jk\"}, {\"age\":5,\"name\":\"nutz\"}],\"user\":[{\"姓名\":\"jk\",\"年龄\":12}, {\"姓名\":\"nutz\",\"年龄\":5}]}";
        Object obj = Mapl.convert(Json.fromJson(Lang.inr(json)), Lang.inr(model));
        assertEquals("jk", Mapl.cell(obj, "user[0].姓名"));
        assertEquals("nutz", Mapl.cell(obj, "user[1].姓名"));
        assertEquals("jk", Mapl.cell(obj, "people[0].name"));
        assertEquals(5, Mapl.cell(obj, "people[1].age"));
        assertEquals(dest, Json.toJson(obj, new JsonFormat()));
    }

    /**
     * Array转换成根array结构
     */
    @Test
    public void structureConvertArray2Root() {
        String json = "{'user':[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]}";
        String model = "{'user':[{'name':['[].name'], 'age':'[].age'}]}";
        String dest = "[{\"age\":12,\"name\":\"jk\"}, {\"age\":5,\"name\":\"nutz\"}]";
        Object obj = Mapl.convert(Json.fromJson(Lang.inr(json)), Lang.inr(model));
        assertEquals("jk", Mapl.cell(obj, "[0].name"));
        assertEquals(5, Mapl.cell(obj, "[1].age"));
        assertEquals(dest, Json.toJson(obj, new JsonFormat()));
    }

    /**
     * 添加元素到mapl中
     */
    @Test
    public void addItemTest() {
        String json = "{'user':[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]}";
        Object obj = Json.fromJson(json);
        Mapl.put(obj, "user[0].test", "test");
        assertEquals("test", Mapl.cell(obj, "user[0].test"));
    }

    /**
     * 删除元素到mapl中
     */
    @Test
    public void delItemTest() {
        String json = "{'user':[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]}";
        Object obj = Json.fromJson(json);
        Mapl.del(obj, "user[0].age");
        assertNull(Mapl.cell(obj, "user[0].age"));
        assertEquals(1, ((Map<?, ?>) Mapl.cell(obj, "user[0]")).size());
    }

    /**
     * 修改元素到mapl中
     */
    @Test
    public void updateItemTest() {
        String json = "{'user':[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]}";
        Object obj = Json.fromJson(json);
        Mapl.update(obj, "user[0].name", "test");
        assertEquals("test", Mapl.cell(obj, "user[0].name"));
    }

    @Test
    public void issue243Test() {
        String json = "{'user':[{'name':'jk', 'age':12},{'name':'nutz', 'age':5}]}";
        Object obj = Json.fromJson(json);
        Object item = Mapl.cell(obj, "user[]");
        assertFalse(item instanceof List);
        assertTrue(item instanceof Map);
    }

    @Test
    public void issue243Test2() {
        List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

        HashMap<String, Object> map = new HashMap<String, Object>();

        List<String> items = new LinkedList<String>();
        items.add(new String("aa"));
        items.add(new String("bb"));

        map.put("id", 0);
        map.put("items", items);

        list.add(map);

        assertEquals(Mapl.cell(list, "[0].items.0"), "aa");
        assertTrue(Mapl.cell(list, "[0].items[0]").equals("aa"));
        assertTrue(Mapl.cell(list, "[0].items[1]").equals("bb"));
        assertTrue(Mapl.cell(list, "[0].items[]").equals("aa"));
        assertTrue(Mapl.cell(list, "[0].items").equals(items));
    }

    @Test
    public void testIssue322() {
        String json = "{name:'nutz', age:12, address:[{area:1,name:'abc'},{area:2,name:'123'}]}";
        Object obj = Json.fromJson(json);
        Object newobj = Mapl.excludeFilter(obj, Lang.list("age", "address[].area"));
        JsonFormat jf = new JsonFormat(true);
        assertEquals("{\"address\":[{\"name\":\"abc\"}, {\"name\":\"123\"}],\"name\":\"nutz\"}",
                     Json.toJson(newobj, jf));
    }

    /**
     * 排除过滤测试,过滤多个项的内容
     */
    @Test
    public void excludeFilterConvertTest_MultiplePath1() {
        List<String> paths = new ArrayList<String>();
        paths.add("users[].name");
        paths.add("people[].age");
        Object dest = Json.fromJson(Streams.fileInr("org/nutz/json/mateList.txt"));
        Object obj = Mapl.excludeFilter(dest, paths);
        assertNotNull(Mapl.cell(obj, "users"));
        assertEquals(12, Mapl.cell(obj, "users[0].age"));
        assertEquals("1", Mapl.cell(obj, "people[0].name"));
    }

    /**
     * 排除过滤测试,过滤多个项的内容。这是来自手册上的例子
     */
    @Test
    public void excludeFilterConvertTest_MultiplePath2() {
        String json = "{name:'nutz', age:12, address:[{area:1,name:'abc'},{area:2,name:'123'}]}";
        Object obj = Json.fromJson(json);
        List<String> list = new ArrayList<String>();
        list.add("age");
        list.add("address[].area");
        Object newobj = Mapl.excludeFilter(obj, list);
        assertNull(Mapl.cell(newobj, "age"));
        assertEquals("nutz", Mapl.cell(newobj, "name"));
        assertNull(Mapl.cell(newobj, "address[0].area"));
        assertEquals("abc", Mapl.cell(newobj, "address[0].name"));
    }

}
TOP

Related Classes of org.nutz.mapl.MaplTest

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.