diff --git a/src-async/BitLoggerAsync_test.mbt b/src-async/BitLoggerAsync_test.mbt index a1ccd7f..e16e63c 100644 --- a/src-async/BitLoggerAsync_test.mbt +++ b/src-async/BitLoggerAsync_test.mbt @@ -323,6 +323,47 @@ test "async json helpers export stable structured shapes" { inspect(async_obj.get("flush").unwrap().as_string().unwrap(), content="Shutdown") } +test "async build config json export materializes parsed omitted defaults" { + let parsed = parse_async_logger_build_config_text("{}") + let build_json = async_logger_build_config_to_json(parsed) + let build_obj = build_json.as_object().unwrap() + let logger_obj = build_obj.get("logger").unwrap().as_object().unwrap() + let sink_obj = logger_obj.get("sink").unwrap().as_object().unwrap() + let formatter_obj = sink_obj.get("text_formatter").unwrap().as_object().unwrap() + let async_obj = build_obj.get("async_config").unwrap().as_object().unwrap() + + inspect( + @json_parser.stringify(build_json), + content="{\"logger\":{\"min_level\":\"INFO\",\"target\":\"\",\"timestamp\":false,\"sink\":{\"kind\":\"console\",\"path\":\"\",\"append\":true,\"auto_flush\":true,\"text_formatter\":{\"show_timestamp\":true,\"show_level\":true,\"show_target\":true,\"show_fields\":true,\"separator\":\" \",\"field_separator\":\" \",\"template\":\"\",\"color_mode\":\"never\",\"color_support\":\"truecolor\",\"style_markup\":\"full\",\"target_style_markup\":\"disabled\",\"fields_style_markup\":\"disabled\"}}},\"async_config\":{\"max_pending\":0,\"max_batch\":1,\"linger_ms\":0,\"overflow\":\"Blocking\",\"flush\":\"Never\"}}", + ) + inspect(logger_obj.get("min_level").unwrap().as_string().unwrap(), content="INFO") + inspect(logger_obj.get("target").unwrap().as_string().unwrap(), content="") + inspect(logger_obj.get("timestamp").unwrap().as_bool().unwrap(), content="false") + inspect(logger_obj.get("queue") is None, content="true") + inspect(sink_obj.get("kind").unwrap().as_string().unwrap(), content="console") + inspect(sink_obj.get("path").unwrap().as_string().unwrap(), content="") + inspect(sink_obj.get("append").unwrap().as_bool().unwrap(), content="true") + inspect(sink_obj.get("auto_flush").unwrap().as_bool().unwrap(), content="true") + inspect(formatter_obj.get("show_timestamp").unwrap().as_bool().unwrap(), content="true") + inspect(formatter_obj.get("show_level").unwrap().as_bool().unwrap(), content="true") + inspect(formatter_obj.get("show_target").unwrap().as_bool().unwrap(), content="true") + inspect(formatter_obj.get("show_fields").unwrap().as_bool().unwrap(), content="true") + inspect(formatter_obj.get("separator").unwrap().as_string().unwrap(), content=" ") + inspect(formatter_obj.get("field_separator").unwrap().as_string().unwrap(), content=" ") + inspect(formatter_obj.get("template").unwrap().as_string().unwrap(), content="") + inspect(formatter_obj.get("color_mode").unwrap().as_string().unwrap(), content="never") + inspect(formatter_obj.get("color_support").unwrap().as_string().unwrap(), content="truecolor") + inspect(formatter_obj.get("style_markup").unwrap().as_string().unwrap(), content="full") + inspect(formatter_obj.get("target_style_markup").unwrap().as_string().unwrap(), content="disabled") + inspect(formatter_obj.get("fields_style_markup").unwrap().as_string().unwrap(), content="disabled") + inspect(formatter_obj.get("style_tags") is None, content="true") + inspect(async_obj.get("max_pending").unwrap().as_number().unwrap().to_int(), content="0") + inspect(async_obj.get("max_batch").unwrap().as_number().unwrap().to_int(), content="1") + inspect(async_obj.get("linger_ms").unwrap().as_number().unwrap().to_int(), content="0") + inspect(async_obj.get("overflow").unwrap().as_string().unwrap(), content="Blocking") + inspect(async_obj.get("flush").unwrap().as_string().unwrap(), content="Never") +} + test "async config parsers reject malformed input" { let invalid_json_error = (fn() -> String raise { ignore(parse_async_logger_config_text("{"))