From 87eafd8d6af591254646b53265c21f8d7b8d28e8 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sun, 12 Mar 2017 15:20:17 +0100 Subject: [PATCH] :white_check_mark: added regression tests for #473 These tests currently pass without any adjustments to the source code. --- test/src/unit-regression.cpp | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/src/unit-regression.cpp b/test/src/unit-regression.cpp index 957d5a25a..7b4086b10 100644 --- a/test/src/unit-regression.cpp +++ b/test/src/unit-regression.cpp @@ -32,6 +32,7 @@ SOFTWARE. using nlohmann::json; #include +#include TEST_CASE("regression tests") { @@ -796,6 +797,55 @@ TEST_CASE("regression tests") CHECK(s1 == s2); } + SECTION("issue #473 - inconsistent behavior in conversion to array type") + { + json j_array = {1, 2, 3, 4}; + json j_number = 42; + json j_null = nullptr; + + SECTION("std::vector") + { + auto create = [](const json & j) + { + std::vector v = j; + }; + + CHECK_NOTHROW(create(j_array)); + CHECK_THROWS_AS(create(j_number), std::domain_error); + CHECK_THROWS_WITH(create(j_number), "type must be array, but is number"); + CHECK_THROWS_AS(create(j_null), std::domain_error); + CHECK_THROWS_WITH(create(j_null), "type must be array, but is null"); + } + + SECTION("std::list") + { + auto create = [](const json & j) + { + std::list v = j; + }; + + CHECK_NOTHROW(create(j_array)); + CHECK_THROWS_AS(create(j_number), std::domain_error); + CHECK_THROWS_WITH(create(j_number), "type must be array, but is number"); + CHECK_THROWS_AS(create(j_null), std::domain_error); + CHECK_THROWS_WITH(create(j_null), "type must be array, but is null"); + } + + SECTION("std::forward_list") + { + auto create = [](const json & j) + { + std::forward_list v = j; + }; + + CHECK_NOTHROW(create(j_array)); + CHECK_THROWS_AS(create(j_number), std::domain_error); + CHECK_THROWS_WITH(create(j_number), "type must be array, but is number"); + CHECK_THROWS_AS(create(j_null), std::domain_error); + CHECK_THROWS_WITH(create(j_null), "type must be array, but is null"); + } + } + SECTION("issue #486 - json::value_t can't be a map's key type in VC++ 2015") { // the code below must compile with MSVC