@@ -234,8 +234,8 @@ TEST_CASE("Test JsonWriter")
234
234
std::string buffer;
235
235
beast::detail::SimpleJsonWriter writer{buffer};
236
236
237
- writer.writeString (" \n " );
238
- CHECK (writer.finish () == " \"\\ n\" " );
237
+ writer.writeString (" \n\r\t 123 \b\f 123 " );
238
+ CHECK (writer.finish () == " \"\\ n\\ r \\ t123 \\ b \\ f123 \ "" );
239
239
}
240
240
241
241
{
@@ -261,6 +261,76 @@ TEST_CASE("Test JsonWriter")
261
261
writer.writeString (" \"\\ " );
262
262
CHECK (writer.finish () == " \"\\\"\\\\\" " );
263
263
}
264
+
265
+ {
266
+ std::string buffer;
267
+ beast::detail::SimpleJsonWriter writer{buffer};
268
+
269
+ writer.startArray ();
270
+ writer.writeBool (true );
271
+ writer.writeBool (false );
272
+ writer.writeNull ();
273
+ writer.endArray ();
274
+ CHECK (writer.finish () == " [true,false,null]" );
275
+ }
276
+ }
277
+
278
+ namespace test_detail {
279
+ struct ToCharsStruct {};
280
+
281
+ std::to_chars_result
282
+ to_chars (char * first, char * last, ToCharsStruct)
283
+ {
284
+ *first = ' 0' ;
285
+ return std::to_chars_result{first + 1 , std::errc{}};
286
+ }
287
+
288
+ struct StreamStruct
289
+ {
290
+ };
291
+
292
+ std::ostream&
293
+ operator <<(std::ostream& os, StreamStruct)
294
+ {
295
+ os << " 0" ;
296
+ return os;
297
+ }
298
+
299
+ }
300
+
301
+ TEST_CASE (" Test setJsonValue" )
302
+ {
303
+ std::ostringstream stringBuf;
304
+ std::string buffer;
305
+ beast::detail::SimpleJsonWriter writer{buffer};
306
+ writer.startObject ();
307
+
308
+ log::detail::setJsonValue<bool >(writer, " testBool" , true , &stringBuf);
309
+ log::detail::setJsonValue<std::int32_t >(writer, " testInt32" , 1 , &stringBuf);
310
+ log::detail::setJsonValue<std::uint32_t >(writer, " testUInt32" , -1 , &stringBuf);
311
+ log::detail::setJsonValue<std::int64_t >(writer, " testInt64" , 1 , &stringBuf);
312
+ log::detail::setJsonValue<std::uint64_t >(writer, " testUInt64" , -1 , &stringBuf);
313
+ log::detail::setJsonValue<double >(writer, " testDouble" , 1.1 , &stringBuf);
314
+ log::detail::setJsonValue<char const *>(writer, " testCharStar" , " Char*" , &stringBuf);
315
+ log::detail::setJsonValue<std::string>(writer, " testStdString" , " StdString" , &stringBuf);
316
+ log::detail::setJsonValue<std::string_view>(writer, " testStdStringView" , " StdStringView" , &stringBuf);
317
+ log::detail::setJsonValue<test_detail::ToCharsStruct>(writer, " testToChars" , {}, &stringBuf);
318
+ log::detail::setJsonValue<test_detail::StreamStruct>(writer, " testStream" , {}, &stringBuf);
319
+ }
320
+
321
+ TEST_CASE (" Test json logging not enabled" )
322
+ {
323
+ std::string logStream;
324
+
325
+ MockLogs logs{logStream, beast::severities::kAll };
326
+
327
+ beast::Journal::disableStructuredJournal ();
328
+ beast::Journal::addGlobalAttributes (
329
+ log::attributes (log::attr (" Field1" , " Value1" )));
330
+
331
+ logs.journal (" Test123" ).debug () << " Test " << log::param (" Field1" , " Value1" ) << log::field (" Field2" , " Value2" );
332
+
333
+ CHECK (logStream.find (" Test Value1" ) != std::string::npos);
264
334
}
265
335
266
336
/* *
@@ -322,7 +392,7 @@ class JsonLogStreamFixture
322
392
beast::Journal j_;
323
393
};
324
394
325
- TEST_CASE_FIXTURE (JsonLogStreamFixture, " TestJsonLogFields " )
395
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test json log fields " )
326
396
{
327
397
beast::Journal::addGlobalAttributes (
328
398
log::attributes (log::attr (" Field2" , " Value2" )));
@@ -367,7 +437,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogFields")
367
437
std::string{" true Test false" });
368
438
}
369
439
370
- TEST_CASE_FIXTURE (JsonLogStreamFixture, " TestJsonLogLevels " )
440
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test json log levels " )
371
441
{
372
442
{
373
443
stream ().str (" " );
@@ -460,7 +530,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogLevels")
460
530
}
461
531
}
462
532
463
- TEST_CASE_FIXTURE (JsonLogStreamFixture, " TestJsonLogStream " )
533
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test json log stream " )
464
534
{
465
535
journal ().stream (beast::severities::kError ) << " Test" ;
466
536
@@ -475,7 +545,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogStream")
475
545
beast::severities::to_string (beast::severities::kError ));
476
546
}
477
547
478
- TEST_CASE_FIXTURE (JsonLogStreamFixture, " TestJsonLogParams " )
548
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test json log params " )
479
549
{
480
550
journal ().debug () << " Test: " << log::param (" Field1" , 1 ) << " , "
481
551
<< log::param (
@@ -513,7 +583,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogParams")
513
583
std::string{" Test: 1, 18446744073709551615, 3.141592653589793" });
514
584
}
515
585
516
- TEST_CASE_FIXTURE (JsonLogStreamFixture, " TestJsonLogFields " )
586
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test json log fields " )
517
587
{
518
588
journal ().debug () << " Test" << log::field (" Field1" , 1 )
519
589
<< log::field (
@@ -546,7 +616,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJsonLogFields")
546
616
CHECK (logValue.as_object ()[" Message" ].get_string () == " Test" );
547
617
}
548
618
549
- TEST_CASE_FIXTURE (JsonLogStreamFixture, " TestJournalAttributes " )
619
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test journal attributes " )
550
620
{
551
621
beast::Journal j{
552
622
journal (),
@@ -574,7 +644,7 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJournalAttributes")
574
644
.get_int64 () == 2 );
575
645
}
576
646
577
- TEST_CASE_FIXTURE (JsonLogStreamFixture, " TestJournalAttributesInheritable " )
647
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test journal attributes inheritable " )
578
648
{
579
649
beast::Journal j{
580
650
journal (),
@@ -610,9 +680,68 @@ TEST_CASE_FIXTURE(JsonLogStreamFixture, "TestJournalAttributesInheritable")
610
680
.get_int64 () == 2 );
611
681
}
612
682
683
+ TEST_CASE_FIXTURE (JsonLogStreamFixture, " Test copying journal" )
684
+ {
685
+ {
686
+ beast::Journal j{
687
+ journal (),
688
+ log::attributes (log::attr (" Field1" , " Value1" ), log::attr (" Field2" , 2 ))};
689
+ beast::Journal j2{j};
690
+
691
+ j2.debug () << " Test" ;
692
+
693
+ boost::system::error_code ec;
694
+ auto logValue = boost::json::parse (stream ().str (), ec);
695
+ CHECK (ec == boost::system::errc::success);
696
+
697
+ CHECK (logValue.as_object ()[" JournalParams" ]
698
+ .as_object ()[" Field1" ]
699
+ .is_string ());
700
+ CHECK (
701
+ logValue.as_object ()[" JournalParams" ]
702
+ .as_object ()[" Field1" ]
703
+ .get_string () == std::string{" Value1" });
704
+ CHECK (logValue.as_object ()[" JournalParams" ]
705
+ .as_object ()[" Field2" ]
706
+ .is_number ());
707
+ CHECK (
708
+ logValue.as_object ()[" JournalParams" ]
709
+ .as_object ()[" Field2" ]
710
+ .get_int64 () == 2 );
711
+ }
712
+ {
713
+ stream ().str (" " );
714
+ beast::Journal j{
715
+ journal ().sink ()};
716
+ beast::Journal j2{j,
717
+ log::attributes (log::attr (" Field1" , " Value1" ), log::attr (" Field2" , 2 ))};
718
+
719
+ j2.debug () << " Test" ;
720
+
721
+ boost::system::error_code ec;
722
+ auto logValue = boost::json::parse (stream ().str (), ec);
723
+ CHECK (ec == boost::system::errc::success);
724
+
725
+ CHECK (logValue.as_object ()[" JournalParams" ]
726
+ .as_object ()[" Field1" ]
727
+ .is_string ());
728
+ CHECK (
729
+ logValue.as_object ()[" JournalParams" ]
730
+ .as_object ()[" Field1" ]
731
+ .get_string () == std::string{" Value1" });
732
+ CHECK (logValue.as_object ()[" JournalParams" ]
733
+ .as_object ()[" Field2" ]
734
+ .is_number ());
735
+ CHECK (
736
+ logValue.as_object ()[" JournalParams" ]
737
+ .as_object ()[" Field2" ]
738
+ .get_int64 () == 2 );
739
+ }
740
+ }
741
+
613
742
TEST_CASE_FIXTURE (
614
743
JsonLogStreamFixture,
615
- " TestJournalAttributesInheritableAfterMoving " )
744
+ " Test journal attributes inheritable after moving " )
616
745
{
617
746
beast::Journal j{
618
747
journal (),
@@ -651,7 +780,7 @@ TEST_CASE_FIXTURE(
651
780
652
781
TEST_CASE_FIXTURE (
653
782
JsonLogStreamFixture,
654
- " TestJournalAttributesInheritableAfterCopyAssignment " )
783
+ " Test journal attributes inheritable after copy assignment " )
655
784
{
656
785
beast::Journal j{
657
786
std::move (journal ()),
@@ -685,7 +814,7 @@ TEST_CASE_FIXTURE(
685
814
686
815
TEST_CASE_FIXTURE (
687
816
JsonLogStreamFixture,
688
- " TestJournalAttributesInheritableAfterMoveAssignment " )
817
+ " Test journal attributes inheritable after move assignment " )
689
818
{
690
819
beast::Journal j{
691
820
journal (),
0 commit comments