// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "flutter/shell/platform/linux/public/flutter_linux/fl_json_message_codec.h"
#include "gtest/gtest.h"

#include <math.h>

// Encodes a message using FlJsonMessageCodec to a UTF-8 string.
static gchar* encode_message(FlValue* value) {
  g_autoptr(FlJsonMessageCodec) codec = fl_json_message_codec_new();
  g_autoptr(GError) error = nullptr;
  g_autofree gchar* result = fl_json_message_codec_encode(codec, value, &error);
  EXPECT_EQ(error, nullptr);
  return static_cast<gchar*>(g_steal_pointer(&result));
}

// Encodes a message using FlJsonMessageCodec to a UTF-8 string. Expect the
// given error.
static void encode_error_message(FlValue* value, GQuark domain, gint code) {
  g_autoptr(FlJsonMessageCodec) codec = fl_json_message_codec_new();
  g_autoptr(GError) error = nullptr;
  g_autofree gchar* result = fl_json_message_codec_encode(codec, value, &error);
  EXPECT_TRUE(g_error_matches(error, domain, code));
  EXPECT_EQ(result, nullptr);
}

// Decodes a message using FlJsonMessageCodec from UTF-8 string.
static FlValue* decode_message(const char* text) {
  g_autoptr(FlJsonMessageCodec) codec = fl_json_message_codec_new();
  g_autoptr(GError) error = nullptr;
  g_autoptr(FlValue) value = fl_json_message_codec_decode(codec, text, &error);
  EXPECT_EQ(error, nullptr);
  EXPECT_NE(value, nullptr);
  return fl_value_ref(value);
}

// Decodes a message using FlJsonMessageCodec from UTF-8 string. Expect the
// given error.
static void decode_error_message(const char* text, GQuark domain, gint code) {
  g_autoptr(FlJsonMessageCodec) codec = fl_json_message_codec_new();
  g_autoptr(GError) error = nullptr;
  g_autoptr(FlValue) value = fl_json_message_codec_decode(codec, text, &error);
  EXPECT_TRUE(g_error_matches(error, domain, code));
  EXPECT_EQ(value, nullptr);
}

TEST(FlJsonMessageCodecTest, EncodeNullptr) {
  g_autofree gchar* text = encode_message(nullptr);
  EXPECT_STREQ(text, "null");
}

TEST(FlJsonMessageCodecTest, EncodeNull) {
  g_autoptr(FlValue) value = fl_value_new_null();
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "null");
}

TEST(FlJsonMessageCodecTest, DecodeNull) {
  g_autoptr(FlValue) value = decode_message("null");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_NULL);
}

static gchar* encode_bool(gboolean value) {
  g_autoptr(FlValue) v = fl_value_new_bool(value);
  return encode_message(v);
}

TEST(FlJsonMessageCodecTest, EncodeBoolFalse) {
  g_autofree gchar* text = encode_bool(FALSE);
  EXPECT_STREQ(text, "false");
}

TEST(FlJsonMessageCodecTest, EncodeBoolTrue) {
  g_autofree gchar* text = encode_bool(TRUE);
  EXPECT_STREQ(text, "true");
}

TEST(FlJsonMessageCodecTest, DecodeBoolFalse) {
  g_autoptr(FlValue) value = decode_message("false");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_BOOL);
  EXPECT_FALSE(fl_value_get_bool(value));
}

TEST(FlJsonMessageCodecTest, DecodeBoolTrue) {
  g_autoptr(FlValue) value = decode_message("true");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_BOOL);
  EXPECT_TRUE(fl_value_get_bool(value));
}

static gchar* encode_int(int64_t value) {
  g_autoptr(FlValue) v = fl_value_new_int(value);
  return encode_message(v);
}

TEST(FlJsonMessageCodecTest, EncodeIntZero) {
  g_autofree gchar* text = encode_int(0);
  EXPECT_STREQ(text, "0");
}

TEST(FlJsonMessageCodecTest, EncodeIntOne) {
  g_autofree gchar* text = encode_int(1);
  EXPECT_STREQ(text, "1");
}

TEST(FlJsonMessageCodecTest, EncodeInt12345) {
  g_autofree gchar* text = encode_int(12345);
  EXPECT_STREQ(text, "12345");
}

TEST(FlJsonMessageCodecTest, EncodeIntMin) {
  g_autofree gchar* text = encode_int(G_MININT64);
  EXPECT_STREQ(text, "-9223372036854775808");
}

TEST(FlJsonMessageCodecTest, EncodeIntMax) {
  g_autofree gchar* text = encode_int(G_MAXINT64);
  EXPECT_STREQ(text, "9223372036854775807");
}

TEST(FlJsonMessageCodecTest, DecodeIntZero) {
  g_autoptr(FlValue) value = decode_message("0");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_INT);
  EXPECT_EQ(fl_value_get_int(value), 0);
}

TEST(FlJsonMessageCodecTest, DecodeIntOne) {
  g_autoptr(FlValue) value = decode_message("1");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_INT);
  EXPECT_EQ(fl_value_get_int(value), 1);
}

TEST(FlJsonMessageCodecTest, DecodeInt12345) {
  g_autoptr(FlValue) value = decode_message("12345");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_INT);
  EXPECT_EQ(fl_value_get_int(value), 12345);
}

TEST(FlJsonMessageCodecTest, DecodeIntMin) {
  g_autoptr(FlValue) value = decode_message("-9223372036854775808");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_INT);
  EXPECT_EQ(fl_value_get_int(value), G_MININT64);
}

TEST(FlJsonMessageCodecTest, DecodeIntMax) {
  g_autoptr(FlValue) value = decode_message("9223372036854775807");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_INT);
  EXPECT_EQ(fl_value_get_int(value), G_MAXINT64);
}

TEST(FlJsonMessageCodecTest, DecodeUintMax) {
  // This is bigger than an signed 64 bit integer, so we expect it to be
  // represented as a double
  g_autoptr(FlValue) value = decode_message("18446744073709551615");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), 1.8446744073709551615e+19);
}

TEST(FlJsonMessageCodecTest, DecodeHugeNumber) {
  // This is bigger than an unsigned 64 bit integer, so we expect it to be
  // represented as a double
  g_autoptr(FlValue) value = decode_message("184467440737095516150");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), 1.84467440737095516150e+20);
}

TEST(FlJsonMessageCodecTest, DecodeIntLeadingZero1) {
  decode_error_message("00", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeIntLeadingZero2) {
  decode_error_message("01", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeIntDoubleNegative) {
  decode_error_message("--1", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeIntPositiveSign) {
  decode_error_message("+1", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeIntHexChar) {
  decode_error_message("0a", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

static gchar* encode_float(double value) {
  g_autoptr(FlValue) v = fl_value_new_float(value);
  return encode_message(v);
}

TEST(FlJsonMessageCodecTest, EncodeFloatZero) {
  g_autofree gchar* text = encode_float(0);
  EXPECT_STREQ(text, "0.0");
}

TEST(FlJsonMessageCodecTest, EncodeFloatOne) {
  g_autofree gchar* text = encode_float(1);
  EXPECT_STREQ(text, "1.0");
}

TEST(FlJsonMessageCodecTest, EncodeFloatMinusOne) {
  g_autofree gchar* text = encode_float(-1);
  EXPECT_STREQ(text, "-1.0");
}

TEST(FlJsonMessageCodecTest, EncodeFloatHalf) {
  g_autofree gchar* text = encode_float(0.5);
  EXPECT_STREQ(text, "0.5");
}

TEST(FlJsonMessageCodecTest, EncodeFloatPi) {
  g_autofree gchar* text = encode_float(M_PI);
  EXPECT_STREQ(text, "3.141592653589793");
}

TEST(FlJsonMessageCodecTest, EncodeFloatMinusZero) {
  g_autofree gchar* text = encode_float(-0.0);
  EXPECT_STREQ(text, "-0.0");
}

// NOTE(robert-ancell): JSON doesn't support encoding of NAN and INFINITY, but
// rapidjson doesn't seem to either encode them or treat them as an error.

TEST(FlJsonMessageCodecTest, DecodeFloatZero) {
  g_autoptr(FlValue) value = decode_message("0.0");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), 0.0);
}

TEST(FlJsonMessageCodecTest, DecodeFloatOne) {
  g_autoptr(FlValue) value = decode_message("1.0");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), 1.0);
}

TEST(FlJsonMessageCodecTest, DecodeFloatMinusOne) {
  g_autoptr(FlValue) value = decode_message("-1.0");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), -1.0);
}

TEST(FlJsonMessageCodecTest, DecodeFloatHalf) {
  g_autoptr(FlValue) value = decode_message("0.5");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), 0.5);
}

TEST(FlJsonMessageCodecTest, DecodeFloatPi) {
  g_autoptr(FlValue) value = decode_message("3.1415926535897931");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), M_PI);
}

TEST(FlJsonMessageCodecTest, DecodeFloatMinusZero) {
  g_autoptr(FlValue) value = decode_message("-0.0");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_FLOAT);
  EXPECT_EQ(fl_value_get_float(value), -0.0);
}

TEST(FlJsonMessageCodecTest, DecodeFloatMissingFraction) {
  decode_error_message("0.", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeFloatInvalidFraction) {
  decode_error_message("0.a", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

static gchar* encode_string(const gchar* value) {
  g_autoptr(FlValue) v = fl_value_new_string(value);
  return encode_message(v);
}

TEST(FlJsonMessageCodecTest, EncodeStringEmpty) {
  g_autofree gchar* text = encode_string("");
  EXPECT_STREQ(text, "\"\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringHello) {
  g_autofree gchar* text = encode_string("hello");
  EXPECT_STREQ(text, "\"hello\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEmptySized) {
  g_autoptr(FlValue) value = fl_value_new_string_sized(nullptr, 0);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "\"\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringHelloSized) {
  g_autoptr(FlValue) value = fl_value_new_string_sized("Hello World", 5);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "\"Hello\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeQuote) {
  g_autofree gchar* text = encode_string("\"");
  EXPECT_STREQ(text, "\"\\\"\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeBackslash) {
  g_autofree gchar* text = encode_string("\\");
  EXPECT_STREQ(text, "\"\\\\\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeBackspace) {
  g_autofree gchar* text = encode_string("\b");
  EXPECT_STREQ(text, "\"\\b\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeFormFeed) {
  g_autofree gchar* text = encode_string("\f");
  EXPECT_STREQ(text, "\"\\f\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeNewline) {
  g_autofree gchar* text = encode_string("\n");
  EXPECT_STREQ(text, "\"\\n\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeCarriageReturn) {
  g_autofree gchar* text = encode_string("\r");
  EXPECT_STREQ(text, "\"\\r\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeTab) {
  g_autofree gchar* text = encode_string("\t");
  EXPECT_STREQ(text, "\"\\t\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEscapeUnicode) {
  g_autofree gchar* text = encode_string("\u0001");
  EXPECT_STREQ(text, "\"\\u0001\"");
}

TEST(FlJsonMessageCodecTest, EncodeStringEmoji) {
  g_autofree gchar* text = encode_string("😀");
  EXPECT_STREQ(text, "\"😀\"");
}

TEST(FlJsonMessageCodecTest, DecodeStringEmpty) {
  g_autoptr(FlValue) value = decode_message("\"\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "");
}

TEST(FlJsonMessageCodecTest, DecodeStringHello) {
  g_autoptr(FlValue) value = decode_message("\"hello\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "hello");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeQuote) {
  g_autoptr(FlValue) value = decode_message("\"\\\"\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\"");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeBackslash) {
  g_autoptr(FlValue) value = decode_message("\"\\\\\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\\");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeSlash) {
  g_autoptr(FlValue) value = decode_message("\"\\/\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "/");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeBackspace) {
  g_autoptr(FlValue) value = decode_message("\"\\b\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\b");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeFormFeed) {
  g_autoptr(FlValue) value = decode_message("\"\\f\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\f");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeNewline) {
  g_autoptr(FlValue) value = decode_message("\"\\n\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\n");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeCarriageReturn) {
  g_autoptr(FlValue) value = decode_message("\"\\r\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\r");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeTab) {
  g_autoptr(FlValue) value = decode_message("\"\\t\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\t");
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeUnicode) {
  g_autoptr(FlValue) value = decode_message("\"\\u0001\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "\u0001");
}

TEST(FlJsonMessageCodecTest, DecodeStringEmoji) {
  g_autoptr(FlValue) value = decode_message("\"😀\"");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_STRING);
  EXPECT_STREQ(fl_value_get_string(value), "😀");
}

TEST(FlJsonMessageCodecTest, DecodeInvalidUTF8) {
  decode_error_message("\xff", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_UTF8);
}

TEST(FlJsonMessageCodecTest, DecodeStringInvalidUTF8) {
  decode_error_message("\"\xff\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_UTF8);
}

TEST(FlJsonMessageCodecTest, DecodeStringBinary) {
  decode_error_message("\"Hello\x01World\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringNewline) {
  decode_error_message("\"Hello\nWorld\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringCarriageReturn) {
  decode_error_message("\"Hello\rWorld\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringTab) {
  decode_error_message("\"Hello\tWorld\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringUnterminatedEmpty) {
  decode_error_message("\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringExtraQuote) {
  decode_error_message("\"\"\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapedClosingQuote) {
  decode_error_message("\"\\\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringUnknownEscape) {
  decode_error_message("\"\\z\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringInvalidEscapeUnicode) {
  decode_error_message("\"\\uxxxx\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeUnicodeNoData) {
  decode_error_message("\"\\u\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeStringEscapeUnicodeShortData) {
  decode_error_message("\"\\uxx\"", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, EncodeUint8ListEmpty) {
  g_autoptr(FlValue) value = fl_value_new_uint8_list(nullptr, 0);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[]");
}

TEST(FlJsonMessageCodecTest, EncodeUint8List) {
  uint8_t data[] = {0, 1, 2, 3, 4};
  g_autoptr(FlValue) value = fl_value_new_uint8_list(data, 5);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[0,1,2,3,4]");
}

TEST(FlJsonMessageCodecTest, EncodeInt32ListEmpty) {
  g_autoptr(FlValue) value = fl_value_new_int32_list(nullptr, 0);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[]");
}

TEST(FlJsonMessageCodecTest, EncodeInt32List) {
  int32_t data[] = {0, -1, 2, -3, 4};
  g_autoptr(FlValue) value = fl_value_new_int32_list(data, 5);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[0,-1,2,-3,4]");
}

TEST(FlJsonMessageCodecTest, EncodeInt64ListEmpty) {
  g_autoptr(FlValue) value = fl_value_new_int64_list(nullptr, 0);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[]");
}

TEST(FlJsonMessageCodecTest, EncodeInt64List) {
  int64_t data[] = {0, -1, 2, -3, 4};
  g_autoptr(FlValue) value = fl_value_new_int64_list(data, 5);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[0,-1,2,-3,4]");
}

TEST(FlJsonMessageCodecTest, EncodeFloatListEmpty) {
  g_autoptr(FlValue) value = fl_value_new_float_list(nullptr, 0);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[]");
}

TEST(FlJsonMessageCodecTest, EncodeFloatList) {
  double data[] = {0, -0.5, 0.25, -0.125, 0.0625};
  g_autoptr(FlValue) value = fl_value_new_float_list(data, 5);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[0.0,-0.5,0.25,-0.125,0.0625]");
}

TEST(FlJsonMessageCodecTest, EncodeListEmpty) {
  g_autoptr(FlValue) value = fl_value_new_list();
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[]");
}

TEST(FlJsonMessageCodecTest, EncodeListTypes) {
  g_autoptr(FlValue) value = fl_value_new_list();
  fl_value_append_take(value, fl_value_new_null());
  fl_value_append_take(value, fl_value_new_bool(TRUE));
  fl_value_append_take(value, fl_value_new_int(42));
  fl_value_append_take(value, fl_value_new_float(-1.5));
  fl_value_append_take(value, fl_value_new_string("hello"));
  fl_value_append_take(value, fl_value_new_list());
  fl_value_append_take(value, fl_value_new_map());
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[null,true,42,-1.5,\"hello\",[],{}]");
}

TEST(FlJsonMessageCodecTest, EncodeListNested) {
  g_autoptr(FlValue) even_numbers = fl_value_new_list();
  g_autoptr(FlValue) odd_numbers = fl_value_new_list();
  for (int i = 0; i < 10; i++) {
    if (i % 2 == 0)
      fl_value_append_take(even_numbers, fl_value_new_int(i));
    else
      fl_value_append_take(odd_numbers, fl_value_new_int(i));
  }
  g_autoptr(FlValue) value = fl_value_new_list();
  fl_value_append(value, even_numbers);
  fl_value_append(value, odd_numbers);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "[[0,2,4,6,8],[1,3,5,7,9]]");
}

TEST(FlJsonMessageCodecTest, DecodeListEmpty) {
  g_autoptr(FlValue) value = decode_message("[]");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_LIST);
  EXPECT_EQ(fl_value_get_length(value), static_cast<size_t>(0));
}

TEST(FlJsonMessageCodecTest, DecodeListNoComma) {
  decode_error_message("[0,1,2,3 4]", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeListUnterminatedEmpty) {
  decode_error_message("[", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeListStartUnterminate) {
  decode_error_message("]", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeListUnterminated) {
  decode_error_message("[0,1,2,3,4", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeListDoubleTerminated) {
  decode_error_message("[0,1,2,3,4]]", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, EncodeMapEmpty) {
  g_autoptr(FlValue) value = fl_value_new_map();
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text, "{}");
}

TEST(FlJsonMessageCodecTest, EncodeMapNullKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_null(), fl_value_new_string("null"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapBoolKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_bool(TRUE),
                    fl_value_new_string("bool"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapIntKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_int(42), fl_value_new_string("int"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapFloatKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_float(M_PI),
                    fl_value_new_string("float"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapUint8ListKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_uint8_list(nullptr, 0),
                    fl_value_new_string("uint8_list"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapInt32ListKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_int32_list(nullptr, 0),
                    fl_value_new_string("int32_list"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapInt64ListKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_int64_list(nullptr, 0),
                    fl_value_new_string("int64_list"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapFloatListKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_float_list(nullptr, 0),
                    fl_value_new_string("float_list"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapListKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_list(), fl_value_new_string("list"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapMapKey) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_map(), fl_value_new_string("map"));
  encode_error_message(value, FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_OBJECT_KEY_TYPE);
}

TEST(FlJsonMessageCodecTest, EncodeMapValueTypes) {
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_take(value, fl_value_new_string("null"), fl_value_new_null());
  fl_value_set_take(value, fl_value_new_string("bool"),
                    fl_value_new_bool(TRUE));
  fl_value_set_take(value, fl_value_new_string("int"), fl_value_new_int(42));
  fl_value_set_take(value, fl_value_new_string("float"),
                    fl_value_new_float(-1.5));
  fl_value_set_take(value, fl_value_new_string("string"),
                    fl_value_new_string("hello"));
  fl_value_set_take(value, fl_value_new_string("list"), fl_value_new_list());
  fl_value_set_take(value, fl_value_new_string("map"), fl_value_new_map());
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text,
               "{\"null\":null,\"bool\":true,\"int\":42,\"float\":-"
               "1.5,\"string\":\"hello\",\"list\":[],\"map\":{}}");
}

TEST(FlJsonMessageCodecTest, EncodeMapNested) {
  g_autoptr(FlValue) str_to_int = fl_value_new_map();
  const char* numbers[] = {"zero", "one", "two", "three", nullptr};
  for (int i = 0; numbers[i] != nullptr; i++) {
    fl_value_set_take(str_to_int, fl_value_new_string(numbers[i]),
                      fl_value_new_int(i));
  }
  g_autoptr(FlValue) value = fl_value_new_map();
  fl_value_set_string(value, "str-to-int", str_to_int);
  g_autofree gchar* text = encode_message(value);
  EXPECT_STREQ(text,
               "{\"str-to-int\":{\"zero\":0,\"one\":1,\"two\":2,\"three\":3}}");
}

TEST(FlJsonMessageCodecTest, DecodeMapEmpty) {
  g_autoptr(FlValue) value = decode_message("{}");
  ASSERT_EQ(fl_value_get_type(value), FL_VALUE_TYPE_MAP);
  EXPECT_EQ(fl_value_get_length(value), static_cast<size_t>(0));
}

TEST(FlJsonMessageCodecTest, DecodeMapUnterminatedEmpty) {
  decode_error_message("{", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeMapStartUnterminate) {
  decode_error_message("}", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeMapNoComma) {
  decode_error_message("{\"zero\":0 \"one\":1}", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeMapNoColon) {
  decode_error_message("{\"zero\" 0,\"one\":1}", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeMapUnterminated) {
  decode_error_message("{\"zero\":0,\"one\":1", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeMapDoubleTerminated) {
  decode_error_message("{\"zero\":0,\"one\":1}}", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, DecodeUnknownWord) {
  decode_error_message("foo", FL_JSON_MESSAGE_CODEC_ERROR,
                       FL_JSON_MESSAGE_CODEC_ERROR_INVALID_JSON);
}

TEST(FlJsonMessageCodecTest, EncodeDecode) {
  g_autoptr(FlJsonMessageCodec) codec = fl_json_message_codec_new();

  g_autoptr(FlValue) input = fl_value_new_list();
  fl_value_append_take(input, fl_value_new_null());
  fl_value_append_take(input, fl_value_new_bool(TRUE));
  fl_value_append_take(input, fl_value_new_int(42));
  fl_value_append_take(input, fl_value_new_float(M_PI));
  fl_value_append_take(input, fl_value_new_string("hello"));
  fl_value_append_take(input, fl_value_new_list());
  fl_value_append_take(input, fl_value_new_map());

  g_autoptr(GError) error = nullptr;
  g_autofree gchar* message =
      fl_json_message_codec_encode(codec, input, &error);
  ASSERT_NE(message, nullptr);
  EXPECT_EQ(error, nullptr);

  g_autoptr(FlValue) output =
      fl_json_message_codec_decode(codec, message, &error);
  EXPECT_EQ(error, nullptr);
  EXPECT_NE(output, nullptr);

  EXPECT_TRUE(fl_value_equal(input, output));
}
