package com.gzzm.lobster.common;

import com.fasterxml.jackson.core.type.TypeReference;
import org.junit.Test;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.*;

/**
 * JsonUtil 基本序列化与反序列化一致性。
 */
public class JsonUtilTest {

    @Test
    public void roundTripMap() {
        Map<String, Object> in = new LinkedHashMap<>();
        in.put("a", 1);
        in.put("b", "text");
        in.put("c", Arrays.asList("x", "y"));
        String json = JsonUtil.toJson(in);
        Map<String, Object> out = JsonUtil.fromJsonToMap(json);
        assertEquals(1, ((Number) out.get("a")).intValue());
        assertEquals("text", out.get("b"));
        assertEquals(2, ((List<?>) out.get("c")).size());
    }

    @Test
    public void nullOmitted() {
        Map<String, Object> m = new LinkedHashMap<>();
        m.put("keep", "ok");
        m.put("skip", null);
        String json = JsonUtil.toJson(m);
        assertFalse(json.contains("skip"));
        assertTrue(json.contains("keep"));
    }

    @Test
    public void emptyJsonReturnsEmptyMap() {
        Map<String, Object> out = JsonUtil.fromJsonToMap("");
        assertTrue(out.isEmpty());
    }

    @Test
    public void typeReferenceSupportsGenerics() {
        String json = "[{\"k\":1}]";
        List<Map<String, Integer>> out = JsonUtil.fromJson(json, new TypeReference<List<Map<String, Integer>>>() {});
        assertEquals(1, out.size());
        assertEquals(Integer.valueOf(1), out.get(0).get("k"));
    }
}
