TestUtf8.java

package net.minidev.json.test;

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

import java.io.ByteArrayInputStream;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.util.stream.Stream;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONValue;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

public class TestUtf8 {
  public static Stream<Arguments> languages() {
    return Stream.of(
        Arguments.of("Sinhala", "��������������� ���������������"),
        Arguments.of("Japanese", "���������"),
        Arguments.of("Russian", "��������������"),
        Arguments.of("Farsi", "����������"),
        Arguments.of("Korean", "���������"),
        Arguments.of("Armenian", "��������������"),
        Arguments.of("Hindi", "������������������"),
        Arguments.of("Hebrew", "����������"),
        Arguments.of("Chinese", "������"),
        Arguments.of("Amharic", "������������"),
        Arguments.of("Malayalam", "������������������"),
        Arguments.of("Assyrian Neo-Aramaic", "������������"),
        Arguments.of("Georgian", "���������������������������"),
        Arguments.of(
            "Emojis",
            "����������������������������������������������������������������������������������������������������������������������������������������������������������"));
  }
  ;

  @ParameterizedTest
  @MethodSource("languages")
  public void supportI18nString(String language, String nonLatinText) throws Exception {
    String json = "{\"key\":\"" + nonLatinText + "\"}";
    JSONObject obj = (JSONObject) JSONValue.parse(json);
    String actual = (String) obj.get("key");
    assertEquals(nonLatinText, actual, "Parsing String " + language + " text");
  }

  @ParameterizedTest
  @MethodSource("languages")
  public void supportI18nStringReader(String language, String nonLatinText) throws Exception {
    String json = "{\"key\":\"" + nonLatinText + "\"}";
    StringReader reader = new StringReader(json);
    JSONObject obj = (JSONObject) JSONValue.parse(reader);

    String actual = (String) obj.get("key");
    assertEquals(nonLatinText, actual, "Parsing StringReader " + language + " text");
  }

  @ParameterizedTest
  @MethodSource("languages")
  public void supportI18nByteArrayInputStream(String language, String nonLatinText)
      throws Exception {
    String json = "{\"key\":\"" + nonLatinText + "\"}";
    ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
    JSONObject obj = (JSONObject) JSONValue.parse(bis);
    String actual = (String) obj.get("key");
    assertEquals(nonLatinText, actual, "Parsing ByteArrayInputStream " + language + " text");
  }

  @ParameterizedTest
  @MethodSource("languages")
  public void supportI18nBytes(String language, String nonLatinText) throws Exception {
    String json = "{\"key\":\"" + nonLatinText + "\"}";
    byte[] bs = json.getBytes(StandardCharsets.UTF_8);
    JSONObject obj = JSONValue.parse(bs, JSONObject.class);
    String actual = (String) obj.get("key");
    assertEquals(nonLatinText, actual, "Parsing bytes[] " + language + " text");
  }
}