2021-08-01 14:34:55 +03:00
/*
__ _____ _____ _____
__ | | __ | | | | JSON for Modern C + + ( test suite )
| | | __ | | | | | | version 3.9 .1
| _____ | _____ | _____ | _ | ___ | https : //github.com/nlohmann/json
Licensed under the MIT License < http : //opensource.org/licenses/MIT>.
SPDX - License - Identifier : MIT
Copyright ( c ) 2013 - 2019 Niels Lohmann < http : //nlohmann.me>.
Permission is hereby granted , free of charge , to any person obtaining a copy
of this software and associated documentation files ( the " Software " ) , to deal
in the Software without restriction , including without limitation the rights
to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
copies of the Software , and to permit persons to whom the Software is
furnished to do so , subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software .
THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE .
*/
# include "doctest_compatibility.h"
# 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 ;
2021-08-09 22:43:03 +03:00
//
# include <cstddef> // size_t
# include <exception> // exception
# include <stdexcept> // runtime_error
# include <string> // to_string
# include <vector> // vector
//
namespace nlohmann
{
namespace detail2
{
class exception : public std : : exception
{
public :
const char * what ( ) const noexcept override
{
return m . what ( ) ;
}
protected :
2021-08-10 09:22:21 +03:00
exception ( const char * what_arg ) : m ( what_arg ) { }
2021-08-09 22:43:03 +03:00
private :
std : : runtime_error m ;
} ;
class parse_error : public exception
{
public :
2021-08-10 09:35:14 +03:00
parse_error ( const char * what_arg ) : exception ( what_arg ) { }
2021-08-09 22:43:03 +03:00
} ;
2021-08-09 22:58:05 +03:00
} // namespace detail2
2021-08-09 22:43:03 +03:00
} // namespace nlohmann
//
2021-08-01 14:34:55 +03:00
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-09 22:43:03 +03: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 14:34:55 +03:00
delete sax_no_exception : : error_string ; // NOLINT(cppcoreguidelines-owning-memory)
}
2021-08-09 22:43:03 +03:00
SECTION ( " test " )
{
2021-08-10 11:09:31 +03:00
std : : string w = " [json.exception.parse_error] foo " ;
auto error = nlohmann : : detail2 : : parse_error ( w . c_str ( ) ) ;
2021-08-10 09:22:21 +03:00
CHECK ( std : : string ( error . what ( ) ) = = " [json.exception.parse_error] foo " ) ;
2021-08-09 22:43:03 +03:00
}
2021-08-01 14:34:55 +03:00
}