diff --git a/index.md b/index.md index 5f4dd00cc8..1ca5730e17 100644 --- a/index.md +++ b/index.md @@ -238,6 +238,10 @@ Test quality metrics for framework packages.
main
2024-06-04T08:44:13
main
2024-06-04T08:43:51
main
dependabot/github_actions/github/codeql-action-3.25.6
2024-05-27T00:23:53
dependabot/maven/org.codehaus.mojo-exec-maven-plugin-3.3.0
- -1 - | -- - - - - - | -package com.mastercard.test.flow.assrt; |
- -2 - | -- - - - - - | -|
- -3 - | -- - - - - - | -import java.util.List; |
- -4 - | -- - - - - - | -|
- -5 - | -- - - - - - | -import com.mastercard.test.flow.Flow; |
- -6 - | -- - - - - - | -import com.mastercard.test.flow.Message; |
- -7 - | -- - - - - - | -import com.mastercard.test.flow.Residue; |
- -8 - | -- - - - - - | -|
- -9 - | -- - - - - - | -/** |
- -10 - | -- - - - - - | - * Extend this class to provide a mechanism by which {@link Residue} data can be |
- -11 - | -- - - - - - | - * checked against the system under test |
- -12 - | -- - - - - - | - * |
- -13 - | -- - - - - - | - * @param <T> The {@link Residue} type |
- -14 - | -- - - - - - | - */ |
- -15 - | -- - - - - - | -public abstract class Checker<T extends Residue> { |
- -16 - | -- - - - - - | -|
- -17 - | -- - - - - - | - private final Class<T> residueType; |
- -18 - | -- - - - - - | -|
- -19 - | -- - - - - - | - /** |
- -20 - | -- - - - - - | - * @param residueType The type of {@link Residue} the this checker validates |
- -21 - | -- - - - - - | - */ |
- -22 - | -- - - - - - | - protected Checker( Class<T> residueType ) { |
- -23 - | -- - - - - - | - this.residueType = residueType; |
- -24 - | -- - - - - - | - } |
- -25 - | -- - - - - - | -|
- -26 - | -- - - - - - | - /** |
- -27 - | -- - - - - - | - * Defines the type of {@link Residue} that is checked |
- -28 - | -- - - - - - | - * |
- -29 - | -- - - - - - | - * @return The type of {@link Residue} that this {@link Checker} operates on |
- -30 - | -- - - - - - | - */ |
- -31 - | -- - - - - - | - public Class<T> residueType() { |
- -32 - | -
-
-1
-
-1. residueType : replaced return value with null for com/mastercard/test/flow/assrt/Checker::residueType → KILLED - - - - |
- return residueType; |
- -33 - | -- - - - - - | - } |
- -34 - | -- - - - - - | -|
- -35 - | -- - - - - - | - /** |
- -36 - | -- - - - - - | - * Constructs a human-readable representation of the expected residue data. This |
- -37 - | -- - - - - - | - * is called before a {@link Flow} is processed for assertion. |
- -38 - | -- - - - - - | - * |
- -39 - | -- - - - - - | - * @param residue The residue from the system model |
- -40 - | -- - - - - - | - * @return A human-readable representation of that data |
- -41 - | -- - - - - - | - */ |
- -42 - | -- - - - - - | - public abstract Message expected( T residue ); |
- -43 - | -- - - - - - | -|
- -44 - | -- - - - - - | - /** |
- -45 - | -- - - - - - | - * Extracts the true residual data from the system under test. This is called |
- -46 - | -- - - - - - | - * after a flow has been processed for assertion. |
- -47 - | -- - - - - - | - * |
- -48 - | -- - - - - - | - * @param residue The residue from the system model |
- -49 - | -- - - - - - | - * @param behaviour Message data harvested during flow processing |
- -50 - | -- - - - - - | - * @return residual data bytes, such as can be supplied to |
- -51 - | -- - - - - - | - * {@link Message#peer(byte[])} on the output of |
- -52 - | -- - - - - - | - * {@link #expected(Residue)} |
- -53 - | -- - - - - - | - */ |
- -54 - | -- - - - - - | - public abstract byte[] actual( T residue, List<Assertion> behaviour ); |
- -55 - | -- - - - - - | -} |
Mutations | ||
32 | -- |
-
-
-
- 1.1 |
-
- -1 - | -- - - - - - | -package com.mastercard.test.flow.assrt; |
- -2 - | -- - - - - - | -|
- -3 - | -- - - - - - | -import java.util.HashMap; |
- -4 - | -- - - - - - | -import java.util.Map; |
- -5 - | -- - - - - - | -import java.util.Optional; |
- -6 - | -- - - - - - | -import java.util.Set; |
- -7 - | -- - - - - - | -|
- -8 - | -- - - - - - | -import com.mastercard.test.flow.Actor; |
- -9 - | -- - - - - - | -import com.mastercard.test.flow.Flow; |
- -10 - | -- - - - - - | -import com.mastercard.test.flow.assrt.AbstractFlocessor.State; |
- -11 - | -- - - - - - | -import com.mastercard.test.flow.util.Flows; |
- -12 - | -- - - - - - | -|
- -13 - | -- - - - - - | -/** |
- -14 - | -- - - - - - | - * Tracks the processing results of {@link Flow}s. This allows us to skip |
- -15 - | -- - - - - - | - * {@link Flow}s where their prerequisites have already failed |
- -16 - | -- - - - - - | - */ |
- -17 - | -- - - - - - | -public class History { |
- -18 - | -- - - - - - | -|
- -19 - | -- - - - - - | - /** |
- -20 - | -- - - - - - | - * The possible {@link Flow} processing states |
- -21 - | -- - - - - - | - */ |
- -22 - | -- - - - - - | - public enum Result { |
- -23 - | -- - - - - - | - /** |
- -24 - | -- - - - - - | - * The {@link Flow} was processed and all assertions passed |
- -25 - | -- - - - - - | - */ |
- -26 - | -- - - - - - | - SUCCESS(true), |
- -27 - | -- - - - - - | - /** |
- -28 - | -- - - - - - | - * The {@link Flow} was processed but the results did not match our expectations |
- -29 - | -- - - - - - | - */ |
- -30 - | -- - - - - - | - UNEXPECTED(true), |
- -31 - | -- - - - - - | - /** |
- -32 - | -- - - - - - | - * We had an opportunity to process the {@link Flow}, but the root {@link Actor} |
- -33 - | -- - - - - - | - * is autonomous so we could not observe results |
- -34 - | -- - - - - - | - */ |
- -35 - | -- - - - - - | - NOT_OBSERVED(true), |
- -36 - | -- - - - - - | - /** |
- -37 - | -- - - - - - | - * An error occurred when the {@link Flow} was processed |
- -38 - | -- - - - - - | - */ |
- -39 - | -- - - - - - | - ERROR(false), |
- -40 - | -- - - - - - | - /** |
- -41 - | -- - - - - - | - * We had an opportunity to process the {@link Flow}, but we didn't do it |
- -42 - | -- - - - - - | - */ |
- -43 - | -- - - - - - | - SKIP(false), |
- -44 - | -- - - - - - | - /** |
- -45 - | -- - - - - - | - * The {@link Flow} has not been processed yet |
- -46 - | -- - - - - - | - */ |
- -47 - | -- - - - - - | - PENDING(false); |
- -48 - | -- - - - - - | -|
- -49 - | -- - - - - - | - /** |
- -50 - | -- - - - - - | - * <code>true</code> if this result indicates that the flow was processed to |
- -51 - | -- - - - - - | - * completion |
- -52 - | -- - - - - - | - */ |
- -53 - | -- - - - - - | - public final boolean processed; |
- -54 - | -- - - - - - | -|
- -55 - | -- - - - - - | - Result( boolean processed ) { |
- -56 - | -- - - - - - | - this.processed = processed; |
- -57 - | -- - - - - - | - } |
- -58 - | -- - - - - - | - } |
- -59 - | -- - - - - - | -|
- -60 - | -- - - - - - | - private final Map<Flow, Result> results = new HashMap<>(); |
- -61 - | -- - - - - - | -|
- -62 - | -- - - - - - | - /** |
- -63 - | -- - - - - - | - * Records the outcome of {@link Flow} processing. This data will be used to |
- -64 - | -- - - - - - | - * inform the decision of whether to process later {@link Flow}s |
- -65 - | -- - - - - - | - * |
- -66 - | -- - - - - - | - * @param flow The {@link Flow} |
- -67 - | -- - - - - - | - * @param result The outcome of processing that {@link Flow} |
- -68 - | -- - - - - - | - */ |
- -69 - | -- - - - - - | - public void recordResult( Flow flow, Result result ) { |
- -70 - | -- - - - - - | - results.putIfAbsent( flow, result ); |
- -71 - | -- - - - - - | - } |
- -72 - | -- - - - - - | -|
- -73 - | -- - - - - - | - /** |
- -74 - | -- - - - - - | - * Gets the outcome for a {@link Flow} |
- -75 - | -- - - - - - | - * |
- -76 - | -- - - - - - | - * @param flow The {@link Flow} to query for |
- -77 - | -- - - - - - | - * @return The result of that {@link Flow} |
- -78 - | -- - - - - - | - */ |
- -79 - | -- - - - - - | - public Result get( Flow flow ) { |
- -80 - | -
-
-1
-
-1. get : replaced return value with null for com/mastercard/test/flow/assrt/History::get → KILLED - - - - |
- return results.getOrDefault( flow, Result.PENDING ); |
- -81 - | -- - - - - - | - } |
- -82 - | -- - - - - - | -|
- -83 - | -- - - - - - | - /** |
- -84 - | -- - - - - - | - * Clears the saved {@link Flow} outcomes |
- -85 - | -- - - - - - | - */ |
- -86 - | -- - - - - - | - public void clear() { |
- -87 - | -
-
-1
-
-1. clear : removed call to java/util/Map::clear → KILLED - - - - |
- results.clear(); |
- -88 - | -- - - - - - | - } |
- -89 - | -- - - - - - | -|
- -90 - | -- - - - - - | - /** |
- -91 - | -- - - - - - | - * Looks for a reason to skip {@link Flow} execution |
- -92 - | -- - - - - - | - * |
- -93 - | -- - - - - - | - * @param flow A {@link Flow} that we're thinking about processing |
- -94 - | -- - - - - - | - * @param statefulness <code>true</code> if the system is stateful (which means |
- -95 - | -- - - - - - | - * that missing dependencies that hit the system under test |
- -96 - | -- - - - - - | - * spell doom for a flow) |
- -97 - | -- - - - - - | - * @param system The actors in the system under test |
- -98 - | -- - - - - - | - * @return The reason why we shouldn't, or the empty {@link Optional} if we |
- -99 - | -- - - - - - | - * should |
- -100 - | -- - - - - - | - */ |
- -101 - | -- - - - - - | - public Optional<String> skipReason( Flow flow, State statefulness, Set<Actor> system ) { |
- -102 - | -- - - - - - | -|
- -103 - | -
-
-1
-
-1. skipReason : negated conditional → KILLED - - - - |
- if( !AssertionOptions.SUPPRESS_BASIS_CHECK.isTrue() ) { |
- -104 - | -- - - - - - | - Optional<String> basisFailure = Flows.ancestors( flow ) |
- -105 - | -- - - - - - | - .map( this::get ) |
- -106 - | -- - - - - - | - // One of our ancestors failed, so we are likely to fail in the same way. Let's |
- -107 - | -- - - - - - | - // avoid flooding test results with duplicates of the same failure |
- -108 - | -
-
-2
-
-1. lambda$skipReason$0 : negated conditional → KILLED -2. lambda$skipReason$0 : replaced boolean return with true for com/mastercard/test/flow/assrt/History::lambda$skipReason$0 → KILLED - - - - |
- .filter( r -> r == Result.UNEXPECTED ) |
- -109 - | -
-
-1
-
-1. lambda$skipReason$1 : replaced return value with "" for com/mastercard/test/flow/assrt/History::lambda$skipReason$1 → KILLED - - - - |
- .map( r -> "Ancestor failed" ) |
- -110 - | -- - - - - - | - .findFirst(); |
- -111 - | -- - - - - - | -|
- -112 - | -
-
-1
-
-1. skipReason : negated conditional → KILLED - - - - |
- if( basisFailure.isPresent() ) { |
- -113 - | -
-
-1
-
-1. skipReason : replaced return value with Optional.empty for com/mastercard/test/flow/assrt/History::skipReason → KILLED - - - - |
- return basisFailure; |
- -114 - | -- - - - - - | - } |
- -115 - | -- - - - - - | - } |
- -116 - | -- - - - - - | -|
- -117 - | -
-
-2
-
-1. skipReason : negated conditional → KILLED -2. skipReason : negated conditional → KILLED - - - - |
- if( statefulness == State.FUL && !AssertionOptions.SUPPRESS_DEPENDENCY_CHECK.isTrue() ) { |
- -118 - | -- - - - - - | - // the system is stateful and the check has not been suppressed... |
- -119 - | -- - - - - - | - Optional<String> depFailure = flow.dependencies() |
- -120 - | -
-
-1
-
-1. lambda$skipReason$2 : replaced return value with null for com/mastercard/test/flow/assrt/History::lambda$skipReason$2 → KILLED - - - - |
- .map( d -> d.source().flow() ) |
- -121 - | -- - - - - - | - // ... and the flow has a dependency that intersects with the system ... |
- -122 - | -
-
-2
-
-1. lambda$skipReason$3 : replaced boolean return with false for com/mastercard/test/flow/assrt/History::lambda$skipReason$3 → KILLED -2. lambda$skipReason$3 : replaced boolean return with true for com/mastercard/test/flow/assrt/History::lambda$skipReason$3 → KILLED - - - - |
- .filter( f -> Flows.intersects( f, system ) ) |
- -123 - | -- - - - - - | - .map( this::get ) |
- -124 - | -
-
-2
-
-1. lambda$skipReason$4 : negated conditional → KILLED -2. lambda$skipReason$4 : replaced boolean return with true for com/mastercard/test/flow/assrt/History::lambda$skipReason$4 → KILLED - - - - |
- .filter( r -> !r.processed ) |
- -125 - | -- - - - - - | - // ... and that dependency has not been processed ... |
- -126 - | -
-
-1
-
-1. lambda$skipReason$5 : replaced return value with "" for com/mastercard/test/flow/assrt/History::lambda$skipReason$5 → KILLED - - - - |
- .map( r -> "Missing dependency" ) |
- -127 - | -- - - - - - | - // ... so there's no point proceeding |
- -128 - | -- - - - - - | - .findFirst(); |
- -129 - | -- - - - - - | -|
- -130 - | -
-
-1
-
-1. skipReason : negated conditional → KILLED - - - - |
- if( depFailure.isPresent() ) { |
- -131 - | -
-
-1
-
-1. skipReason : replaced return value with Optional.empty for com/mastercard/test/flow/assrt/History::skipReason → KILLED - - - - |
- return depFailure; |
- -132 - | -- - - - - - | - } |
- -133 - | -- - - - - - | - } |
- -134 - | -- - - - - - | -|
- -135 - | -- - - - - - | - return Optional.empty(); |
- -136 - | -- - - - - - | - } |
- -137 - | -- - - - - - | -} |
Mutations | ||
80 | -- |
-
-
-
- 1.1 |
-
87 | -- |
-
-
-
- 1.1 |
-
103 | -- |
-
-
-
- 1.1 |
-
108 | -- |
-
-
-
- 1.1 2.2 |
-
109 | -- |
-
-
-
- 1.1 |
-
112 | -- |
-
-
-
- 1.1 |
-
113 | -- |
-
-
-
- 1.1 |
-
117 | -- |
-
-
-
- 1.1 2.2 |
-
120 | -- |
-
-
-
- 1.1 |
-
122 | -- |
-
-
-
- 1.1 2.2 |
-
124 | -- |
-
-
-
- 1.1 2.2 |
-
126 | -- |
-
-
-
- 1.1 |
-
130 | -- |
-
-
-
- 1.1 |
-
131 | -- |
-
-
-
- 1.1 |
-
- -1 - | -- - - - - - | -package com.mastercard.test.flow.builder.mutable; |
- -2 - | -- - - - - - | -|
- -3 - | -- - - - - - | -import java.util.function.Function; |
- -4 - | -- - - - - - | -|
- -5 - | -- - - - - - | -import com.mastercard.test.flow.FieldAddress; |
- -6 - | -- - - - - - | -import com.mastercard.test.flow.Flow; |
- -7 - | -- - - - - - | -import com.mastercard.test.flow.Interaction; |
- -8 - | -- - - - - - | -import com.mastercard.test.flow.Message; |
- -9 - | -- - - - - - | -import com.mastercard.test.flow.builder.concrete.ConcreteFieldAddress; |
- -10 - | -- - - - - - | -|
- -11 - | -- - - - - - | -/** |
- -12 - | -- - - - - - | - * Builder for {@link ConcreteFieldAddress} |
- -13 - | -- - - - - - | - */ |
- -14 - | -- - - - - - | -public class MutableFieldAddress { |
- -15 - | -- - - - - - | -|
- -16 - | -- - - - - - | - private Flow flow = null; |
- -17 - | -- - - - - - | - private Function<Flow, Interaction> interaction = null; |
- -18 - | -- - - - - - | - private Function<Interaction, Message> message = null; |
- -19 - | -- - - - - - | - private String field = null; |
- -20 - | -- - - - - - | -|
- -21 - | -- - - - - - | - /** |
- -22 - | -- - - - - - | - * Initially empty |
- -23 - | -- - - - - - | - */ |
- -24 - | -- - - - - - | - public MutableFieldAddress() { |
- -25 - | -- - - - - - | - } |
- -26 - | -- - - - - - | -|
- -27 - | -- - - - - - | - /** |
- -28 - | -- - - - - - | - * @param basis The {@link FieldAddress} to copy |
- -29 - | -- - - - - - | - */ |
- -30 - | -- - - - - - | - public MutableFieldAddress( FieldAddress basis ) { |
- -31 - | -- - - - - - | - flow = basis.flow(); |
- -32 - | -- - - - - - | - interaction = basis.interaction(); |
- -33 - | -- - - - - - | - message = basis.message(); |
- -34 - | -- - - - - - | - field = basis.field(); |
- -35 - | -- - - - - - | - } |
- -36 - | -- - - - - - | -|
- -37 - | -- - - - - - | - /** |
- -38 - | -- - - - - - | - * Defines the addressed {@link Flow} |
- -39 - | -- - - - - - | - * |
- -40 - | -- - - - - - | - * @param f The {@link Flow} that contains the field |
- -41 - | -- - - - - - | - * @return <code>this</code> |
- -42 - | -- - - - - - | - */ |
- -43 - | -- - - - - - | - public MutableFieldAddress flow( Flow f ) { |
- -44 - | -- - - - - - | - flow = f; |
- -45 - | -
-
-1
-
-1. flow : replaced return value with null for com/mastercard/test/flow/builder/mutable/MutableFieldAddress::flow → KILLED - - - - |
- return this; |
- -46 - | -- - - - - - | - } |
- -47 - | -- - - - - - | -|
- -48 - | -- - - - - - | - /** |
- -49 - | -- - - - - - | - * Defines the addressed {@link Interaction} within the {@link Flow} |
- -50 - | -- - - - - - | - * |
- -51 - | -- - - - - - | - * @param ntr How to extract the {@link Interaction} that contains the field |
- -52 - | -- - - - - - | - * from the {@link Flow} |
- -53 - | -- - - - - - | - * @return <code>this</code> |
- -54 - | -- - - - - - | - */ |
- -55 - | -- - - - - - | - public MutableFieldAddress interaction( Function<Flow, Interaction> ntr ) { |
- -56 - | -- - - - - - | - interaction = ntr; |
- -57 - | -
-
-1
-
-1. interaction : replaced return value with null for com/mastercard/test/flow/builder/mutable/MutableFieldAddress::interaction → KILLED - - - - |
- return this; |
- -58 - | -- - - - - - | - } |
- -59 - | -- - - - - - | -|
- -60 - | -- - - - - - | - /** |
- -61 - | -- - - - - - | - * Defines the addressed {@link Message} within the {@link Interaction} |
- -62 - | -- - - - - - | - * |
- -63 - | -- - - - - - | - * @param m How to extract the {@link Message} that contains the field from the |
- -64 - | -- - - - - - | - * {@link Interaction} |
- -65 - | -- - - - - - | - * @return <code>this</code> |
- -66 - | -- - - - - - | - */ |
- -67 - | -- - - - - - | - public MutableFieldAddress message( Function<Interaction, Message> m ) { |
- -68 - | -- - - - - - | - message = m; |
- -69 - | -
-
-1
-
-1. message : replaced return value with null for com/mastercard/test/flow/builder/mutable/MutableFieldAddress::message → KILLED - - - - |
- return this; |
- -70 - | -- - - - - - | - } |
- -71 - | -- - - - - - | -|
- -72 - | -- - - - - - | - /** |
- -73 - | -- - - - - - | - * Defines the addressed field within the {@link Message} |
- -74 - | -- - - - - - | - * |
- -75 - | -- - - - - - | - * @param f The field address in the {@link Message} |
- -76 - | -- - - - - - | - * @return <code>this</code> |
- -77 - | -- - - - - - | - */ |
- -78 - | -- - - - - - | - public MutableFieldAddress field( String f ) { |
- -79 - | -- - - - - - | - field = f; |
- -80 - | -
-
-1
-
-1. field : replaced return value with null for com/mastercard/test/flow/builder/mutable/MutableFieldAddress::field → KILLED - - - - |
- return this; |
- -81 - | -- - - - - - | - } |
- -82 - | -- - - - - - | -|
- -83 - | -- - - - - - | - /** |
- -84 - | -- - - - - - | - * Builds an immutable copy of the current state |
- -85 - | -- - - - - - | - * |
- -86 - | -- - - - - - | - * @param defaultFlow The {@link Flow} to use if the {@link Flow} in this object |
- -87 - | -- - - - - - | - * is <code>null</code> |
- -88 - | -- - - - - - | - * @return The immutable version of the current state |
- -89 - | -- - - - - - | - */ |
- -90 - | -- - - - - - | - public ConcreteFieldAddress build( Flow defaultFlow ) { |
- -91 - | -
-
-2
-
-1. build : negated conditional → KILLED -2. build : replaced return value with null for com/mastercard/test/flow/builder/mutable/MutableFieldAddress::build → KILLED - - - - |
- return new ConcreteFieldAddress( flow != null ? flow : defaultFlow, |
- -92 - | -- - - - - - | - interaction, message, field ); |
- -93 - | -- - - - - - | - } |
- -94 - | -- - - - - - | -} |
Mutations | ||
45 | -- |
-
-
-
- 1.1 |
-
57 | -- |
-
-
-
- 1.1 |
-
69 | -- |
-
-
-
- 1.1 |
-
80 | -- |
-
-
-
- 1.1 |
-
91 | -- |
-
-
-
- 1.1 2.2 |
-
- -1 - | -- - - - - - | -package com.mastercard.test.flow.builder.steps; |
- -2 - | -- - - - - - | -|
- -3 - | -- - - - - - | -import java.util.function.Function; |
- -4 - | -- - - - - - | -|
- -5 - | -- - - - - - | -import com.mastercard.test.flow.Interaction; |
- -6 - | -- - - - - - | -import com.mastercard.test.flow.Message; |
- -7 - | -- - - - - - | -import com.mastercard.test.flow.builder.mutable.MutableInteraction; |
- -8 - | -- - - - - - | -|
- -9 - | -- - - - - - | -/** |
- -10 - | -- - - - - - | - * The final stage of defining an {@link Interaction} - defining what happens as |
- -11 - | -- - - - - - | - * a result of the request being processed |
- -12 - | -- - - - - - | - * |
- -13 - | -- - - - - - | - * @param <R> The type that initiated the call sequence |
- -14 - | -- - - - - - | - */ |
- -15 - | -- - - - - - | -public class Response<R> { |
- -16 - | -- - - - - - | -|
- -17 - | -- - - - - - | - private final R returnTo; |
- -18 - | -- - - - - - | - private final MutableInteraction build; |
- -19 - | -- - - - - - | -|
- -20 - | -- - - - - - | - /** |
- -21 - | -- - - - - - | - * @param returnTo The object to return control to when the call sequence is |
- -22 - | -- - - - - - | - * complete |
- -23 - | -- - - - - - | - * @param build The interaction that we're building |
- -24 - | -- - - - - - | - */ |
- -25 - | -- - - - - - | - Response( R returnTo, MutableInteraction build ) { |
- -26 - | -- - - - - - | - this.returnTo = returnTo; |
- -27 - | -- - - - - - | - this.build = build; |
- -28 - | -- - - - - - | - } |
- -29 - | -- - - - - - | -|
- -30 - | -- - - - - - | - /** |
- -31 - | -- - - - - - | - * The request has triggered a another |
- -32 - | -- - - - - - | - * |
- -33 - | -- - - - - - | - * @param call How to define the child request |
- -34 - | -- - - - - - | - * @return <code>this</code> |
- -35 - | -- - - - - - | - */ |
- -36 - | -- - - - - - | - public Response<R> call( Function<To<Response<R>>, Response<R>> call ) { |
- -37 - | -- - - - - - | - MutableInteraction ntr = new MutableInteraction( build ); |
- -38 - | -- - - - - - | - To<Response<R>> c = new To<>( this, ntr ); |
- -39 - | -- - - - - - | - Response<R> ret = call.apply( c ); |
- -40 - | -
-
-1
-
-1. call : negated conditional → KILLED - - - - |
- if( ret != this ) { |
- -41 - | -- - - - - - | - throw new IllegalStateException( "Failed to return to origin" ); |
- -42 - | -- - - - - - | - } |
- -43 - | -- - - - - - | - build.children( l -> l.add( ntr ) ); |
- -44 - | -
-
-1
-
-1. call : replaced return value with null for com/mastercard/test/flow/builder/steps/Response::call → KILLED - - - - |
- return ret; |
- -45 - | -- - - - - - | - } |
- -46 - | -- - - - - - | -|
- -47 - | -- - - - - - | - /** |
- -48 - | -- - - - - - | - * Sets the content of the interaction response |
- -49 - | -- - - - - - | - * |
- -50 - | -- - - - - - | - * @param msg the response to the request |
- -51 - | -- - - - - - | - * @return the call initiator |
- -52 - | -- - - - - - | - */ |
- -53 - | -- - - - - - | - public R response( Message msg ) { |
- -54 - | -- - - - - - | - build.response( msg ); |
- -55 - | -
-
-1
-
-1. response : replaced return value with null for com/mastercard/test/flow/builder/steps/Response::response → KILLED - - - - |
- return returnTo; |
- -56 - | -- - - - - - | - } |
- -57 - | -- - - - - - | -} |
Mutations | ||
40 | -- |
-
-
-
- 1.1 |
-
44 | -- |
-
-
-
- 1.1 |
-
55 | -- |
-
-
-
- 1.1 |
-
- -1 - | -- - - - - - | -package com.mastercard.test.flow.report.duct; |
- -2 - | -- - - - - - | -|
- -3 - | -- - - - - - | -import static com.mastercard.test.flow.report.FailureSink.SILENT; |
- -4 - | -- - - - - - | -import static java.util.stream.Collectors.joining; |
- -5 - | -- - - - - - | -|
- -6 - | -- - - - - - | -import java.awt.GraphicsEnvironment; |
- -7 - | -- - - - - - | -import java.io.File; |
- -8 - | -- - - - - - | -import java.net.URL; |
- -9 - | -- - - - - - | -import java.nio.file.Files; |
- -10 - | -- - - - - - | -import java.nio.file.Path; |
- -11 - | -- - - - - - | -import java.nio.file.Paths; |
- -12 - | -- - - - - - | -import java.time.Duration; |
- -13 - | -- - - - - - | -import java.time.Instant; |
- -14 - | -- - - - - - | -import java.time.temporal.ChronoUnit; |
- -15 - | -- - - - - - | -import java.util.ArrayList; |
- -16 - | -- - - - - - | -import java.util.Collection; |
- -17 - | -- - - - - - | -import java.util.HashMap; |
- -18 - | -- - - - - - | -import java.util.List; |
- -19 - | -- - - - - - | -import java.util.Map; |
- -20 - | -- - - - - - | -import java.util.Objects; |
- -21 - | -- - - - - - | -import java.util.prefs.Preferences; |
- -22 - | -- - - - - - | -import java.util.stream.Stream; |
- -23 - | -- - - - - - | -|
- -24 - | -- - - - - - | -import org.slf4j.Logger; |
- -25 - | -- - - - - - | -import org.slf4j.LoggerFactory; |
- -26 - | -- - - - - - | -|
- -27 - | -- - - - - - | -import com.mastercard.test.flow.report.FailureSink; |
- -28 - | -- - - - - - | -import com.mastercard.test.flow.report.LocalBrowse; |
- -29 - | -- - - - - - | -import com.mastercard.test.flow.report.Reader; |
- -30 - | -- - - - - - | -import com.mastercard.test.flow.report.Writer; |
- -31 - | -- - - - - - | -import com.mastercard.test.flow.report.data.Index; |
- -32 - | -- - - - - - | -import com.mastercard.test.flow.report.duct.HttpClient.Response; |
- -33 - | -- - - - - - | -import com.mastercard.test.flow.util.Option; |
- -34 - | -- - - - - - | -|
- -35 - | -- - - - - - | -/** |
- -36 - | -- - - - - - | - * An application that lives in the system tray and serves flow reports. |
- -37 - | -- - - - - - | - */ |
- -38 - | -- - - - - - | -public class Duct { |
- -39 - | -- - - - - - | -|
- -40 - | -- - - - - - | - /** |
- -41 - | -- - - - - - | - * Will be supplied with diagnostic data for duct initialisation failures. This |
- -42 - | -- - - - - - | - * framework does not assume that clients use a logging framework, and it tries |
- -43 - | -- - - - - - | - * to keep silent on stdout. <i>This</i> class uses slf4j for the bulk of |
- -44 - | -- - - - - - | - * operations, but those will be running in a different process to the test. The |
- -45 - | -- - - - - - | - * interaction between the test and the duct process (where we can't use slf4j) |
- -46 - | -- - - - - - | - * does a bunch of failure-prone things though, so it's nice to have the option |
- -47 - | -- - - - - - | - * of seeing the issues when you're wondering why your report is not being |
- -48 - | -- - - - - - | - * served. |
- -49 - | -- - - - - - | - */ |
- -50 - | -- - - - - - | - private static FailureSink debug = SILENT; |
- -51 - | -- - - - - - | -|
- -52 - | -- - - - - - | - /** |
- -53 - | -- - - - - - | - * Allows insight into failures of duct launch behaviour |
- -54 - | -- - - - - - | - * |
- -55 - | -- - - - - - | - * @param sink Will be supplied with duct launch failure diagnostics |
- -56 - | -- - - - - - | - */ |
- -57 - | -- - - - - - | - public static void debuggingTo( FailureSink sink ) { |
- -58 - | -- - - - - - | - debug = sink; |
- -59 - | -- - - - - - | - } |
- -60 - | -- - - - - - | -|
- -61 - | -- - - - - - | - /** |
- -62 - | -- - - - - - | - * Allows control over whether a duct gui is shown or not |
- -63 - | -- - - - - - | - */ |
- -64 - | -- - - - - - | - public static final Option GUI_SUPPRESS = new Option.Builder() |
- -65 - | -- - - - - - | - .property( "mctf.suppress.duct.gui" ) |
- -66 - | -- - - - - - | - .description( "Supply 'true' to suppress the duct gui" ); |
- -67 - | -- - - - - - | -|
- -68 - | -- - - - - - | - /** |
- -69 - | -- - - - - - | - * The preference name where we save our index directories |
- -70 - | -- - - - - - | - */ |
- -71 - | -- - - - - - | - static final String SERVED_REPORT_PATHS_PREF = "served_report_paths"; |
- -72 - | -- - - - - - | - /** |
- -73 - | -- - - - - - | - * Our preferences object |
- -74 - | -- - - - - - | - */ |
- -75 - | -- - - - - - | - static final Preferences PREFS = Preferences.userNodeForPackage( Duct.class ); |
- -76 - | -- - - - - - | -|
- -77 - | -- - - - - - | - /** |
- -78 - | -- - - - - - | - * Application entrypoint |
- -79 - | -- - - - - - | - * |
- -80 - | -- - - - - - | - * @param args List of report paths to serve and browse |
- -81 - | -- - - - - - | - */ |
- -82 - | -- - - - - - | - public static void main( String... args ) { |
- -83 - | -- - - - - - | - Duct duct = new Duct(); |
- -84 - | -
-
-1
-
-1. main : removed call to com/mastercard/test/flow/report/duct/Duct::start → SURVIVED - - - - |
- duct.start(); |
- -85 - | -- - - - - - | - Stream.of( args ) |
- -86 - | -
-
-1
-
-1. lambda$main$0 : replaced return value with null for com/mastercard/test/flow/report/duct/Duct::lambda$main$0 → RUN_ERROR - - - - |
- .map( Paths::get ) |
- -87 - | -- - - - - - | - .map( Path::toAbsolutePath ) |
- -88 - | -- - - - - - | - .map( duct::add ) |
- -89 - | -- - - - - - | - .filter( Objects::nonNull ) |
- -90 - | -
-
-1
-
-1. lambda$main$1 : replaced return value with "" for com/mastercard/test/flow/report/duct/Duct::lambda$main$1 → SURVIVED - - - - |
- .map( path -> "http://localhost:" + PORT + path ) |
- -91 - | -
-
-2
-
-1. lambda$main$2 : removed call to com/mastercard/test/flow/report/LocalBrowse::to → SURVIVED -2. main : removed call to java/util/stream/Stream::forEach → KILLED - - - - |
- .forEach( served -> LocalBrowse.WITH_AWT.to( served, LOG::info ) ); |
- -92 - | -- - - - - - | - } |
- -93 - | -- - - - - - | -|
- -94 - | -- - - - - - | - /** |
- -95 - | -- - - - - - | - * Makes a best-effort attempt at serving a report via {@link Duct} and opening |
- -96 - | -- - - - - - | - * a browser to it. This might involve starting a fresh instance of the duct |
- -97 - | -- - - - - - | - * application. It might fail silently |
- -98 - | -- - - - - - | - * |
- -99 - | -- - - - - - | - * @param report The report directory to serve |
- -100 - | -- - - - - - | - */ |
- -101 - | -- - - - - - | - public static void serve( Path report ) { |
- -102 - | -- - - - - - | - // try adding via http request |
- -103 - | -- - - - - - | - URL added = tryAdd( report ); |
- -104 - | -
-
-1
-
-1. serve : negated conditional → KILLED - - - - |
- if( added != null ) { |
- -105 - | -- - - - - - | - // there's an existing instance! |
- -106 - | -
-
-1
-
-1. serve : removed call to com/mastercard/test/flow/report/LocalBrowse::to → SURVIVED - - - - |
- LocalBrowse.WITH_AWT.to( added, debug ); |
- -107 - | -- - - - - - | - } |
- -108 - | -- - - - - - | - else { |
- -109 - | -
-
-1
-
-1. serve : removed call to com/mastercard/test/flow/report/duct/Spawn::launchFor → RUN_ERROR - - - - |
- Spawn.launchFor( report, debug ); |
- -110 - | -- - - - - - | - } |
- -111 - | -- - - - - - | - } |
- -112 - | -- - - - - - | -|
- -113 - | -- - - - - - | - /** |
- -114 - | -- - - - - - | - * Attempts to add a report to an existing duct instance |
- -115 - | -- - - - - - | - * |
- -116 - | -- - - - - - | - * @return The URL of the served report, or <code>null</code> if the request |
- -117 - | -- - - - - - | - * failed, perhaps because there <i>was</i> no existing duct instance |
- -118 - | -- - - - - - | - */ |
- -119 - | -- - - - - - | - private static URL tryAdd( Path report ) { |
- -120 - | -- - - - - - | - Response<String> res = HttpClient.request( |
- -121 - | -- - - - - - | - "http://localhost:" + PORT + "/add", |
- -122 - | -- - - - - - | - "POST", |
- -123 - | -- - - - - - | - report.toAbsolutePath().toString() ); |
- -124 - | -- - - - - - | -|
- -125 - | -
-
-1
-
-1. tryAdd : negated conditional → SURVIVED - - - - |
- if( res.code != 200 ) { |
- -126 - | -
-
-1
-
-1. tryAdd : removed call to com/mastercard/test/flow/report/FailureSink::log → KILLED - - - - |
- debug.log( "Unsuccessful addition response\n:{}", res ); |
- -127 - | -- - - - - - | - return null; |
- -128 - | -- - - - - - | - } |
- -129 - | -- - - - - - | -|
- -130 - | -
-
-1
-
-1. tryAdd : negated conditional → SURVIVED - - - - |
- if( !res.body.matches( "[\\w/]+" ) ) { |
- -131 - | -
-
-1
-
-1. tryAdd : removed call to com/mastercard/test/flow/report/FailureSink::log → NO_COVERAGE - - - - |
- debug.log( "Declining to browse dubious path '{}", res.body ); |
- -132 - | -- - - - - - | - return null; |
- -133 - | -- - - - - - | - } |
- -134 - | -- - - - - - | -|
- -135 - | -- - - - - - | - try { |
- -136 - | -
-
-1
-
-1. tryAdd : replaced return value with null for com/mastercard/test/flow/report/duct/Duct::tryAdd → SURVIVED - - - - |
- return new URL( String.format( "http://localhost:%s/%s", PORT, res.body ) ); |
- -137 - | -- - - - - - | - } |
- -138 - | -- - - - - - | - catch( Exception e ) { |
- -139 - | -
-
-1
-
-1. tryAdd : removed call to com/mastercard/test/flow/report/FailureSink::log → NO_COVERAGE - - - - |
- debug.log( "Failed to parse '{}' as a url", res.body, e ); |
- -140 - | -- - - - - - | - return null; |
- -141 - | -- - - - - - | - } |
- -142 - | -- - - - - - | - } |
- -143 - | -- - - - - - | -|
- -144 - | -- - - - - - | - /** |
- -145 - | -- - - - - - | - * How long a {@link Duct} instance will live without heartbeat requests |
- -146 - | -- - - - - - | - */ |
- -147 - | -- - - - - - | - private static final Duration LIFESPAN = Duration.of( 90, ChronoUnit.SECONDS ); |
- -148 - | -- - - - - - | -|
- -149 - | -- - - - - - | - /** |
- -150 - | -- - - - - - | - * The port that {@link Duct} will serve on |
- -151 - | -- - - - - - | - */ |
- -152 - | -- - - - - - | - public static final int PORT = 2276; |
- -153 - | -- - - - - - | -|
- -154 - | -- - - - - - | - /** |
- -155 - | -- - - - - - | - * The directory that holds our index application and log file |
- -156 - | -- - - - - - | - */ |
- -157 - | -- - - - - - | - static final Path INDEX_DIRECTORY = Paths.get( System.getProperty( "java.io.tmpdir" ) ) |
- -158 - | -- - - - - - | - .resolve( "mctf_duct" ); |
- -159 - | -- - - - - - | -|
- -160 - | -- - - - - - | - private static final Logger LOG; |
- -161 - | -- - - - - - | - static { |
- -162 - | -- - - - - - | - // logger initialisation has to happen *after* the index directory is known |
- -163 - | -- - - - - - | - try { |
- -164 - | -- - - - - - | - Files.createDirectories( INDEX_DIRECTORY ); |
- -165 - | -- - - - - - | - System.setProperty( "org.slf4j.simpleLogger.logFile", |
- -166 - | -- - - - - - | - INDEX_DIRECTORY.resolve( "log.txt" ).toAbsolutePath().toString() ); |
- -167 - | -- - - - - - | - LOG = LoggerFactory.getLogger( Duct.class ); |
- -168 - | -- - - - - - | -|
- -169 - | -- - - - - - | - LOG.info( "Creating index files" ); |
- -170 - | -- - - - - - | - Writer.writeDuctIndex( INDEX_DIRECTORY ); |
- -171 - | -- - - - - - | - } |
- -172 - | -- - - - - - | - catch( Exception e ) { |
- -173 - | -- - - - - - | - throw new IllegalStateException( "Failed to create index directory", e ); |
- -174 - | -- - - - - - | - } |
- -175 - | -- - - - - - | - } |
- -176 - | -- - - - - - | -|
- -177 - | -- - - - - - | - private final Gui gui; |
- -178 - | -- - - - - - | - private final Server server = new Server( this, PORT ); |
- -179 - | -- - - - - - | - private Instant expiry = Instant.now(); |
- -180 - | -- - - - - - | - private Map<Path, ReportSummary> index = new HashMap<>(); |
- -181 - | -- - - - - - | -|
- -182 - | -- - - - - - | - /** |
- -183 - | -- - - - - - | - * Constructs a new {@link Duct} instance |
- -184 - | -- - - - - - | - */ |
- -185 - | -- - - - - - | - public Duct() { |
- -186 - | -
-
-2
-
-1. <init> : negated conditional → SURVIVED -2. <init> : negated conditional → KILLED - - - - |
- if( GUI_SUPPRESS.isTrue() || GraphicsEnvironment.isHeadless() ) { |
- -187 - | -- - - - - - | - gui = new HeadlessGui(); |
- -188 - | -- - - - - - | - } |
- -189 - | -- - - - - - | - else { |
- -190 - | -- - - - - - | - gui = new SystrayGui( this ); |
- -191 - | -- - - - - - | - } |
- -192 - | -- - - - - - | - } |
- -193 - | -- - - - - - | -|
- -194 - | -- - - - - - | - /** |
- -195 - | -- - - - - - | - * Starts duct. The GUI will be shown and the server kicked off |
- -196 - | -- - - - - - | - */ |
- -197 - | -- - - - - - | - public void start() { |
- -198 - | -
-
-1
-
-1. start : removed call to com/mastercard/test/flow/report/duct/Gui::show → SURVIVED - - - - |
- gui.show(); |
- -199 - | -- - - - - - | -|
- -200 - | -
-
-1
-
-1. start : removed call to com/mastercard/test/flow/report/duct/Server::start → KILLED - - - - |
- server.start(); |
- -201 - | -- - - - - - | - // map the index page routes |
- -202 - | -
-
-1
-
-1. start : removed call to com/mastercard/test/flow/report/duct/Server::map → SURVIVED - - - - |
- server.map( "/", INDEX_DIRECTORY ); |
- -203 - | -- - - - - - | -|
- -204 - | -- - - - - - | - // load the saved report directories |
- -205 - | -- - - - - - | - Stream.of( PREFS.get( SERVED_REPORT_PATHS_PREF, "" ) |
- -206 - | -- - - - - - | - .split( File.pathSeparator ) ) |
- -207 - | -
-
-2
-
-1. lambda$start$3 : negated conditional → RUN_ERROR -2. lambda$start$3 : replaced boolean return with true for com/mastercard/test/flow/report/duct/Duct::lambda$start$3 → RUN_ERROR - - - - |
- .filter( s -> !s.isEmpty() ) |
- -208 - | -
-
-1
-
-1. lambda$start$4 : replaced return value with null for com/mastercard/test/flow/report/duct/Duct::lambda$start$4 → KILLED - - - - |
- .map( Paths::get ) |
- -209 - | -
-
-1
-
-1. start : removed call to java/util/stream/Stream::forEach → KILLED - - - - |
- .forEach( p -> index.put( p, null ) ); |
- -210 - | -- - - - - - | -|
- -211 - | -
-
-1
-
-1. start : removed call to com/mastercard/test/flow/report/duct/Duct::reindex → KILLED - - - - |
- reindex(); |
- -212 - | -- - - - - - | -|
- -213 - | -- - - - - - | - expiry = Instant.now().plus( LIFESPAN ); |
- -214 - | -
-
-1
-
-1. start : removed call to com/mastercard/test/flow/report/duct/Reaper::start → SURVIVED - - - - |
- new Reaper( this ).start(); |
- -215 - | -- - - - - - | - } |
- -216 - | -- - - - - - | -|
- -217 - | -- - - - - - | - /** |
- -218 - | -- - - - - - | - * Shuts down the server and hides the GUI. The JVM will be free to exit after |
- -219 - | -- - - - - - | - * this. |
- -220 - | -- - - - - - | - */ |
- -221 - | -- - - - - - | - public void stop() { |
- -222 - | -
-
-1
-
-1. stop : removed call to com/mastercard/test/flow/report/duct/Server::stop → TIMED_OUT - - - - |
- server.stop(); |
- -223 - | -
-
-1
-
-1. stop : removed call to com/mastercard/test/flow/report/duct/Gui::hide → SURVIVED - - - - |
- gui.hide(); |
- -224 - | -- - - - - - | - } |
- -225 - | -- - - - - - | -|
- -226 - | -- - - - - - | - /** |
- -227 - | -- - - - - - | - * Extends the lifespan |
- -228 - | -- - - - - - | - * |
- -229 - | -- - - - - - | - * @return the new expiry |
- -230 - | -- - - - - - | - */ |
- -231 - | -- - - - - - | - public Instant heartbeat() { |
- -232 - | -- - - - - - | - expiry = Instant.now().plus( LIFESPAN ); |
- -233 - | -- - - - - - | - LOG.debug( "beep! life extended to {}", expiry ); |
- -234 - | -
-
-1
-
-1. heartbeat : replaced return value with null for com/mastercard/test/flow/report/duct/Duct::heartbeat → KILLED - - - - |
- return expiry; |
- -235 - | -- - - - - - | - } |
- -236 - | -- - - - - - | -|
- -237 - | -- - - - - - | - /** |
- -238 - | -- - - - - - | - * Gets the time at which duct should shut down |
- -239 - | -- - - - - - | - * |
- -240 - | -- - - - - - | - * @return The expiry time |
- -241 - | -- - - - - - | - */ |
- -242 - | -- - - - - - | - Instant expiry() { |
- -243 - | -
-
-1
-
-1. expiry : replaced return value with null for com/mastercard/test/flow/report/duct/Duct::expiry → RUN_ERROR - - - - |
- return expiry; |
- -244 - | -- - - - - - | - } |
- -245 - | -- - - - - - | -|
- -246 - | -- - - - - - | - /** |
- -247 - | -- - - - - - | - * Adds a report to be served |
- -248 - | -- - - - - - | - * |
- -249 - | -- - - - - - | - * @param source The report directory |
- -250 - | -- - - - - - | - * @return The served report path, or <code>null</code> on failure |
- -251 - | -- - - - - - | - */ |
- -252 - | -- - - - - - | - public String add( Path source ) { |
- -253 - | -- - - - - - | - heartbeat(); |
- -254 - | -- - - - - - | -|
- -255 - | -
-
-1
-
-1. add : negated conditional → KILLED - - - - |
- if( !Reader.isReportDir( source ) ) { |
- -256 - | -- - - - - - | - LOG.error( "{} is not a report", source ); |
- -257 - | -
-
-1
-
-1. add : replaced return value with "" for com/mastercard/test/flow/report/duct/Duct::add → RUN_ERROR - - - - |
- return null; |
- -258 - | -- - - - - - | - } |
- -259 - | -- - - - - - | -|
- -260 - | -- - - - - - | - LOG.info( "Adding {}", source ); |
- -261 - | -- - - - - - | -|
- -262 - | -- - - - - - | - try { |
- -263 - | -- - - - - - | - Index idx = new Reader( source ).read(); |
- -264 - | -- - - - - - | -|
- -265 - | -- - - - - - | - String servedPath = String.format( "/%s/", source.toString().replaceAll( "\\W+", "_" ) ); |
- -266 - | -
-
-1
-
-1. add : removed call to com/mastercard/test/flow/report/duct/Server::map → KILLED - - - - |
- server.map( servedPath, source ); |
- -267 - | -- - - - - - | - index.put( source, new ReportSummary( idx, servedPath ) ); |
- -268 - | -- - - - - - | -|
- -269 - | -
-
-1
-
-1. add : removed call to java/util/prefs/Preferences::put → KILLED - - - - |
- PREFS.put( SERVED_REPORT_PATHS_PREF, index.keySet().stream() |
- -270 - | -- - - - - - | - .map( Path::toString ) |
- -271 - | -- - - - - - | - .collect( joining( File.pathSeparator ) ) ); |
- -272 - | -- - - - - - | -|
- -273 - | -
-
-1
-
-1. add : replaced return value with "" for com/mastercard/test/flow/report/duct/Duct::add → RUN_ERROR - - - - |
- return servedPath; |
- -274 - | -- - - - - - | - } |
- -275 - | -- - - - - - | - catch( Exception e ) { |
- -276 - | -- - - - - - | - LOG.error( "Failed to add {}", source, e ); |
- -277 - | -
-
-1
-
-1. add : replaced return value with "" for com/mastercard/test/flow/report/duct/Duct::add → KILLED - - - - |
- return null; |
- -278 - | -- - - - - - | - } |
- -279 - | -- - - - - - | - } |
- -280 - | -- - - - - - | -|
- -281 - | -- - - - - - | - /** |
- -282 - | -- - - - - - | - * @return The port that {@link Duct} is serving on |
- -283 - | -- - - - - - | - */ |
- -284 - | -- - - - - - | - int port() { |
- -285 - | -
-
-1
-
-1. port : replaced int return with 0 for com/mastercard/test/flow/report/duct/Duct::port → KILLED - - - - |
- return server.port(); |
- -286 - | -- - - - - - | - } |
- -287 - | -- - - - - - | -|
- -288 - | -- - - - - - | - /** |
- -289 - | -- - - - - - | - * Clears the index |
- -290 - | -- - - - - - | - */ |
- -291 - | -- - - - - - | - public void clearIndex() { |
- -292 - | -
-
-1
-
-1. clearIndex : removed call to java/util/Set::forEach → SURVIVED - - - - |
- index.keySet().forEach( server::unmap ); |
- -293 - | -
-
-1
-
-1. clearIndex : removed call to java/util/Map::clear → RUN_ERROR - - - - |
- index.clear(); |
- -294 - | -
-
-1
-
-1. clearIndex : removed call to java/util/prefs/Preferences::remove → SURVIVED - - - - |
- PREFS.remove( SERVED_REPORT_PATHS_PREF ); |
- -295 - | -- - - - - - | - } |
- -296 - | -- - - - - - | -|
- -297 - | -- - - - - - | - /** |
- -298 - | -- - - - - - | - * Regenerates the served index list |
- -299 - | -- - - - - - | - */ |
- -300 - | -- - - - - - | - public void reindex() { |
- -301 - | -- - - - - - | - LOG.info( "Regenerating index" ); |
- -302 - | -- - - - - - | - List<Path> dirs = new ArrayList<>( index.keySet() ); |
- -303 - | -- - - - - - | - List<Path> toRemove = new ArrayList<>(); |
- -304 - | -- - - - - - | -|
- -305 - | -- - - - - - | - // try to remap each of our existing reports |
- -306 - | -
-
-1
-
-1. reindex : removed call to java/util/List::forEach → RUN_ERROR - - - - |
- dirs.forEach( dir -> { |
- -307 - | -
-
-1
-
-1. lambda$reindex$6 : negated conditional → KILLED - - - - |
- if( add( dir ) == null ) { |
- -308 - | -- - - - - - | - // if they failed to map then we should remove it from the index |
- -309 - | -- - - - - - | - toRemove.add( dir ); |
- -310 - | -- - - - - - | - } |
- -311 - | -- - - - - - | - } ); |
- -312 - | -- - - - - - | -|
- -313 - | -
-
-1
-
-1. reindex : removed call to java/util/List::forEach → SURVIVED - - - - |
- toRemove.forEach( index::remove ); |
- -314 - | -- - - - - - | - } |
- -315 - | -- - - - - - | -|
- -316 - | -- - - - - - | - /** |
- -317 - | -- - - - - - | - * Gets a summary of served reports |
- -318 - | -- - - - - - | - * |
- -319 - | -- - - - - - | - * @return served report summaries |
- -320 - | -- - - - - - | - */ |
- -321 - | -- - - - - - | - Collection<ReportSummary> index() { |
- -322 - | -
-
-1
-
-1. index : replaced return value with Collections.emptyList for com/mastercard/test/flow/report/duct/Duct::index → KILLED - - - - |
- return index.values(); |
- -323 - | -- - - - - - | - } |
- -324 - | -- - - - - - | -} |
Mutations | ||
84 | -- |
-
-
-
- 1.1 |
-
86 | -- |
-
-
-
- 1.1 |
-
90 | -- |
-
-
-
- 1.1 |
-
91 | -- |
-
-
-
- 1.1 2.2 |
-
104 | -- |
-
-
-
- 1.1 |
-
106 | -- |
-
-
-
- 1.1 |
-
109 | -- |
-
-
-
- 1.1 |
-
125 | -- |
-
-
-
- 1.1 |
-
126 | -- |
-
-
-
- 1.1 |
-
130 | -- |
-
-
-
- 1.1 |
-
131 | -- |
-
-
-
- 1.1 |
-
136 | -- |
-
-
-
- 1.1 |
-
139 | -- |
-
-
-
- 1.1 |
-
186 | -- |
-
-
-
- 1.1 2.2 |
-
198 | -- |
-
-
-
- 1.1 |
-
200 | -- |
-
-
-
- 1.1 |
-
202 | -- |
-
-
-
- 1.1 |
-
207 | -- |
-
-
-
- 1.1 2.2 |
-
208 | -- |
-
-
-
- 1.1 |
-
209 | -- |
-
-
-
- 1.1 |
-
211 | -- |
-
-
-
- 1.1 |
-
214 | -- |
-
-
-
- 1.1 |
-
222 | -- |
-
-
-
- 1.1 |
-
223 | -- |
-
-
-
- 1.1 |
-
234 | -- |
-
-
-
- 1.1 |
-
243 | -- |
-
-
-
- 1.1 |
-
255 | -- |
-
-
-
- 1.1 |
-
257 | -- |
-
-
-
- 1.1 |
-
266 | -- |
-
-
-
- 1.1 |
-
269 | -- |
-
-
-
- 1.1 |
-
273 | -- |
-
-
-
- 1.1 |
-
277 | -- |
-
-
-
- 1.1 |
-
285 | -- |
-
-
-
- 1.1 |
-
292 | -- |
-
-
-
- 1.1 |
-
293 | -- |
-
-
-
- 1.1 |
-
294 | -- |
-
-
-
- 1.1 |
-
306 | -- |
-
-
-
- 1.1 |
-
307 | -- |
-
-
-
- 1.1 |
-
313 | -- |
-
-
-
- 1.1 |
-
322 | -- |
-
-
-
- 1.1 |
-
- -1 - | -- - - - - - | -|
- -2 - | -- - - - - - | -package com.mastercard.test.flow.util; |
- -3 - | -- - - - - - | -|
- -4 - | -- - - - - - | -import static java.nio.charset.StandardCharsets.UTF_8; |
- -5 - | -- - - - - - | -import static java.util.Collections.emptyList; |
- -6 - | -- - - - - - | -|
- -7 - | -- - - - - - | -import java.util.ArrayList; |
- -8 - | -- - - - - - | -import java.util.HashMap; |
- -9 - | -- - - - - - | -import java.util.List; |
- -10 - | -- - - - - - | -import java.util.Map; |
- -11 - | -- - - - - - | -import java.util.stream.Collectors; |
- -12 - | -- - - - - - | -import java.util.stream.Stream; |
- -13 - | -- - - - - - | -|
- -14 - | -- - - - - - | -import com.mastercard.test.flow.Dependency; |
- -15 - | -- - - - - - | -import com.mastercard.test.flow.Flow; |
- -16 - | -- - - - - - | -import com.mastercard.test.flow.Interaction; |
- -17 - | -- - - - - - | -import com.mastercard.test.flow.Message; |
- -18 - | -- - - - - - | -|
- -19 - | -- - - - - - | -/** |
- -20 - | -- - - - - - | - * Utility for processing dependencies as tests results become available |
- -21 - | -- - - - - - | - */ |
- -22 - | -- - - - - - | -public class Dependencies { |
- -23 - | -- - - - - - | -|
- -24 - | -- - - - - - | - /** |
- -25 - | -- - - - - - | - * A map from {@link Flow}s to the dependencies that flow from them |
- -26 - | -- - - - - - | - */ |
- -27 - | -- - - - - - | - private final Map<Flow, List<Dependency>> publishers = new HashMap<>(); |
- -28 - | -- - - - - - | -|
- -29 - | -- - - - - - | - /** |
- -30 - | -- - - - - - | - * @param flows The flows that are to be processed |
- -31 - | -- - - - - - | - */ |
- -32 - | -- - - - - - | - public Dependencies( Stream<Flow> flows ) { |
- -33 - | -- - - - - - | - flows.flatMap( Flow::dependencies ) |
- -34 - | -
-
-3
-
-1. lambda$new$0 : replaced boolean return with true for com/mastercard/test/flow/util/Dependencies::lambda$new$0 → KILLED -2. lambda$new$0 : negated conditional → KILLED -3. lambda$new$0 : negated conditional → KILLED - - - - |
- .filter( d -> d.source().isComplete() && d.sink().isComplete() ) |
- -35 - | -
-
-1
-
-1. <init> : removed call to java/util/stream/Stream::forEach → KILLED - - - - |
- .forEach( dep -> publishers |
- -36 - | -
-
-1
-
-1. lambda$null$1 : replaced return value with Collections.emptyList for com/mastercard/test/flow/util/Dependencies::lambda$null$1 → KILLED - - - - |
- .computeIfAbsent( dep.source().flow(), f -> new ArrayList<>() ) |
- -37 - | -- - - - - - | - .add( dep ) ); |
- -38 - | -- - - - - - | - } |
- -39 - | -- - - - - - | -|
- -40 - | -- - - - - - | - /** |
- -41 - | -- - - - - - | - * Called when an interaction has been processed against the system under test |
- -42 - | -- - - - - - | - * |
- -43 - | -- - - - - - | - * @param flow The {@link Flow} that contains the {@link Interaction} |
- -44 - | -- - - - - - | - * @param ntr The {@link Interaction} that has been processed |
- -45 - | -- - - - - - | - * @param msg The {@link Message} for which we have actual content |
- -46 - | -- - - - - - | - * @param bytes The actual content as observed in the system |
- -47 - | -- - - - - - | - * @return The bytes, parsed as the expected message type |
- -48 - | -- - - - - - | - */ |
- -49 - | -- - - - - - | - public Message publish( Flow flow, Interaction ntr, Message msg, byte[] bytes ) { |
- -50 - | -- - - - - - | - List<Dependency> dependencies = publishers.getOrDefault( flow, emptyList() ) |
- -51 - | -- - - - - - | - .stream() |
- -52 - | -
-
-2
-
-1. lambda$publish$3 : replaced boolean return with true for com/mastercard/test/flow/util/Dependencies::lambda$publish$3 → KILLED -2. lambda$publish$3 : replaced boolean return with false for com/mastercard/test/flow/util/Dependencies::lambda$publish$3 → KILLED - - - - |
- .filter( dep -> dep.source().getInteraction().filter( ntr::equals ).isPresent() ) |
- -53 - | -
-
-2
-
-1. lambda$publish$4 : replaced boolean return with true for com/mastercard/test/flow/util/Dependencies::lambda$publish$4 → KILLED -2. lambda$publish$4 : replaced boolean return with false for com/mastercard/test/flow/util/Dependencies::lambda$publish$4 → KILLED - - - - |
- .filter( dep -> dep.source().getMessage().filter( msg::equals ).isPresent() ) |
- -54 - | -- - - - - - | - .collect( Collectors.toList() ); |
- -55 - | -- - - - - - | - try { |
- -56 - | -- - - - - - | - Message actual = msg.peer( bytes ); |
- -57 - | -- - - - - - | -|
- -58 - | -- - - - - - | - for( Dependency dependency : dependencies ) { |
- -59 - | -- - - - - - | - Object value = actual.get( dependency.source().field() ); |
- -60 - | -- - - - - - | - Object mutated = dependency.mutation().apply( value ); |
- -61 - | -- - - - - - | - dependency.sink().getMessage() |
- -62 - | -
-
-1
-
-1. publish : removed call to java/util/Optional::ifPresent → KILLED - - - - |
- .ifPresent( m -> m.set( dependency.sink().field(), mutated ) ); |
- -63 - | -- - - - - - | - } |
- -64 - | -- - - - - - | -|
- -65 - | -
-
-1
-
-1. publish : replaced return value with null for com/mastercard/test/flow/util/Dependencies::publish → KILLED - - - - |
- return actual; |
- -66 - | -- - - - - - | - } |
- -67 - | -- - - - - - | - catch( Exception e ) { |
- -68 - | -- - - - - - | - // we've harvested bad data from the system, let's give as much information as |
- -69 - | -- - - - - - | - // possible in the exception |
- -70 - | -- - - - - - | - throw new IllegalArgumentException( |
- -71 - | -- - - - - - | - String.format( "Failed to parse %s->%s %s %s from" |
- -72 - | -- - - - - - | - + "\nUTF8:[%s]" |
- -73 - | -- - - - - - | - + "\n hex:[%s]", |
- -74 - | -- - - - - - | - ntr.requester().name(), ntr.responder().name(), ntr.tags(), |
- -75 - | -- - - - - - | - msg.getClass().getSimpleName(), |
- -76 - | -- - - - - - | - new String( bytes, UTF_8 ), Bytes.toHex( bytes ) ), |
- -77 - | -- - - - - - | - e ); |
- -78 - | -- - - - - - | - } |
- -79 - | -- - - - - - | - } |
- -80 - | -- - - - - - | -|
- -81 - | -- - - - - - | - /** |
- -82 - | -- - - - - - | - * Processes the dependencies using the static data already in the system model |
- -83 - | -- - - - - - | - * |
- -84 - | -- - - - - - | - * @param flows The flows whose dependencies should be processed |
- -85 - | -- - - - - - | - */ |
- -86 - | -- - - - - - | - public static void propagateStaticData( Stream<Flow> flows ) { |
- -87 - | -- - - - - - | - Dependencies deps = new Dependencies( flows ); |
- -88 - | -- - - - - - | - deps.publishers.values().stream().flatMap( List::stream ) |
- -89 - | -
-
-1
-
-1. propagateStaticData : removed call to java/util/stream/Stream::forEach → KILLED - - - - |
- .forEach( dep -> deps.publish( |
- -90 - | -- - - - - - | - dep.source().flow(), |
- -91 - | -- - - - - - | - dep.source().getInteraction().get(), |
- -92 - | -- - - - - - | - dep.source().getMessage().get(), |
- -93 - | -- - - - - - | - dep.source().getMessage().get().content() ) ); |
- -94 - | -- - - - - - | - } |
- -95 - | -- - - - - - | -} |
Mutations | ||
34 | -- |
-
-
-
- 1.1 2.2 3.3 |
-
35 | -- |
-
-
-
- 1.1 |
-
36 | -- |
-
-
-
- 1.1 |
-
52 | -- |
-
-
-
- 1.1 2.2 |
-
53 | -- |
-
-
-
- 1.1 2.2 |
-
62 | -- |
-
-
-
- 1.1 |
-
65 | -- |
-
-
-
- 1.1 |
-
89 | -- |
-
-
-
- 1.1 |
-
- -1 - | -- - - - - - | -|
- -2 - | -- - - - - - | -package com.mastercard.test.flow.util; |
- -3 - | -- - - - - - | -|
- -4 - | -- - - - - - | -import java.util.Optional; |
- -5 - | -- - - - - - | -import java.util.Set; |
- -6 - | -- - - - - - | -import java.util.TreeSet; |
- -7 - | -- - - - - - | -import java.util.function.Consumer; |
- -8 - | -- - - - - - | -import java.util.stream.Collectors; |
- -9 - | -- - - - - - | -import java.util.stream.Stream; |
- -10 - | -- - - - - - | -|
- -11 - | -- - - - - - | -/** |
- -12 - | -- - - - - - | - * Functions for working with the {@link String} {@link Set}s used to hold tag |
- -13 - | -- - - - - - | - * data |
- -14 - | -- - - - - - | - */ |
- -15 - | -- - - - - - | -public class Tags { |
- -16 - | -- - - - - - | -|
- -17 - | -- - - - - - | - private Tags() { |
- -18 - | -- - - - - - | - // no instances |
- -19 - | -- - - - - - | - } |
- -20 - | -- - - - - - | -|
- -21 - | -- - - - - - | - /** |
- -22 - | -- - - - - - | - * Builds the empty set of tags |
- -23 - | -- - - - - - | - * |
- -24 - | -- - - - - - | - * @return The empty set |
- -25 - | -- - - - - - | - */ |
- -26 - | -- - - - - - | - public static Set<String> empty() { |
- -27 - | -
-
-1
-
-1. empty : replaced return value with Collections.emptySet for com/mastercard/test/flow/util/Tags::empty → KILLED - - - - |
- return tags(); |
- -28 - | -- - - - - - | - } |
- -29 - | -- - - - - - | -|
- -30 - | -- - - - - - | - /** |
- -31 - | -- - - - - - | - * Builds a set of tags |
- -32 - | -- - - - - - | - * |
- -33 - | -- - - - - - | - * @param tags tag values |
- -34 - | -- - - - - - | - * @return A {@link Set} of those values |
- -35 - | -- - - - - - | - */ |
- -36 - | -- - - - - - | - public static Set<String> tags( String... tags ) { |
- -37 - | -
-
-1
-
-1. tags : replaced return value with Collections.emptySet for com/mastercard/test/flow/util/Tags::tags → KILLED - - - - |
- return Stream.of( tags ).collect( Collectors.toCollection( TreeSet::new ) ); |
- -38 - | -- - - - - - | - } |
- -39 - | -- - - - - - | -|
- -40 - | -- - - - - - | - /** |
- -41 - | -- - - - - - | - * Set intersection test |
- -42 - | -- - - - - - | - * |
- -43 - | -- - - - - - | - * @param a A set |
- -44 - | -- - - - - - | - * @param b A set |
- -45 - | -- - - - - - | - * @return <code>true</code> if the two sets have at least one member in common |
- -46 - | -- - - - - - | - */ |
- -47 - | -- - - - - - | - public static boolean intersects( Set<String> a, Set<String> b ) { |
- -48 - | -- - - - - - | - for( String t : a ) { |
- -49 - | -
-
-1
-
-1. intersects : negated conditional → KILLED - - - - |
- if( b.contains( t ) ) { |
- -50 - | -
-
-1
-
-1. intersects : replaced boolean return with false for com/mastercard/test/flow/util/Tags::intersects → KILLED - - - - |
- return true; |
- -51 - | -- - - - - - | - } |
- -52 - | -- - - - - - | - } |
- -53 - | -
-
-1
-
-1. intersects : replaced boolean return with true for com/mastercard/test/flow/util/Tags::intersects → KILLED - - - - |
- return false; |
- -54 - | -- - - - - - | - } |
- -55 - | -- - - - - - | -|
- -56 - | -- - - - - - | - /** |
- -57 - | -- - - - - - | - * Determines if a tagged item passes an include/exclude tag filter |
- -58 - | -- - - - - - | - * |
- -59 - | -- - - - - - | - * @param item The set of tags on an item |
- -60 - | -- - - - - - | - * @param include The set of tags that items must have |
- -61 - | -- - - - - - | - * @param exclude The set of tags that items must not have |
- -62 - | -- - - - - - | - * @return <code>true</code> if the item passes the filter |
- -63 - | -- - - - - - | - */ |
- -64 - | -- - - - - - | - public static boolean filter( Set<String> item, Set<String> include, Set<String> exclude ) { |
- -65 - | -
-
-3
-
-1. filter : replaced boolean return with true for com/mastercard/test/flow/util/Tags::filter → KILLED -2. filter : negated conditional → KILLED -3. filter : negated conditional → KILLED - - - - |
- return !Tags.intersects( item, exclude ) && item.containsAll( include ); |
- -66 - | -- - - - - - | - } |
- -67 - | -- - - - - - | -|
- -68 - | -- - - - - - | - /** |
- -69 - | -- - - - - - | - * Extracts portions of tags in a set |
- -70 - | -- - - - - - | - * |
- -71 - | -- - - - - - | - * @param tags Some tags |
- -72 - | -- - - - - - | - * @param prefix A prefix |
- -73 - | -- - - - - - | - * @return The remainder of those tags that start with the prefix |
- -74 - | -- - - - - - | - */ |
- -75 - | -- - - - - - | - public static Stream<String> suffices( Set<String> tags, String prefix ) { |
- -76 - | -
-
-1
-
-1. suffices : replaced return value with Stream.empty for com/mastercard/test/flow/util/Tags::suffices → KILLED - - - - |
- return tags.stream() |
- -77 - | -
-
-2
-
-1. lambda$suffices$0 : replaced boolean return with false for com/mastercard/test/flow/util/Tags::lambda$suffices$0 → KILLED -2. lambda$suffices$0 : replaced boolean return with true for com/mastercard/test/flow/util/Tags::lambda$suffices$0 → KILLED - - - - |
- .filter( t -> t.startsWith( prefix ) ) |
- -78 - | -
-
-1
-
-1. lambda$suffices$1 : replaced return value with "" for com/mastercard/test/flow/util/Tags::lambda$suffices$1 → KILLED - - - - |
- .map( t -> t.substring( prefix.length() ) ); |
- -79 - | -- - - - - - | - } |
- -80 - | -- - - - - - | -|
- -81 - | -- - - - - - | - /** |
- -82 - | -- - - - - - | - * Extracts a portion of the first matching tag in a set |
- -83 - | -- - - - - - | - * |
- -84 - | -- - - - - - | - * @param tags Some tags |
- -85 - | -- - - - - - | - * @param prefix A prefix |
- -86 - | -- - - - - - | - * @return The remainder of the first tag that starts with the prefix |
- -87 - | -- - - - - - | - */ |
- -88 - | -- - - - - - | - public static Optional<String> suffix( Set<String> tags, String prefix ) { |
- -89 - | -
-
-1
-
-1. suffix : replaced return value with Optional.empty for com/mastercard/test/flow/util/Tags::suffix → KILLED - - - - |
- return suffices( tags, prefix ).findFirst(); |
- -90 - | -- - - - - - | - } |
- -91 - | -- - - - - - | -|
- -92 - | -- - - - - - | - /** |
- -93 - | -- - - - - - | - * Builds an operation to empty a tag set |
- -94 - | -- - - - - - | - * |
- -95 - | -- - - - - - | - * @return Empties the tags |
- -96 - | -- - - - - - | - */ |
- -97 - | -- - - - - - | - public static Consumer<Set<String>> clear() { |
- -98 - | -
-
-1
-
-1. clear : replaced return value with null for com/mastercard/test/flow/util/Tags::clear → KILLED - - - - |
- return Set::clear; |
- -99 - | -- - - - - - | - } |
- -100 - | -- - - - - - | -|
- -101 - | -- - - - - - | - /** |
- -102 - | -- - - - - - | - * Builds an operation to add to a tag set |
- -103 - | -- - - - - - | - * |
- -104 - | -- - - - - - | - * @param tags The values to add |
- -105 - | -- - - - - - | - * @return Adds the supplied tags |
- -106 - | -- - - - - - | - */ |
- -107 - | -- - - - - - | - public static Consumer<Set<String>> add( String... tags ) { |
- -108 - | -
-
-1
-
-1. add : replaced return value with null for com/mastercard/test/flow/util/Tags::add → KILLED - - - - |
- return add( Stream.of( tags ) ); |
- -109 - | -- - - - - - | - } |
- -110 - | -- - - - - - | -|
- -111 - | -- - - - - - | - /** |
- -112 - | -- - - - - - | - * Builds an operation to add to a tag set |
- -113 - | -- - - - - - | - * |
- -114 - | -- - - - - - | - * @param tags The values to add |
- -115 - | -- - - - - - | - * @return Adds the supplied tags |
- -116 - | -- - - - - - | - */ |
- -117 - | -- - - - - - | - public static Consumer<Set<String>> add( Stream<String> tags ) { |
- -118 - | -
-
-2
-
-1. add : replaced return value with null for com/mastercard/test/flow/util/Tags::add → KILLED -2. lambda$add$2 : removed call to java/util/stream/Stream::forEach → KILLED - - - - |
- return s -> tags.forEach( s::add ); |
- -119 - | -- - - - - - | - } |
- -120 - | -- - - - - - | -|
- -121 - | -- - - - - - | - /** |
- -122 - | -- - - - - - | - * Builds an operation to remove from a tag set |
- -123 - | -- - - - - - | - * |
- -124 - | -- - - - - - | - * @param tags The values to remove |
- -125 - | -- - - - - - | - * @return Removes the supplied tags |
- -126 - | -- - - - - - | - */ |
- -127 - | -- - - - - - | - public static Consumer<Set<String>> remove( String... tags ) { |
- -128 - | -
-
-1
-
-1. remove : replaced return value with null for com/mastercard/test/flow/util/Tags::remove → KILLED - - - - |
- return remove( Stream.of( tags ) ); |
- -129 - | -- - - - - - | - } |
- -130 - | -- - - - - - | -|
- -131 - | -- - - - - - | - /** |
- -132 - | -- - - - - - | - * Builds an operation to remove from a tag set |
- -133 - | -- - - - - - | - * |
- -134 - | -- - - - - - | - * @param tags The values to remove |
- -135 - | -- - - - - - | - * @return Removes the supplied tags |
- -136 - | -- - - - - - | - */ |
- -137 - | -- - - - - - | - public static Consumer<Set<String>> remove( Stream<String> tags ) { |
- -138 - | -
-
-2
-
-1. remove : replaced return value with null for com/mastercard/test/flow/util/Tags::remove → KILLED -2. lambda$remove$3 : removed call to java/util/stream/Stream::forEach → KILLED - - - - |
- return s -> tags.forEach( s::remove ); |
- -139 - | -- - - - - - | - } |
- -140 - | -- - - - - - | -|
- -141 - | -- - - - - - | - /** |
- -142 - | -- - - - - - | - * Builds an operation to define a tag set |
- -143 - | -- - - - - - | - * |
- -144 - | -- - - - - - | - * @param tags The values to set |
- -145 - | -- - - - - - | - * @return Sets the set membership to be exactly the supplied tags |
- -146 - | -- - - - - - | - */ |
- -147 - | -- - - - - - | - public static Consumer<Set<String>> set( String... tags ) { |
- -148 - | -
-
-1
-
-1. set : replaced return value with null for com/mastercard/test/flow/util/Tags::set → KILLED - - - - |
- return set( Stream.of( tags ) ); |
- -149 - | -- - - - - - | - } |
- -150 - | -- - - - - - | -|
- -151 - | -- - - - - - | - /** |
- -152 - | -- - - - - - | - * Builds an operation to define a tag set |
- -153 - | -- - - - - - | - * |
- -154 - | -- - - - - - | - * @param tags The values to set |
- -155 - | -- - - - - - | - * @return Sets the set membership to be exactly the supplied tags |
- -156 - | -- - - - - - | - */ |
- -157 - | -- - - - - - | - public static Consumer<Set<String>> set( Stream<String> tags ) { |
- -158 - | -
-
-1
-
-1. set : replaced return value with null for com/mastercard/test/flow/util/Tags::set → KILLED - - - - |
- return clear().andThen( add( tags ) ); |
- -159 - | -- - - - - - | - } |
- -160 - | -- - - - - - | -} |
Mutations | ||
27 | -- |
-
-
-
- 1.1 |
-
37 | -- |
-
-
-
- 1.1 |
-
49 | -- |
-
-
-
- 1.1 |
-
50 | -- |
-
-
-
- 1.1 |
-
53 | -- |
-
-
-
- 1.1 |
-
65 | -- |
-
-
-
- 1.1 2.2 3.3 |
-
76 | -- |
-
-
-
- 1.1 |
-
77 | -- |
-
-
-
- 1.1 2.2 |
-
78 | -- |
-
-
-
- 1.1 |
-
89 | -- |
-
-
-
- 1.1 |
-
98 | -- |
-
-
-
- 1.1 |
-
108 | -- |
-
-
-
- 1.1 |
-
118 | -- |
-
-
-
- 1.1 2.2 |
-
128 | -- |
-
-
-
- 1.1 |
-
138 | -- |
-
-
-
- 1.1 2.2 |
-
148 | -- |
-
-
-
- 1.1 |
-
158 | -- |
-
-
-
- 1.1 |
-
- -1 - | -- - - - - - | -package com.mastercard.test.flow.validation.check; |
- -2 - | -- - - - - - | -|
- -3 - | -- - - - - - | -import java.util.stream.Collectors; |
- -4 - | -- - - - - - | -import java.util.stream.Stream; |
- -5 - | -- - - - - - | -|
- -6 - | -- - - - - - | -import com.mastercard.test.flow.Flow; |
- -7 - | -- - - - - - | -import com.mastercard.test.flow.Interaction; |
- -8 - | -- - - - - - | -import com.mastercard.test.flow.Model; |
- -9 - | -- - - - - - | -import com.mastercard.test.flow.validation.Check; |
- -10 - | -- - - - - - | -import com.mastercard.test.flow.validation.Validation; |
- -11 - | -- - - - - - | -import com.mastercard.test.flow.validation.Violation; |
- -12 - | -- - - - - - | -|
- -13 - | -- - - - - - | -/** |
- -14 - | -- - - - - - | - * Checks that the tags that we use to signal flow outcome in execution reports |
- -15 - | -- - - - - - | - * are not already present on {@link Flow}s |
- -16 - | -- - - - - - | - */ |
- -17 - | -- - - - - - | -public class ResultTagCheck implements Validation { |
- -18 - | -- - - - - - | -|
- -19 - | -- - - - - - | - /** |
- -20 - | -- - - - - - | - * Added to {@link Flow}s and {@link Interaction}s that pass assertions |
- -21 - | -- - - - - - | - */ |
- -22 - | -- - - - - - | - public static final String PASS_TAG = "PASS"; |
- -23 - | -- - - - - - | - /** |
- -24 - | -- - - - - - | - * Added to {@link Flow}s and {@link Interaction}s that fail assertions |
- -25 - | -- - - - - - | - */ |
- -26 - | -- - - - - - | - public static final String FAIL_TAG = "FAIL"; |
- -27 - | -- - - - - - | - /** |
- -28 - | -- - - - - - | - * Added to {@link Flow}s and {@link Interaction}s that are not exercised in the |
- -29 - | -- - - - - - | - * test |
- -30 - | -- - - - - - | - */ |
- -31 - | -- - - - - - | - public static final String SKIP_TAG = "SKIP"; |
- -32 - | -- - - - - - | - /** |
- -33 - | -- - - - - - | - * Added to {@link Flow}s that suffer some non-assertion error |
- -34 - | -- - - - - - | - */ |
- -35 - | -- - - - - - | - public static final String ERROR_TAG = "ERROR"; |
- -36 - | -- - - - - - | -|
- -37 - | -- - - - - - | - @Override |
- -38 - | -- - - - - - | - public String name() { |
- -39 - | -
-
-1
-
-1. name : replaced return value with "" for com/mastercard/test/flow/validation/check/ResultTagCheck::name → KILLED - - - - |
- return "Result tag misuse"; |
- -40 - | -- - - - - - | - } |
- -41 - | -- - - - - - | -|
- -42 - | -- - - - - - | - @Override |
- -43 - | -- - - - - - | - public String explanation() { |
- -44 - | -
-
-1
-
-1. explanation : replaced return value with "" for com/mastercard/test/flow/validation/check/ResultTagCheck::explanation → KILLED - - - - |
- return "Certain tag values are assumed by the report components to signal the outcome of testing a flow." |
- -45 - | -- - - - - - | - + " These values are reserved for that purpose"; |
- -46 - | -- - - - - - | - } |
- -47 - | -- - - - - - | -|
- -48 - | -- - - - - - | - @Override |
- -49 - | -- - - - - - | - public Stream<Check> checks( Model model ) { |
- -50 - | -
-
-1
-
-1. checks : replaced return value with Stream.empty for com/mastercard/test/flow/validation/check/ResultTagCheck::checks → KILLED - - - - |
- return model.flows() |
- -51 - | -
-
-1
-
-1. lambda$checks$1 : replaced return value with null for com/mastercard/test/flow/validation/check/ResultTagCheck::lambda$checks$1 → KILLED - - - - |
- .map( flow -> new Check( this, flow.meta().id(), () -> { |
- -52 - | -- - - - - - | - String misused = Stream.of( ERROR_TAG, FAIL_TAG, PASS_TAG, SKIP_TAG ) |
- -53 - | -- - - - - - | - .filter( flow.meta().tags()::contains ) |
- -54 - | -- - - - - - | - .collect( Collectors.joining( ", " ) ); |
- -55 - | -- - - - - - | -|
- -56 - | -
-
-1
-
-1. lambda$null$0 : negated conditional → KILLED - - - - |
- if( !misused.isEmpty() ) { |
- -57 - | -
-
-1
-
-1. lambda$null$0 : replaced return value with null for com/mastercard/test/flow/validation/check/ResultTagCheck::lambda$null$0 → KILLED - - - - |
- return new Violation( this, "Use of reserved tags: " + misused ) |
- -58 - | -- - - - - - | - .offender( flow ); |
- -59 - | -- - - - - - | - } |
- -60 - | -- - - - - - | -|
- -61 - | -- - - - - - | - return null; |
- -62 - | -- - - - - - | - } ) ); |
- -63 - | -- - - - - - | - } |
- -64 - | -- - - - - - | -} |
Mutations | ||
39 | -- |
-
-
-
- 1.1 |
-
44 | -- |
-
-
-
- 1.1 |
-
50 | -- |
-
-
-
- 1.1 |
-
51 | -- |
-
-
-
- 1.1 |
-
56 | -- |
-
-
-
- 1.1 |
-
57 | -- |
-
-
-
- 1.1 |
-
1.1
Location : box
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::box → KILLED
1.1
Location : box
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] removed call to java/util/function/Consumer::accept → KILLED
1.1
Location : box
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::box → KILLED
1.1
Location : content
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::content → KILLED
1.1
Location : append
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] Replaced integer addition with subtraction → KILLED
1.1
Location : append
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::append → KILLED
1.1
Location : fill
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] negated conditional → KILLED
2.2
Location : fill
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] changed conditional boundary → KILLED
1.1
Location : fill
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:fluency()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::fill → KILLED
1.1
Location : styled
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] Replaced integer addition with subtraction → KILLED
1.1
Location : styled
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::styled → KILLED
1.1
Location : ellipsised
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::ellipsised → KILLED
2.2
Location : ellipsised
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer subtraction with addition → KILLED
3.3
Location : ellipsised
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer subtraction with addition → KILLED
1.1
Location : endLine
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] Replaced integer subtraction with addition → KILLED
2.2
Location : endLine
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] Replaced integer subtraction with addition → KILLED
1.1
Location : endLine
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] changed conditional boundary → KILLED
2.2
Location : endLine
Killed by : negated conditional → TIMED_OUT
1.1
Location : endLine
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:fluency()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli::endLine → KILLED
1.1
Location : <init>
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] Replaced integer subtraction with addition → KILLED
1.1
Location : <init>
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] negated conditional → KILLED
1.1
Location : <init>
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:title()] Replaced integer subtraction with addition → KILLED
1.1
Location : section
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:nesting()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::section → KILLED
1.1
Location : box
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:nesting()] Replaced integer addition with subtraction → KILLED
1.1
Location : box
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:nesting()] removed call to java/util/function/Consumer::accept → KILLED
1.1
Location : box
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:nesting()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::box → KILLED
1.1
Location : paragraph
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:title()] removed call to java/util/stream/Stream::forEach → KILLED
1.1
Location : paragraph
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:paragraph()] removed call to java/util/stream/Stream::forEach → KILLED
1.1
Location : lambda$paragraph$1
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:title()] removed call to java/util/Deque::forEach → KILLED
1.1
Location : lambda$paragraph$1
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:paragraph()] removed call to java/util/Deque::forEach → KILLED
1.1
Location : paragraph
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:paragraph()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::paragraph → KILLED
1.1
Location : line
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] removed call to java/util/stream/Stream::forEach → KILLED
1.1
Location : line
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::line → KILLED
1.1
Location : words
Killed by : com.mastercard.test.flow.assrt.filter.cli.TagPhaseTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.TagPhaseTest]/[method:wrapping()] removed call to java/util/Deque::forEach → KILLED
1.1
Location : lambda$words$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.TagPhaseTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.TagPhaseTest]/[method:wrapping()] removed call to java/util/List::forEach → KILLED
1.1
Location : words
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:fluency()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::words → KILLED
1.1
Location : descriptionList
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] Replaced integer addition with subtraction → KILLED
1.1
Location : descriptionList
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] removed call to java/util/function/Consumer::accept → KILLED
1.1
Location : descriptionList
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:fluency()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::descriptionList → KILLED
1.1
Location : indexedTaggedList
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer addition with subtraction → KILLED
1.1
Location : indexedTaggedList
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] removed call to java/util/function/Consumer::accept → KILLED
1.1
Location : indexedTaggedList
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:fluency()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::indexedTaggedList → KILLED
1.1
Location : close
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:lines()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$Box::close → KILLED
1.1
Location : item
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$DescriptionList::item → KILLED
1.1
Location : close
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] removed call to java/util/Map::forEach → KILLED
1.1
Location : lambda$close$1
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] Replaced integer subtraction with addition → KILLED
2.2
Location : lambda$close$1
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] Replaced integer subtraction with addition → KILLED
1.1
Location : lambda$close$1
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:descriptionList()] removed call to java/util/Deque::forEach → KILLED
1.1
Location : close
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:fluency()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$DescriptionList::close → KILLED
1.1
Location : item
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$IndexedTaggedList::item → KILLED
1.1
Location : lambda$close$0
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] replaced int return with 0 for com/mastercard/test/flow/assrt/filter/cli/Cli$IndexedTaggedList::lambda$close$0 → KILLED
1.1
Location : close
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer addition with subtraction → KILLED
1.1
Location : close
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] removed call to java/util/List::forEach → KILLED
1.1
Location : lambda$close$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer addition with subtraction → KILLED
1.1
Location : lambda$close$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer subtraction with addition → KILLED
2.2
Location : lambda$close$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer subtraction with addition → KILLED
3.3
Location : lambda$close$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer subtraction with addition → KILLED
1.1
Location : lambda$close$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] removed call to java/util/List::forEach → KILLED
1.1
Location : lambda$close$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] removed call to java/util/Deque::forEach → KILLED
2.2
Location : lambda$close$4
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] Replaced integer subtraction with addition → KILLED
1.1
Location : lambda$null$3
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:indexedTaggedList()] removed call to java/util/List::forEach → KILLED
1.1
Location : close
Killed by : com.mastercard.test.flow.assrt.filter.cli.CliTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CliTest]/[method:fluency()] replaced return value with null for com/mastercard/test/flow/assrt/filter/cli/Cli$IndexedTaggedList::close → KILLED
1.1
Location : syntax
Killed by : com.mastercard.test.flow.assrt.filter.cli.IndexPhaseTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.IndexPhaseTest]/[method:input()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/CommandCompleter$Command::syntax → KILLED
1.1
Location : invokedBy
Killed by : com.mastercard.test.flow.assrt.filter.cli.IndexPhaseTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.IndexPhaseTest]/[method:input()] replaced boolean return with false for com/mastercard/test/flow/assrt/filter/cli/CommandCompleter$Command::invokedBy → KILLED
2.2
Location : invokedBy
Killed by : com.mastercard.test.flow.assrt.filter.cli.TagPhaseTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.TagPhaseTest]/[method:input()] replaced boolean return with true for com/mastercard/test/flow/assrt/filter/cli/CommandCompleter$Command::invokedBy → KILLED
1.1
Location : complete
Killed by : com.mastercard.test.flow.assrt.filter.cli.HelpTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.HelpTest]/[method:help()] negated conditional → KILLED
1.1
Location : tr
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::tr → KILLED
1.1
Location : tl
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::tl → KILLED
1.1
Location : br
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::br → KILLED
1.1
Location : bl
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::bl → KILLED
1.1
Location : lTee
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::lTee → KILLED
1.1
Location : rTee
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::rTee → KILLED
1.1
Location : tTee
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::tTee → KILLED
1.1
Location : bTee
Killed by : com.mastercard.test.flow.assrt.filter.cli.CornerTest.[engine:junit-jupiter]/[class:com.mastercard.test.flow.assrt.filter.cli.CornerTest]/[method:boxen()] replaced return value with "" for com/mastercard/test/flow/assrt/filter/cli/Corner::bTee → KILLED