2021-08-01 14:34:55 +03:00
/*
__ _____ _____ _____
__ | | __ | | | | JSON for Modern C + + ( test suite )
2021-08-17 16:23:23 +03:00
| | | __ | | | | | | version 3.10 .0
2021-08-01 14:34:55 +03:00
| _____ | _____ | _____ | _ | ___ | 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"
2021-08-17 15:43:43 +03: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 14:34:55 +03: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 09:06:25 +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-17 15:43:43 +03:00
DOCTEST_GCC_SUPPRESS_WARNING_POP