1
0
mirror of https://github.com/falk-werner/webfuse synced 2024-10-27 20:34:10 +00:00
falk-werner_webfuse/test/webfuse/json/test_parser.cc
2020-07-16 17:51:40 +02:00

124 lines
2.1 KiB
C++

#include "webfuse/impl/json/parser.h"
#include "webfuse/impl/json/reader.h"
#include "webfuse/impl/json/node_intern.h"
#include <gtest/gtest.h>
#include <string>
namespace
{
bool try_parse(std::string const & value)
{
std::string contents = value;
struct wf_json_reader reader;
wf_impl_json_reader_init(&reader, const_cast<char*>(contents.data()), contents.size());
wf_json json;
bool const result = wf_impl_json_parse_value(&reader, &json);
if (result)
{
wf_impl_json_cleanup(&json);
}
return result;
}
}
TEST(json_parser, fail_no_contents)
{
ASSERT_FALSE(try_parse(""));
}
TEST(json_parser, fail_invalid_null)
{
ASSERT_FALSE(try_parse("none"));
}
TEST(json_parser, fail_invalid_true)
{
ASSERT_FALSE(try_parse("tru"));
}
TEST(json_parser, fail_invalid_false)
{
ASSERT_FALSE(try_parse("fals"));
}
TEST(json_parser, fail_invalid_int)
{
ASSERT_FALSE(try_parse("-"));
}
TEST(json_parser, fail_invalid_string)
{
ASSERT_FALSE(try_parse("\"invalid"));
}
TEST(json_parser, empty_array)
{
ASSERT_TRUE(try_parse("[]"));
}
TEST(json_parser, large_array)
{
ASSERT_TRUE(try_parse("[1,2,3,4,5,6,7,8,9]"));
}
TEST(json_parser, fail_unterminated_array)
{
ASSERT_FALSE(try_parse("[1"));
}
TEST(json_parser, fail_missing_array_separator)
{
ASSERT_FALSE(try_parse("[1 2]"));
}
TEST(json_parser, fail_missing_array_value)
{
ASSERT_FALSE(try_parse("[1,]"));
}
TEST(json_parser, empty_object)
{
ASSERT_TRUE(try_parse("{}"));
}
TEST(json_parser, large_object)
{
ASSERT_TRUE(try_parse("{\"a\":1,\"b\":2,\"c\":3,\"d\":4,\"e\":5}"));
}
TEST(json_parser, fail_unterminated_object)
{
ASSERT_FALSE(try_parse("{\"a\":1"));
}
TEST(json_parser, fail_invalid_object_key)
{
ASSERT_FALSE(try_parse("{a:1}"));
}
TEST(json_parser, fail_missing_object_terminator)
{
ASSERT_FALSE(try_parse("{\"a\"1}"));
}
TEST(json_parser, fail_missing_object_value)
{
ASSERT_FALSE(try_parse("{\"a\":}"));
}
TEST(json_parser, fail_missing_object_separator)
{
ASSERT_FALSE(try_parse("{\"a\":1 \"b\":2}"));
}
TEST(json_parser, fail_missing_object_item)
{
ASSERT_FALSE(try_parse("{\"a\":1,}"));
}