From 2726fee2d238979ab2425339f699b47fc2052200 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Thu, 9 Feb 2023 16:12:04 +0100 Subject: mutation: Make `toString()` work with cyclic mutator structures A new `getDebugString` function is introduced that provides a predicate as an argument with which implementors can check whether they are part of a cyclic structure (e.g. a self-referential Protobuf message). This requires making `SerializingMutator` an abstract class so that an implementation of `toString` can be provided. --- .../jazzer/mutation/combinator/MutatorCombinatorsTest.java | 6 ++++-- .../com/code_intelligence/jazzer/mutation/support/TestSupport.java | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src/test/java/com/code_intelligence/jazzer/mutation') diff --git a/src/test/java/com/code_intelligence/jazzer/mutation/combinator/MutatorCombinatorsTest.java b/src/test/java/com/code_intelligence/jazzer/mutation/combinator/MutatorCombinatorsTest.java index eae088f7..a8424ecb 100644 --- a/src/test/java/com/code_intelligence/jazzer/mutation/combinator/MutatorCombinatorsTest.java +++ b/src/test/java/com/code_intelligence/jazzer/mutation/combinator/MutatorCombinatorsTest.java @@ -27,6 +27,7 @@ import static com.code_intelligence.jazzer.mutation.support.TestSupport.nullData import static com.google.common.truth.Truth.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; +import com.code_intelligence.jazzer.mutation.api.Debuggable; import com.code_intelligence.jazzer.mutation.api.InPlaceMutator; import com.code_intelligence.jazzer.mutation.api.PseudoRandom; import com.code_intelligence.jazzer.mutation.api.SerializingMutator; @@ -35,6 +36,7 @@ import java.io.DataInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; import org.junit.jupiter.api.Test; class MutatorCombinatorsTest { @@ -77,7 +79,7 @@ class MutatorCombinatorsTest { } @Override - public String toString() { + public String toDebugString(Predicate isInCycle) { return "List"; } }); @@ -120,7 +122,7 @@ class MutatorCombinatorsTest { } @Override - public String toString() { + public String toDebugString(Predicate isInCycle) { return "List"; } }); diff --git a/src/test/java/com/code_intelligence/jazzer/mutation/support/TestSupport.java b/src/test/java/com/code_intelligence/jazzer/mutation/support/TestSupport.java index 9a4c1572..c7744cec 100644 --- a/src/test/java/com/code_intelligence/jazzer/mutation/support/TestSupport.java +++ b/src/test/java/com/code_intelligence/jazzer/mutation/support/TestSupport.java @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import static java.util.Arrays.stream; import static java.util.stream.Collectors.toCollection; +import com.code_intelligence.jazzer.mutation.api.Debuggable; import com.code_intelligence.jazzer.mutation.api.PseudoRandom; import com.code_intelligence.jazzer.mutation.api.SerializingMutator; import com.code_intelligence.jazzer.mutation.engine.SeededPseudoRandom; @@ -32,6 +33,7 @@ import java.io.OutputStream; import java.util.ArrayDeque; import java.util.Queue; import java.util.function.Function; +import java.util.function.Predicate; public final class TestSupport { private static final DataOutputStream nullDataOutputStream = @@ -88,7 +90,7 @@ public final class TestSupport { } @Override - public String toString() { + public String toDebugString(Predicate isInCycle) { if (initialValue == null) { return "null"; } -- cgit v1.2.3