summaryrefslogtreecommitdiff
path: root/asm/src/test/java/org/objectweb/asm/signature/SignatureWriterTest.java
diff options
context:
space:
mode:
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.java43
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";
}