diff options
author | Brian Gianforcaro <bgianf@serenityos.org> | 2021-05-06 01:19:30 -0700 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-05-06 17:54:28 +0200 |
commit | 67322b0702836807e29265e86556ebf43bb9d510 (patch) | |
tree | 86d2e2099ecc377cf11ddcf9106c500969b1afbb /Tests/AK/TestJSON.cpp | |
parent | fd0dbd1ebfbcbc29d46393061daa49dc7390caa7 (diff) | |
download | serenity-67322b0702836807e29265e86556ebf43bb9d510.zip |
Tests: Move AK tests to Tests/AK
Diffstat (limited to 'Tests/AK/TestJSON.cpp')
-rw-r--r-- | Tests/AK/TestJSON.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/Tests/AK/TestJSON.cpp b/Tests/AK/TestJSON.cpp new file mode 100644 index 0000000000..b1c8b5d0e7 --- /dev/null +++ b/Tests/AK/TestJSON.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <LibTest/TestCase.h> + +#include <AK/HashMap.h> +#include <AK/JsonArray.h> +#include <AK/JsonObject.h> +#include <AK/JsonValue.h> +#include <AK/String.h> +#include <AK/StringBuilder.h> + +TEST_CASE(load_form) +{ + FILE* fp = fopen("test.frm", "r"); + VERIFY(fp); + + StringBuilder builder; + for (;;) { + char buffer[1024]; + if (!fgets(buffer, sizeof(buffer), fp)) + break; + builder.append(buffer); + } + + fclose(fp); + + JsonValue form_json = JsonValue::from_string(builder.to_string()).value(); + + EXPECT(form_json.is_object()); + + auto name = form_json.as_object().get("name").to_string(); + + EXPECT_EQ(name, "Form1"); + + auto widgets = form_json.as_object().get("widgets").as_array(); + + widgets.for_each([&](const JsonValue& widget_value) { + auto& widget_object = widget_value.as_object(); + auto widget_class = widget_object.get("class").as_string(); + widget_object.for_each_member([&]([[maybe_unused]] auto& property_name, [[maybe_unused]] const JsonValue& property_value) { + }); + }); +} + +TEST_CASE(json_empty_string) +{ + auto json = JsonValue::from_string("\"\"").value(); + EXPECT_EQ(json.type(), JsonValue::Type::String); + EXPECT_EQ(json.as_string().is_null(), false); + EXPECT_EQ(json.as_string().is_empty(), true); +} + +TEST_CASE(json_string) +{ + auto json = JsonValue::from_string("\"A\"").value(); + EXPECT_EQ(json.type(), JsonValue::Type::String); + EXPECT_EQ(json.as_string().is_null(), false); + EXPECT_EQ(json.as_string().length(), size_t { 1 }); + EXPECT_EQ(json.as_string() == "A", true); +} + +TEST_CASE(json_utf8_character) +{ + auto json = JsonValue::from_string("\"\\u0041\"").value(); + EXPECT_EQ(json.type(), JsonValue::Type::String); + EXPECT_EQ(json.as_string().is_null(), false); + EXPECT_EQ(json.as_string().length(), size_t { 1 }); + EXPECT_EQ(json.as_string() == "A", true); +} + +TEST_CASE(json_utf8_multibyte) +{ + auto json = JsonValue::from_string("\"ลก\"").value(); + EXPECT_EQ(json.type(), JsonValue::Type::String); + EXPECT_EQ(json.as_string().is_null(), false); + EXPECT_EQ(json.as_string().length(), size_t { 2 }); + EXPECT_EQ(json.as_string() == "ลก", true); + EXPECT_EQ(json.as_string() == "\xc5\xa1", true); +} + +TEST_CASE(json_64_bit_value) +{ + auto big_value = 0x12345678aabbccddull; + JsonValue big_json_value(big_value); + JsonValue big_json_value_copy = big_json_value; + EXPECT_EQ(big_json_value.as_u64(), big_json_value_copy.as_u64()); +} + +TEST_CASE(json_duplicate_keys) +{ + JsonObject json; + json.set("test", "foo"); + json.set("test", "bar"); + json.set("test", "baz"); + EXPECT_EQ(json.to_string(), "{\"test\":\"baz\"}"); +} |