2022-07-20 12:38:07 +02:00
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++ (supporting code)
// | | |__ | | | | | | version 3.10.5
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
// Copyright (c) 2013-2022 Niels Lohmann <http://nlohmann.me>.
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
2021-08-01 13:34:55 +02:00
# include "doctest_compatibility.h"
2021-08-17 14:43:43 +02:00
// disable -Wnoexcept as exceptions are switched off for this test suite
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING ( " -Wnoexcept " )
2021-08-01 13:34:55 +02:00
# include <nlohmann/json.hpp>
using json = nlohmann : : json ;
/////////////////////////////////////////////////////////////////////
// for #2824
/////////////////////////////////////////////////////////////////////
class sax_no_exception : public nlohmann : : detail : : json_sax_dom_parser < json >
{
public :
explicit sax_no_exception ( json & j ) : nlohmann : : detail : : json_sax_dom_parser < json > ( j , false ) { }
static bool parse_error ( std : : size_t /*position*/ , const std : : string & /*last_token*/ , const json : : exception & ex )
{
error_string = new std : : string ( ex . what ( ) ) ; // NOLINT(cppcoreguidelines-owning-memory)
return false ;
}
static std : : string * error_string ;
} ;
std : : string * sax_no_exception : : error_string = nullptr ;
TEST_CASE ( " Tests with disabled exceptions " )
{
SECTION ( " issue #2824 - encoding of json::exception::what() " )
{
json j ;
sax_no_exception sax ( j ) ;
CHECK ( ! json : : sax_parse ( " xyz " , & sax ) ) ;
2021-08-11 08:06:25 +02:00
CHECK ( * sax_no_exception : : error_string = = " [json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'x' " ) ;
2021-08-01 13:34:55 +02:00
delete sax_no_exception : : error_string ; // NOLINT(cppcoreguidelines-owning-memory)
}
}
2021-08-17 14:43:43 +02:00
DOCTEST_GCC_SUPPRESS_WARNING_POP