diff options
Diffstat (limited to 'asm/src/test/java/org/objectweb/asm/signature/SignatureWriterTest.java')
-rw-r--r-- | asm/src/test/java/org/objectweb/asm/signature/SignatureWriterTest.java | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/asm/src/test/java/org/objectweb/asm/signature/SignatureWriterTest.java b/asm/src/test/java/org/objectweb/asm/signature/SignatureWriterTest.java index be1ba012..e9aefa62 100644 --- a/asm/src/test/java/org/objectweb/asm/signature/SignatureWriterTest.java +++ b/asm/src/test/java/org/objectweb/asm/signature/SignatureWriterTest.java @@ -29,6 +29,7 @@ package org.objectweb.asm.signature; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.stream.IntStream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.objectweb.asm.test.AsmTest; @@ -62,4 +63,46 @@ class SignatureWriterTest extends AsmTest { assertEquals(signature, signatureWriter.toString()); } + + static IntStream deepSignatures() { + return IntStream.range(0, 48); + } + + @ParameterizedTest + @MethodSource("deepSignatures") + void testWrite_deepSignature(int depth) { + SignatureWriter signatureWriter = new SignatureWriter(); + String expected = writeDeepSignature(signatureWriter, depth); + assertEquals(expected, signatureWriter.toString(), "depth=" + depth); + } + + private String writeDeepSignature(SignatureVisitor signatureVisitor, int maxDepth) { + StringBuilder expected = new StringBuilder(); + writeDeepSignatureInner(signatureVisitor, expected, 0, maxDepth); + return expected.toString(); + } + + private void writeDeepSignatureInner(SignatureVisitor signatureVisitor, StringBuilder expected, int currentDepth, int maxDepth) { + signatureVisitor.visitClassType(TEST_GENERIC); + expected.append('L' + TEST_GENERIC); + if (currentDepth < maxDepth) { + expected.append("<L" + TEST_OPEN + ';'); + SignatureVisitor v = signatureVisitor.visitTypeArgument('='); + v.visitClassType(TEST_OPEN); + v.visitEnd(); + + writeDeepSignatureInner(signatureVisitor.visitTypeArgument('='), expected, currentDepth + 1, maxDepth); + + v = signatureVisitor.visitTypeArgument('='); + v.visitClassType(TEST_CLOSE); + v.visitEnd(); + expected.append('L' + TEST_CLOSE + ";>"); + } + signatureVisitor.visitEnd(); + expected.append(';'); + } + + private static final String TEST_OPEN = "TestOpen"; + private static final String TEST_GENERIC = "TestGeneric"; + private static final String TEST_CLOSE = "TestClose"; } |