package org.test4j.json.decoder.base;
import java.util.HashMap;
import java.util.Map;
import org.test4j.json.JSON;
import org.test4j.json.decoder.PoJoDecoder;
import org.test4j.json.encoder.beans.test.User;
import org.test4j.json.helper.JSONArray;
import org.test4j.json.helper.JSONFeature;
import org.test4j.json.helper.JSONMap;
import org.test4j.testng.Test4J;
import org.testng.annotations.Test;
@SuppressWarnings({ "serial" })
@Test(groups = { "test4j", "json" })
public class MapPoJoBaseDecoderTest extends Test4J {
@Test
public void testDecode() {
JSONMap json = new JSONMap() {
{
this.putJSON(JSONFeature.ClazzFlag, "org.test4j.json.encoder.beans.test.User@a123b");
this.putJSON("name", "darui.wu");
}
};
Map<String, Object> references = new HashMap<String, Object>();
User user = (User) PoJoDecoder.toPOJO.decode(json, User.class, references);
want.object(user).propertyEq("name", "darui.wu");
want.map(references).hasEntry("@a123b", user);
}
@Test(description = "json数组,数组的值指向同一个对象")
public void testDecode_withRefObj() {
User[] t = new User[2];
System.out.println(t.getClass().getName());
JSONMap json = new JSONMap() {
{
this.putJSON(JSONFeature.ClazzFlag, "[Lorg.test4j.json.encoder.beans.test.User;@01");
this.putJSON(JSONFeature.ValueFlag, new JSONArray() {
{
this.add(new JSONMap() {
{
this.putJSON(JSONFeature.ClazzFlag, "org.test4j.json.encoder.beans.test.User@11");
this.putJSON("name", "darui.wu");
}
});
this.add(new JSONMap() {
{
this.putJSON(JSONFeature.ReferFlag, "@11");
}
});
}
});
}
};
Map<String, Object> references = new HashMap<String, Object>();
User[] users = JSON.toObject(json, references);
want.array(users).sizeEq(2).propertyEq("name", new String[] { "darui.wu", "darui.wu" });
want.object(users[0]).same(users[1]);
}
}