TestNavi.java

package net.minidev.json.test;

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

import net.minidev.json.JSONAwareEx;
import net.minidev.json.JSONNavi;
import org.junit.jupiter.api.Test;

public class TestNavi {
  @Test
  public void testNaviWrite() {
    JSONNavi<JSONAwareEx> nav = JSONNavi.newInstance();
    nav.set("name", "jhone")
        .set("age", 42)
        .at("childName")
        .add("fifi", "riri", "loulou")
        .up()
        .at("cat")
        .set("color", "red");
    String s1 =
        "{\"name\":\"jhone\",\"age\":42,\"childName\":[\"fifi\",\"riri\",\"loulou\"],\"cat\":{\"color\":\"red\"}}";
    String s2 = nav.toString();
    assertEquals(s1, s2);
  }

  @Test
  public void testNaviWrite2() {
    JSONNavi<JSONAwareEx> nav = JSONNavi.newInstance();
    nav.at("name")
        .set("toto")
        .up()
        .set("tutu", "V2")
        .at("size")
        .set("width", 10)
        .set("higth", 35)
        .up(3)
        .set("FinUp", 1)
        .at("array")
        .add(0, 1, 2, 3, 4, 5);
    nav.at(-1);
    assertEquals("/array[5]", nav.getJPath());
    String s1 =
        "{'name':'toto','tutu':'V2','size':{'width':10,'higth':35},'FinUp':1,'array':[0,1,2,3,4,5]}"
            .replace('\'', '"');
    String s2 = nav.toString();
    assertEquals(s1, s2);
  }

  @Test
  public void testNaviRead() {
    String json = "{name:foo,str:null,ar:[1,2,3,4]}";
    JSONNavi<JSONAwareEx> nav = new JSONNavi<JSONAwareEx>(json, JSONAwareEx.class);
    nav.at(5);
    assertTrue(nav.hasFailure(), "Navigator should be in error stat");
    nav.root();
    assertEquals(3, nav.at("ar").at(2).asInt());
    nav.up(2);
    assertEquals(4, nav.at("ar").at(-1).asInt());
    nav.up(2);
    assertEquals("foo", nav.at("name").asString());
  }

  @Test
  public void testNaviWriteArray() {
    String expected =
        "{'type':'bundle','data':[{'type':'object','name':'obj1'},{'type':'object','name':'obj2'}]}"
            .replace('\'', '"');
    JSONNavi<JSONAwareEx> nav = JSONNavi.newInstance();
    nav.set("type", "bundle")
        .at("data")
        .array()
        .at(0)
        .set("type", "object")
        .set("name", "obj1")
        .up()
        .at(1)
        .set("type", "object")
        .set("name", "obj2")
        .root();
    String s2 = nav.toString();
    assertEquals(expected, s2);

    nav = JSONNavi.newInstance();
    nav.set("type", "bundle")
        .at("data")
        .array()
        .atNext()
        .set("type", "object")
        .set("name", "obj1")
        .up()
        .atNext()
        .set("type", "object")
        .set("name", "obj2")
        .root();
    s2 = nav.toString();
    assertEquals(expected, s2);
  }
}