package net.minidev.json.testMapping;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.Map;
import java.util.TreeMap;

import net.minidev.json.JSONValue;

import org.junit.jupiter.api.Test;

public class TestMapPublic {
	@Test
	public void testObjInts() throws Exception {
		String s = "{\"vint\":[1,2,3]}";
		T1 r = JSONValue.parse(s, T1.class);
		assertEquals(3, r.vint[2]);
	}

	String MultiTyepJson = "{\"name\":\"B\",\"age\":120,\"cost\":12000,\"flag\":3,\"valid\":true,\"f\":1.2,\"d\":1.5,\"l\":12345678912345}";

	@Test
	public void testObjMixte() throws Exception {
		T2 r = JSONValue.parse(MultiTyepJson, T2.class);
		assertEquals("B", r.name);
		assertEquals(120, r.age);
		assertEquals(12000, r.cost);
		assertEquals(3, r.flag);
		assertEquals(true, r.valid);
		assertEquals(1.2F, r.f);
		assertEquals(1.5, r.d);
		assertEquals(12345678912345L, r.l);
	}

	@Test
	public void testObjMixtePrim() throws Exception {
		T3 r = JSONValue.parse(MultiTyepJson, T3.class);
		assertEquals("B", r.name);
		assertEquals(Short.valueOf((short) 120), r.age);
		assertEquals(Integer.valueOf(12000), r.cost);
		assertEquals(Byte.valueOf((byte) 3), r.flag);
		assertEquals(Boolean.TRUE, r.valid);
		assertEquals(1.2F, r.f);
		assertEquals(1.5, r.d);
		assertEquals(Long.valueOf(12345678912345L), r.l);
	}

	public static class T1 {
		public int[] vint;
	}

	public static class T2 {
		public String name;
		public short age;
		public int cost;
		public byte flag;
		public boolean valid;
		public float f;
		public double d;
		public long l;
	}

	public static class T3 {
		public String name;
		public Short age;
		public Integer cost;
		public Byte flag;
		public Boolean valid;
		public Float f;
		public Double d;
		public Long l;
	}

	public static class T123 {
		public T1 t1;
		public T2 t2;
		public T3 t3;
	}


	public static class T5 {
		public Map<String, String> data;
	}
	
	public static class T6 {
		public TreeMap<String, String> data;
	}

	
}
