TestCompressorFlags.java

package net.minidev.json.test;

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

import net.minidev.json.JSONObject;
import net.minidev.json.JSONStyle;
import net.minidev.json.JSONValue;
import org.junit.jupiter.api.Test;

/**
 * Test all Compression Styles
 *
 * @author Uriel Chemouni <uchemouni@gmail.com>
 */
public class TestCompressorFlags {

  @Test
  public void testProtect() throws Exception {
    String compressed = "{k:value}";
    String nCompress = "{\"k\":\"value\"}";

    JSONObject obj = (JSONObject) JSONValue.parse(nCompress);

    // test MAX_COMPRESS
    String r = obj.toJSONString(JSONStyle.MAX_COMPRESS);
    assertEquals(compressed, r);

    // test LT_COMPRESS
    r = obj.toJSONString(JSONStyle.LT_COMPRESS);
    assertEquals(nCompress, r);

    // test NO_COMPRESS
    r = obj.toJSONString(JSONStyle.NO_COMPRESS);
    assertEquals(nCompress, r);

    // only keys values
    JSONStyle style = new JSONStyle(-1 & JSONStyle.FLAG_PROTECT_KEYS);
    r = obj.toJSONString(style);
    assertEquals("{k:\"value\"}", r);

    // only protect values
    style = new JSONStyle(-1 & JSONStyle.FLAG_PROTECT_VALUES);
    r = obj.toJSONString(style);
    assertEquals("{\"k\":value}", r);
  }

  @Test
  public void testAggresive() throws Exception {
    String r;
    JSONStyle style;

    String NProtectValue = "{\"a b\":\"c d\"}";
    JSONObject obj = (JSONObject) JSONValue.parse(NProtectValue);

    /** Test Without Agressive */
    style = new JSONStyle(-1 & JSONStyle.FLAG_PROTECT_KEYS);
    r = obj.toJSONString(style);
    assertEquals(NProtectValue, r);

    style = new JSONStyle(-1 & JSONStyle.FLAG_PROTECT_VALUES);
    r = obj.toJSONString(style);
    assertEquals(NProtectValue, r);

    /** Test With Agressive */
    style = new JSONStyle(-1 & (JSONStyle.FLAG_PROTECT_VALUES | JSONStyle.FLAG_AGRESSIVE));
    r = obj.toJSONString(style);
    assertEquals("{\"a b\":c d}", r);

    style = new JSONStyle(-1 & (JSONStyle.FLAG_PROTECT_KEYS | JSONStyle.FLAG_AGRESSIVE));
    r = obj.toJSONString(style);
    assertEquals("{a b:\"c d\"}", r);

    style = JSONStyle.MAX_COMPRESS;
    r = obj.toJSONString(style);
    assertEquals("{a b:c d}", r);
  }

  @Test
  public void test4Web() throws Exception {
    String NProtectValue = "{\"k\":\"http:\\/\\/url\"}";

    JSONObject obj = (JSONObject) JSONValue.parse(NProtectValue);

    String r = obj.toJSONString(JSONStyle.MAX_COMPRESS);
    assertEquals("{k:\"http://url\"}", r);

    r = obj.toJSONString(JSONStyle.LT_COMPRESS);
    assertEquals("{\"k\":\"http://url\"}", r);

    r = obj.toJSONString(JSONStyle.NO_COMPRESS);
    assertEquals("{\"k\":\"http:\\/\\/url\"}", r);
  }
}