Skip to content

Commit f96b324

Browse files
committed
Merge branch '3.x' of github.com:FasterXML/jackson-core into 3.x
2 parents a467372 + 2bc8317 commit f96b324

File tree

3 files changed

+1089
-0
lines changed

3 files changed

+1089
-0
lines changed

src/test/java/tools/jackson/core/unittest/util/DelegatesTest.java

Lines changed: 368 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,4 +389,372 @@ public JsonGenerator writeName(String name) {
389389
p.close();
390390
g.close();
391391
}
392+
393+
@Test
394+
void generatorDelegateWriteString() throws IOException
395+
{
396+
StringWriter sw = new StringWriter();
397+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
398+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
399+
400+
del.writeStartArray();
401+
402+
// writeString(String)
403+
del.writeString("test");
404+
405+
// writeString(char[], int, int)
406+
char[] chars = "hello world".toCharArray();
407+
del.writeString(chars, 0, 5);
408+
409+
// writeString(SerializableString)
410+
del.writeString(new tools.jackson.core.io.SerializedString("serialized"));
411+
412+
del.writeEndArray();
413+
del.close();
414+
415+
assertEquals("[\"test\",\"hello\",\"serialized\"]", sw.toString());
416+
g0.close();
417+
}
418+
419+
@Test
420+
void generatorDelegateWriteBinary() throws IOException
421+
{
422+
StringWriter sw = new StringWriter();
423+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
424+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
425+
426+
del.writeStartArray();
427+
428+
byte[] data = new byte[] { 1, 2, 3, 4, 5 };
429+
del.writeBinary(data, 1, 3);
430+
431+
del.writeEndArray();
432+
del.close();
433+
434+
// Binary should be base64 encoded
435+
assertNotNull(sw.toString());
436+
assertTrue(sw.toString().contains("[\""));
437+
g0.close();
438+
}
439+
440+
@Test
441+
void generatorDelegateWriteRaw() throws IOException
442+
{
443+
StringWriter sw = new StringWriter();
444+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
445+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
446+
447+
del.writeStartArray();
448+
449+
// writeRaw(String)
450+
del.writeRaw("123");
451+
del.writeRaw(',');
452+
453+
// writeRaw(String, int, int)
454+
del.writeRaw("456789", 0, 3);
455+
del.writeRaw(',');
456+
457+
// writeRaw(char[], int, int)
458+
char[] chars = "abc".toCharArray();
459+
del.writeRaw(chars, 0, 3);
460+
461+
del.writeEndArray();
462+
del.close();
463+
464+
assertEquals("[123,456,abc]", sw.toString());
465+
g0.close();
466+
}
467+
468+
@Test
469+
void generatorDelegateWriteName() throws IOException
470+
{
471+
StringWriter sw = new StringWriter();
472+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
473+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
474+
475+
del.writeStartObject();
476+
477+
// writeName(String)
478+
del.writeName("field1");
479+
del.writeNumber(1);
480+
481+
// writeName(SerializableString)
482+
del.writeName(new tools.jackson.core.io.SerializedString("field2"));
483+
del.writeString("value");
484+
485+
del.writeEndObject();
486+
del.close();
487+
488+
assertEquals("{\"field1\":1,\"field2\":\"value\"}", sw.toString());
489+
g0.close();
490+
}
491+
492+
@Test
493+
void generatorDelegateConfigure() throws IOException
494+
{
495+
StringWriter sw = new StringWriter();
496+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
497+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
498+
499+
assertFalse(del.isEnabled(StreamWriteFeature.WRITE_BIGDECIMAL_AS_PLAIN));
500+
501+
JsonGenerator result = del.configure(StreamWriteFeature.WRITE_BIGDECIMAL_AS_PLAIN, true);
502+
assertSame(del, result, "configure() should return the delegate, not the underlying generator");
503+
504+
assertTrue(del.isEnabled(StreamWriteFeature.WRITE_BIGDECIMAL_AS_PLAIN));
505+
assertTrue(g0.isEnabled(StreamWriteFeature.WRITE_BIGDECIMAL_AS_PLAIN));
506+
507+
del.close();
508+
g0.close();
509+
}
510+
511+
@Test
512+
void generatorDelegateReturnValues() throws IOException
513+
{
514+
StringWriter sw = new StringWriter();
515+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
516+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
517+
518+
// Verify that all write methods return the delegate (this), not the underlying generator
519+
assertSame(del, del.writeStartArray());
520+
assertSame(del, del.writeNumber(1));
521+
assertSame(del, del.writeString("test"));
522+
assertSame(del, del.writeBoolean(true));
523+
assertSame(del, del.writeNull());
524+
assertSame(del, del.writeEndArray());
525+
526+
assertSame(del, del.writeStartObject());
527+
assertSame(del, del.writeName("field"));
528+
assertSame(del, del.writeNumber(2));
529+
assertSame(del, del.writeEndObject());
530+
531+
del.close();
532+
g0.close();
533+
}
534+
535+
@Test
536+
void generatorDelegateCapabilities() throws IOException
537+
{
538+
StringWriter sw = new StringWriter();
539+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
540+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
541+
542+
// Test capability methods
543+
assertSame(g0.streamWriteCapabilities(), del.streamWriteCapabilities());
544+
545+
// Test has() method for various capabilities
546+
for (tools.jackson.core.StreamWriteCapability cap : tools.jackson.core.StreamWriteCapability.values()) {
547+
assertEquals(g0.has(cap), del.has(cap), "Capability " + cap + " should match");
548+
}
549+
550+
del.close();
551+
g0.close();
552+
}
553+
554+
@Test
555+
void generatorDelegateContexts() throws IOException
556+
{
557+
StringWriter sw = new StringWriter();
558+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
559+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
560+
561+
// streamWriteContext should be delegated
562+
assertSame(g0.streamWriteContext(), del.streamWriteContext());
563+
564+
del.writeStartArray();
565+
assertSame(g0.streamWriteContext(), del.streamWriteContext());
566+
567+
// objectWriteContext should be delegated
568+
assertSame(g0.objectWriteContext(), del.objectWriteContext());
569+
570+
del.close();
571+
g0.close();
572+
}
573+
574+
@Test
575+
void generatorDelegateOutputInfo() throws IOException
576+
{
577+
StringWriter sw = new StringWriter();
578+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
579+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
580+
581+
// streamWriteOutputTarget should be delegated
582+
assertSame(g0.streamWriteOutputTarget(), del.streamWriteOutputTarget());
583+
584+
del.writeStartArray();
585+
del.writeNumber(123);
586+
587+
// streamWriteOutputBuffered should be delegated
588+
assertEquals(g0.streamWriteOutputBuffered(), del.streamWriteOutputBuffered());
589+
590+
del.close();
591+
g0.close();
592+
}
593+
594+
@Test
595+
void generatorDelegateWritePOJOWithDelegation() throws IOException
596+
{
597+
StringWriter sw = new StringWriter();
598+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
599+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0, true); // delegateCopyMethods = true
600+
601+
del.writeStartArray();
602+
603+
// null POJO should write null (works regardless of delegateCopyMethods)
604+
del.writePOJO(null);
605+
606+
del.writeEndArray();
607+
del.close();
608+
609+
assertEquals("[null]", sw.toString());
610+
g0.close();
611+
}
612+
613+
@Test
614+
void generatorDelegateWriteTreeWithDelegation() throws IOException
615+
{
616+
StringWriter sw = new StringWriter();
617+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
618+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0, true); // delegateCopyMethods = true
619+
620+
del.writeStartArray();
621+
622+
// null tree should write null
623+
del.writeTree(null);
624+
625+
del.writeEndArray();
626+
del.close();
627+
628+
assertEquals("[null]", sw.toString());
629+
g0.close();
630+
}
631+
632+
@Test
633+
void generatorDelegateNumberVariations() throws IOException
634+
{
635+
StringWriter sw = new StringWriter();
636+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
637+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
638+
639+
del.writeStartArray();
640+
641+
// Test all number writing variations
642+
del.writeNumber((short) 1);
643+
del.writeNumber(2);
644+
del.writeNumber(3L);
645+
del.writeNumber(BigInteger.valueOf(4));
646+
del.writeNumber(5.0);
647+
del.writeNumber(6.0f);
648+
del.writeNumber(new BigDecimal("7.5"));
649+
del.writeNumber("8");
650+
651+
// writeNumber(char[], int, int)
652+
char[] numChars = "123".toCharArray();
653+
del.writeNumber(numChars, 0, 3);
654+
655+
del.writeEndArray();
656+
del.close();
657+
658+
assertEquals("[1,2,3,4,5.0,6.0,7.5,8,123]", sw.toString());
659+
g0.close();
660+
}
661+
662+
@Test
663+
void generatorDelegateGettersAndSetters() throws IOException
664+
{
665+
StringWriter sw = new StringWriter();
666+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
667+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
668+
669+
// Test various getter methods
670+
assertEquals(g0.getHighestNonEscapedChar(), del.getHighestNonEscapedChar());
671+
assertEquals(g0.getCharacterEscapes(), del.getCharacterEscapes());
672+
assertEquals(g0.getPrettyPrinter(), del.getPrettyPrinter());
673+
assertEquals(g0.streamWriteFeatures(), del.streamWriteFeatures());
674+
675+
del.close();
676+
g0.close();
677+
}
678+
679+
@Test
680+
void generatorDelegateFlushBehavior() throws IOException
681+
{
682+
StringWriter sw = new StringWriter();
683+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
684+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
685+
686+
del.writeStartArray();
687+
del.writeNumber(1);
688+
689+
assertFalse(del.isClosed());
690+
691+
del.flush();
692+
assertFalse(del.isClosed());
693+
assertFalse(g0.isClosed());
694+
695+
// Should be flushed to output
696+
assertTrue(sw.toString().startsWith("["));
697+
698+
del.close();
699+
assertTrue(del.isClosed());
700+
assertTrue(g0.isClosed());
701+
702+
g0.close();
703+
}
704+
705+
@Test
706+
void generatorDelegateUTF8Methods() throws IOException
707+
{
708+
ByteArrayOutputStream out = new ByteArrayOutputStream();
709+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), out);
710+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
711+
712+
del.writeStartArray();
713+
714+
byte[] utf8 = "hello".getBytes("UTF-8");
715+
del.writeUTF8String(utf8, 0, utf8.length);
716+
717+
del.writeEndArray();
718+
del.close();
719+
720+
String result = out.toString("UTF-8");
721+
assertEquals("[\"hello\"]", result);
722+
g0.close();
723+
}
724+
725+
@Test
726+
void generatorDelegateAccess() throws IOException
727+
{
728+
StringWriter sw = new StringWriter();
729+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
730+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
731+
732+
// Test delegate() method
733+
assertSame(g0, del.delegate());
734+
735+
del.close();
736+
g0.close();
737+
}
738+
739+
@Test
740+
void generatorDelegateWriteOmittedProperty() throws IOException
741+
{
742+
StringWriter sw = new StringWriter();
743+
JsonGenerator g0 = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
744+
JsonGeneratorDelegate del = new JsonGeneratorDelegate(g0);
745+
746+
del.writeStartObject();
747+
del.writeName("visible");
748+
del.writeNumber(1);
749+
750+
// writeOmittedProperty should be delegated
751+
assertSame(del, del.writeOmittedProperty("omitted"));
752+
753+
del.writeEndObject();
754+
del.close();
755+
756+
// Omitted property should not appear in output
757+
assertEquals("{\"visible\":1}", sw.toString());
758+
g0.close();
759+
}
392760
}

0 commit comments

Comments
 (0)