mirror of
https://github.com/simdjson/simdjson
synced 2026-06-08 17:27:07 +00:00
e9d5d5088a
* Add info and error logging * Add tests for error logging * Add logging for missing field * Update docs for logging usage * Fix style and pass by ref for string format args * Make log_level explicit and simplify get log level from env * Make log level int32_t * Format enum class * Fix ci * Move enum to header * Fix compilation for noexception build in test case * Disable warnings and putenv --------- Co-authored-by: Yong Xiang Ng <yxng@drwholdings.com>
68 lines
1.5 KiB
C++
68 lines
1.5 KiB
C++
#define SIMDJSON_VERBOSE_LOGGING 1
|
|
#include "simdjson.h"
|
|
#include "test_ondemand.h"
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <stdlib.h>
|
|
|
|
using namespace simdjson;
|
|
|
|
namespace log_error_tests {
|
|
#if SIMDJSON_EXCEPTIONS
|
|
|
|
using namespace std;
|
|
|
|
bool tape_error()
|
|
{
|
|
TEST_START();
|
|
auto json = R"( {"a", "hello"} )"_padded;
|
|
ondemand::parser parser;
|
|
try {
|
|
ondemand::document doc = parser.iterate(json);
|
|
std::cout << doc["a"] << std::endl;
|
|
TEST_FAIL("Should have thrown an exception!")
|
|
} catch (simdjson_error& e) {
|
|
ASSERT_ERROR(e.error(), TAPE_ERROR);
|
|
}
|
|
TEST_SUCCEED();
|
|
}
|
|
|
|
bool no_such_field()
|
|
{
|
|
TEST_START();
|
|
auto json = R"( {"a": "hello"} )"_padded;
|
|
ondemand::parser parser;
|
|
try {
|
|
ondemand::document doc = parser.iterate(json);
|
|
std::cout << doc["missing_key"] << std::endl;
|
|
TEST_FAIL("Should have thrown an exception!")
|
|
} catch (simdjson_error& e) {
|
|
ASSERT_ERROR(e.error(), NO_SUCH_FIELD);
|
|
}
|
|
TEST_SUCCEED();
|
|
}
|
|
#endif // SIMDJSON_EXCEPTIONS
|
|
|
|
bool run()
|
|
{
|
|
SIMDJSON_PUSH_DISABLE_WARNINGS
|
|
SIMDJSON_DISABLE_DEPRECATED_WARNING // Disable CRT_SECURE warning on MSVC: manually verified this is safe
|
|
std::string str = "SIMDJSON_LOG_LEVEL=ERROR";
|
|
putenv(str.data());
|
|
bool rc =
|
|
#if SIMDJSON_EXCEPTIONS
|
|
tape_error() &&
|
|
no_such_field() &&
|
|
#endif // #if SIMDJSON_EXCEPTIONS
|
|
true;
|
|
SIMDJSON_POP_DISABLE_WARNINGS
|
|
return rc;
|
|
}
|
|
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
return test_main(argc, argv, log_error_tests::run);
|
|
}
|