From b444b74128088466aa72a6af986020d1afae6d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Wed, 4 Aug 2021 15:13:23 +0200 Subject: [PATCH] Parallelize coverage analysis in CoveredTestResultPerTestMethod MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Silva --- .../listener/CoveragePerTestMethod.java | 2 ++ .../CoveredTestResultPerTestMethod.java | 2 ++ .../impl/CoveragePerTestMethodImpl.java | 31 +++++++++++++----- .../CoveredTestResultPerTestMethodImpl.java | 24 ++++++++++++-- .../junit4/CoveragePerJUnit4TestMethod.java | 23 +++++++++---- ...CoveredTestResultsPerJUnit4TestMethod.java | 24 ++++++++++---- .../junit5/CoveragePerJUnit5TestMethod.java | 24 ++++++++++---- ...CoveredTestResultsPerJUnit5TestMethod.java | 25 ++++++++++---- ...acocoRunnerCoveredResultPerTestMethod.java | 1 + .../JUnit4JacocoRunnerPerTestMethod.java | 1 + ...acocoRunnerCoveredResultPerTestMethod.java | 1 + .../JUnit5JacocoRunnerPerTestMethod.java | 1 + .../listener/CoveragePerTestMethod.class | Bin 974 -> 1001 bytes .../impl/CoveragePerTestMethodImpl.class | Bin 6916 -> 8378 bytes .../junit4/CoveragePerJUnit4TestMethod.class | Bin 11918 -> 12498 bytes .../CoveragePerJUnit5TestMethod$1.class | Bin 919 -> 919 bytes .../junit5/CoveragePerJUnit5TestMethod.class | Bin 5032 -> 6183 bytes .../JUnit4JacocoRunnerPerTestMethod.class | Bin 3466 -> 3506 bytes .../JUnit5JacocoRunnerPerTestMethod.class | Bin 3410 -> 3448 bytes 19 files changed, 125 insertions(+), 34 deletions(-) diff --git a/src/main/java/eu/stamp_project/testrunner/listener/CoveragePerTestMethod.java b/src/main/java/eu/stamp_project/testrunner/listener/CoveragePerTestMethod.java index 4cb36be9..43d83f82 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/CoveragePerTestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/CoveragePerTestMethod.java @@ -24,4 +24,6 @@ public interface CoveragePerTestMethod extends Serializable { public void save(); + public void computeCoverages(); + } diff --git a/src/main/java/eu/stamp_project/testrunner/listener/CoveredTestResultPerTestMethod.java b/src/main/java/eu/stamp_project/testrunner/listener/CoveredTestResultPerTestMethod.java index bbb129b2..2eadc65b 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/CoveredTestResultPerTestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/CoveredTestResultPerTestMethod.java @@ -25,4 +25,6 @@ public interface CoveredTestResultPerTestMethod extends TestResult, Serializable public void save(); + public void computeCoverages(); + } diff --git a/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveragePerTestMethodImpl.java b/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveragePerTestMethodImpl.java index cf0e561a..c1eda232 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveragePerTestMethodImpl.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveragePerTestMethodImpl.java @@ -16,6 +16,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** @@ -27,7 +28,9 @@ public class CoveragePerTestMethodImpl implements CoveragePerTestMethod { private static final long serialVersionUID = 606642107403361456L; - protected final Map coverageResultsMap; + protected transient final Map executionDataStoreMap; + + protected final ConcurrentHashMap coverageResultsMap; protected final List classesDirectory; @@ -39,16 +42,11 @@ public class CoveragePerTestMethodImpl implements CoveragePerTestMethod { protected transient CoverageTransformer coverageTransformer; - public CoveragePerTestMethodImpl() { - coverageResultsMap = null; - classesDirectory = null; - this.coverageTransformer = new CoverageCollectorSummarization(); - } - public CoveragePerTestMethodImpl(RuntimeData data, List classesDirectory, CoverageTransformer coverageTransformer) { this.data = data; this.classesDirectory = classesDirectory; - this.coverageResultsMap = new HashMap<>(); + this.executionDataStoreMap = new HashMap<>(); + this.coverageResultsMap = new ConcurrentHashMap<>(); this.coverageTransformer = coverageTransformer; } @@ -84,6 +82,23 @@ public void setSessionInfos(SessionInfoStore sessionInfos) { this.sessionInfos = sessionInfos; } + public Map getExecutionDataStoreMap() { + return executionDataStoreMap; + } + + @Override + public void computeCoverages() { + executionDataStoreMap.entrySet().parallelStream() + .forEach(x -> { + Coverage jUnit4Coverage = coverageTransformer.transformJacocoObject( + x.getValue(), + classesDirectory + ); + coverageResultsMap.put(x.getKey(), jUnit4Coverage); + }); + } + + @Override public Map getCoverageResultsMap() { return coverageResultsMap; diff --git a/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveredTestResultPerTestMethodImpl.java b/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveredTestResultPerTestMethodImpl.java index 3c2891a9..3c305cea 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveredTestResultPerTestMethodImpl.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/impl/CoveredTestResultPerTestMethodImpl.java @@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** @@ -29,7 +30,9 @@ public class CoveredTestResultPerTestMethodImpl implements CoveredTestResultPerT private static final long serialVersionUID = -789740001022671146L; - protected final Map coverageResultsMap; + protected transient final Map executionDataStoreMap; + + protected final ConcurrentHashMap coverageResultsMap; protected final List classesDirectory; @@ -49,7 +52,8 @@ public class CoveredTestResultPerTestMethodImpl implements CoveredTestResultPerT public CoveredTestResultPerTestMethodImpl(RuntimeData data, List classesDirectory, CoverageTransformer coverageTransformer) { this.data = data; this.classesDirectory = classesDirectory; - this.coverageResultsMap = new HashMap<>(); + this.executionDataStoreMap = new HashMap<>(); + this.coverageResultsMap = new ConcurrentHashMap<>(); this.coverageTransformer = coverageTransformer; this.runningTests = new ArrayList<>(); this.failingTests = new ArrayList<>(); @@ -90,6 +94,22 @@ public void setSessionInfos(SessionInfoStore sessionInfos) { this.sessionInfos = sessionInfos; } + public Map getExecutionDataStoreMap() { + return executionDataStoreMap; + } + + @Override + public void computeCoverages() { + executionDataStoreMap.entrySet().parallelStream() + .forEach(x -> { + Coverage jUnit4Coverage = coverageTransformer.transformJacocoObject( + x.getValue(), + classesDirectory + ); + coverageResultsMap.put(x.getKey(), jUnit4Coverage); + }); + } + @Override public Map getCoverageResultsMap() { return coverageResultsMap; diff --git a/src/main/java/eu/stamp_project/testrunner/listener/junit4/CoveragePerJUnit4TestMethod.java b/src/main/java/eu/stamp_project/testrunner/listener/junit4/CoveragePerJUnit4TestMethod.java index 8d493216..d63c7671 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/junit4/CoveragePerJUnit4TestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/junit4/CoveragePerJUnit4TestMethod.java @@ -9,6 +9,7 @@ import org.jacoco.core.analysis.CoverageBuilder; import org.jacoco.core.analysis.IClassCoverage; import org.jacoco.core.analysis.ICounter; +import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.ExecutionDataStore; import org.jacoco.core.data.SessionInfoStore; import org.jacoco.core.runtime.RuntimeData; @@ -71,12 +72,19 @@ public synchronized void testFinished(Description description) throws Exception false ); - Coverage jUnit4Coverage = - internalCoverage.getCoverageTransformer().transformJacocoObject( - this.internalCoverage.getExecutionData(), - this.internalCoverage.getClassesDirectory() - ); - this.internalCoverage.getCoverageResultsMap().put(this.toString.apply(description), jUnit4Coverage); + // We need to clone each result so it doesn't get changed by the runtime afterwards + ExecutionDataStore executionDataStore = new ExecutionDataStore(); + this.internalCoverage.getExecutionData().getContents().stream().forEach(x -> { + ExecutionData executionData = new ExecutionData(x.getId(), x.getName(), x.getProbes().clone()); + synchronized (executionDataStore) { + executionDataStore.put(executionData); + } + }); + this.internalCoverage.getExecutionDataStoreMap().put( + this.toString.apply(description), + executionDataStore + ); + if (isParametrized.test(description.getMethodName())) { this.collectForParametrizedTest(this.toStringParametrized.apply(description)); } @@ -178,5 +186,8 @@ private List getSameClassCoverage(String className, List { + ExecutionData executionData = new ExecutionData(x.getId(), x.getName(), x.getProbes().clone()); + synchronized (executionDataStore) { + executionDataStore.put(executionData); + } + }); + this.internalCoveredTestResult.getExecutionDataStoreMap().put( + this.toString.apply(description), + executionDataStore + ); + if (isParametrized.test(description.getMethodName())) { this.collectForParametrizedTest(this.toStringParametrized.apply(description)); } @@ -249,4 +257,8 @@ private List getSameClassCoverage(String className, List { + ExecutionData executionData = new ExecutionData(x.getId(), x.getName(), x.getProbes().clone()); + synchronized (executionDataStore) { + executionDataStore.put(executionData); + } + }); + this.internalCoverage.getExecutionDataStoreMap().put( + this.toString.apply(testIdentifier), + executionDataStore + ); + switch (testExecutionResult.getStatus()) { case FAILED: this.getFailingTests().add( @@ -93,4 +101,8 @@ public void save() { this.internalCoverage.save(); } + public void computeCoverages() { + this.internalCoverage.computeCoverages(); + } + } diff --git a/src/main/java/eu/stamp_project/testrunner/listener/junit5/CoveredTestResultsPerJUnit5TestMethod.java b/src/main/java/eu/stamp_project/testrunner/listener/junit5/CoveredTestResultsPerJUnit5TestMethod.java index a6b0b847..e8a2ba40 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/junit5/CoveredTestResultsPerJUnit5TestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/junit5/CoveredTestResultsPerJUnit5TestMethod.java @@ -5,6 +5,7 @@ import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; import eu.stamp_project.testrunner.listener.impl.CoveredTestResultPerTestMethodImpl; import eu.stamp_project.testrunner.runner.Failure; +import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.ExecutionDataStore; import org.jacoco.core.data.SessionInfoStore; import org.jacoco.core.runtime.RuntimeData; @@ -62,12 +63,19 @@ public synchronized void executionFinished(TestIdentifier testIdentifier, TestEx false ); - Coverage jUnit5Coverage = - internalCoveredTestResult.getCoverageTransformer().transformJacocoObject( - this.internalCoveredTestResult.getExecutionData(), - this.internalCoveredTestResult.getClassesDirectory() - ); - this.internalCoveredTestResult.getCoverageResultsMap().put(this.toString.apply(testIdentifier), jUnit5Coverage); + // We need to clone each result so it doesn't get changed by the runtime afterwards + ExecutionDataStore executionDataStore = new ExecutionDataStore(); + this.internalCoveredTestResult.getExecutionData().getContents().stream().forEach(x -> { + ExecutionData executionData = new ExecutionData(x.getId(), x.getName(), x.getProbes().clone()); + synchronized (executionDataStore) { + executionDataStore.put(executionData); + } + }); + this.internalCoveredTestResult.getExecutionDataStoreMap().put( + this.toString.apply(testIdentifier), + executionDataStore + ); + switch (testExecutionResult.getStatus()) { case FAILED: this.internalCoveredTestResult.getFailingTests().add( @@ -98,4 +106,9 @@ public Coverage getCoverageOf(String testMethodName) { public void save() { this.internalCoveredTestResult.save(); } + + public void computeCoverages() { + internalCoveredTestResult.computeCoverages(); + } + } diff --git a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerCoveredResultPerTestMethod.java b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerCoveredResultPerTestMethod.java index c01364ab..8de57c1b 100644 --- a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerCoveredResultPerTestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerCoveredResultPerTestMethod.java @@ -36,6 +36,7 @@ protected CoveredTestResultPerTestMethod executeCoveredTestPerTestMethod(Runtime (JUnit4TestResult) listener, this.instrumentedClassLoader ); + listener.computeCoverages(); return listener; } diff --git a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerPerTestMethod.java b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerPerTestMethod.java index 333df107..1ce3b95f 100644 --- a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerPerTestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4JacocoRunnerPerTestMethod.java @@ -36,6 +36,7 @@ protected CoveragePerTestMethod executeTestPerTestMethod(RuntimeData data, (JUnit4TestResult) listener, this.instrumentedClassLoader ); + listener.computeCoverages(); return listener; } diff --git a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerCoveredResultPerTestMethod.java b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerCoveredResultPerTestMethod.java index 9eb5b3e7..e10baac6 100644 --- a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerCoveredResultPerTestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerCoveredResultPerTestMethod.java @@ -36,6 +36,7 @@ protected CoveredTestResultPerTestMethod executeCoveredTestPerTestMethod(Runtime (JUnit5TestResult) listener, this.instrumentedClassLoader ); + listener.computeCoverages(); return listener; } diff --git a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerPerTestMethod.java b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerPerTestMethod.java index cf37196f..5cb7c072 100644 --- a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerPerTestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerPerTestMethod.java @@ -35,6 +35,7 @@ protected CoveragePerTestMethod executeTestPerTestMethod(RuntimeData data, listener, this.instrumentedClassLoader ); + listener.computeCoverages(); return listener; } diff --git a/src/main/resources/runner-classes/eu/stamp_project/testrunner/listener/CoveragePerTestMethod.class b/src/main/resources/runner-classes/eu/stamp_project/testrunner/listener/CoveragePerTestMethod.class index e0f81b74166f1bca5ff0eb221c2af31645e248bc..58952322ccd9372be45561d6b425986a12ddebee 100644 GIT binary patch delta 177 zcmWlTI}UC delta 163 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 JiC^K@{{gd7{NVrq literal 6916 zcmbVR349dQ8UMd*b|=}LoE*AnWsxW$2`ngD+)ye6FlZo=B(zu+huulCWOrwoo#pDS zNNa7iwYR+wOK*irBBT|2QETmOZLPKTu5Imow^sUpGqao7&4z~le&Nl$_rCA{9q&8d zEDt?<{C)r{M12seaeFN;!t3Sm1_gHnQSGd}QLem6!JC7qaaP_USKb=r@U{@%jyn~+ zL%}<1@h-eOhz7hz4)2x2`)cuie4qv&4B{?)NWq~Rd|0l3M8QXcn1_!k_;?WK;uCWC zq#W*6a8D2s99D2d!KZ>)hIeb;wyMKh_B*na{6@z->AViYw#`U0b+bxpfRVLNiDTi zH*-lNGq`b`fVfhiuFJ^eEG=Vg)lzxgUo(2ygM)WmdyhbK+}N#~+OWPw&*f8AZj+W3 zXz1Cg?bf1sE18ONp;Mr?KRKMyth}iUY$@GcXOEtbQd&B@J!={} z^|%$a^qghpGa22Crjj{JmoHteZgu6c~$BxJ-snAWaI=ERc7sSM0#`U;&Mj_TsUR1qCNr&F`d9&M3$L_d?R^E;#r`*0`v57-#`FQR5NlGPsi^e zD+K>s=>|9bJuVVhMUXQp9v*H+osuiKqIG5`E~ADev)mUQQ@N*eg+yo|g2zfaqiq@h z50&E!$v(&94R0B4qBF`1@j&@ng`hYy58CCo&Z9!_kU&?fBiUQk&+ue;9QCs7J7rrHLp=ILD*f`n_>ID=Rnm zs)vlcB`~juupyb!%lKF&jQRJKH_`I>n?6 zEg^8lOe6JwmdYB-aQdde?851mdZ;O-rFSH>mI7hRGFcuxZgBgq8!n~H)$$Mog8fF` zjO)@T0_PQyZ%XN2Di26SKL%8+!+I6n*eK9Fqns?Uw981P>`vaFPp8>x_G|K(R9uZM zDy~A0K+|MwcWb#3`dq~(Y*x{WJ{1`l3La7M9Xu+qWJdA}MzJf~&_3rfHawJtHKJ#2IN8FEJ4(QX+|@so+N{evHT1p3g{+ z66XrcD(L5~FXdHD>hu$Vv%UIyLsstplrde{pPCes;%6#;j$f$wB?c(QrnO^WV8k@` z$R4laDg3HrtC%IwSUJnovQBZ! zH3aaNMm*Y};IECiRmI=%cLo1Y@lX6q!M{~J153ewR6L7QD(j3OM7f)|Tq{r&iZa*3C6+EVT23Hy+|TdmoVGg5g=?_*w+9dreR;z0*S^?m&^ zG)nIdTq3R~h-{hwLzrz<;G9C+u>;ImmEUr*=LSWU@bPn5RMQo-D8(ofq~%TuXM0?SXA5E3uPuN&u!IoGYH zva-I^_iWs}etZA=zBOCc4D>QB&Y4U~7r)r_m;}mBgP&uWVS!7%=ifD=nf>~%yq<~c zB_1e;paYb+(?kW9c}<-{Ss~{Y;a5dK1Xa8Sx3cz5mYZZ|w=t?md+aL(>z6j9xgXr2 z^yEwtEL4FW!x+ue)9OZ9Y26POfrq^Yxp+<`?A9`gl%8vG7%SwdCv!^}2l%n(C7=1G zBl7gTUI)3zU0N#D&-Cw9L>+%BnBt#G_VD6#dO9rN?@Ft|(1pSuex8rZ`M!of-&A2O zX3Gl|=Ns(#6`b>KRh(am1M*tLy#w+VWIuTkvY)&&@!3dP-pe=+ay9@T-+*~-;}C7) zD5~V(YnwpzwsH86B5;_yRoKdLF8mzZ_@h`mYSDpuEJ2t*GrfSTs)K?TVjE{t!ZqZQ z5?)6M)qKvkCA1%f($?WfsG)>fDRGG_#%GI}hXBc!k!d-_TtqP!Q_KpShf8cxQUSub zqU4)2SQ;_kc14x_CXMysMSOQulY3WECC6>olKwhe@2VK(O!E8N?uG9jzBu*&Wi8)2?PRXnnQdt?GTFLSdP_4tgENNl5s8% zFokp_tWY`D0I>$A!IHTmvH0CUoy*U)s@y@_Dmcgqjx0fT!E_Z`OEBrE`nEBs?Z;48 zg$Gbyj&{9AsrsU`>XCzGE0r&#t*?$bpfb-^OrT-g5j2jYsi%Dm&3B@ik6CvjbOf`T z=Zs;lBxr9wdmQ0S6PUNHV;tvf7P0CHoV#twIGz*pi&!A+r&{NQ{U za$?Cz^o6TWV(yYLTyO~MV*YToB&Cd%&eC!&`D0u>5et%fzK42NEJW&%O|3}kaFF!WQn?ys98~k98t3(fL)>< zrZ@|hxEOgmTDsXH*0K!k#vX?CAq24(`}lSVf8O7Z7sE%cCVR~%UF(>UtD&p1}eIuQ-KHC<9SyV6B3iL%kAgLlLYAp(%7!s|e+jP`)CG1JcAcaS*R^Q?1obH1@d(EM)*ho0pAY z`2)B}CY!Juj8oU8@%%V+xpt6CkfN0>pz0Vd7C6TL6GGc@I+CxKR^bSqdmmOF!(}pc zW0R@tbj2H~!%ghP2lyX2H)9cQ^c03x$LWn#@)G6ByMZAh3qnUBOgkB$4AA!GRUD)e z#VRp|=Q*)EDbumwfTvt^6w5^iUTc>NA3Lw?WVeZ0K7;&RR78k}9meN5mrd~t)ZvRb Hi7)*Z?M6xX diff --git a/src/main/resources/runner-classes/eu/stamp_project/testrunner/listener/junit4/CoveragePerJUnit4TestMethod.class b/src/main/resources/runner-classes/eu/stamp_project/testrunner/listener/junit4/CoveragePerJUnit4TestMethod.class index 33610f0eaf38c6c0b223e42146be4181bb8cf936..a531a24691d50372275aa00a0cf477fe55cefed9 100644 GIT binary patch delta 5000 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 delta 1498 zcmZ9M`&U#|6vsbz2IkJ(IgT_0h-83*Ag>ug%*0AV6A?v16EmohMjioU!$@h`Xz%Rp zt;}9#NkCSL*cehq^;`WbuGMe-kgZnx%mrGjAMQPS@3UX$``zb^g~!X1zx{Ll2C#-- zEy~$%@`#0tP9J4-Sv<;PCJ_q{`?dLiNwy(B=XC8`SEM zB@Qt^hj>!k;`%r2C&6JYjcoJt6i@r8;E2Uhp0PN_aUJrkNmA!Nq0J{Pp5u9w7c2^S zQ3t-He=nQ7V)ClVDU;VGZ!OOV2Kx65^(E>XVs_mnIdbu@&#~p5lGZn0%l( z%ZCP8{gIJKXdp7w6KYSy`-XZs+G{|Nhcgw1!^)yJVmNsyY#B1qZ?vvP!BCCbH zO|o~tSX?wpuFY(boqExKmy9~9w=zZMS-LB(k}-4o_DH&g3M|w#Z<-};b~?6vSr%1J6L3*I%~CgeuTW5x;*J!{YA#9*DM}g) z4OXxs#ho)0?)xulmc^nJIVnU*N^o(C<+H4~M#(feF7}S$o|I@enx35kw0=iSfiWnS zd_iED$VEa(iI7n#bkqtJ^&&S28SQM6N1>79g5D{?#TI1Fi9RZwjnle7Zv%sDrzM$Y ze_{d3i8&|*Ep|w8R~l45uD>~C()yRg8~SF+hNiVvG<{O<96XmrcBT8)qlR>&$H^HF z?_3dQJRX#Nxm-zEbRs=ddOmzQk?>Ud|4bd}Ob+wDg?4@H;UP(3=sP->YHeCy=xL?K q(&DB?iHieL~U!-Fq<_r-_%1c>v)11CL*h%K@axa_pFlsW9+eEcjKqjD>JehhW1Ni3 zgw34yxWHtbi%fZ3V%p`hy|37C)rM;}T=zsBw&;cpS^M{@@8do!eK3y zUCnLhy0&)T_eH{0RQo%TY*~_1hAL)U?ilVe>zn9g;vV;1<_r&b=rV73#DdFX!xNtR zi_w|(XUrNFZOGa1oF&5x@`jf-Ec42+!h*xJUmC6V3(@kunETuDd*Ye8vZeL4w_BU} zsrBvryWDbq!y%k%pL6Iw;=2CpSn*z4%nK!oHgel}lA5Pd>w++jtX6AHHU7tVqEM@x zT^h>8sG&}%pGc5RP_Nt88)#IYMNLAM?a?e04v^-jh!)}Iqf7&>$Nbh~eyggd#R_po z{5DdAN+b!NB^cG6_J>SM;eeP!ZDdD@FxFpPP;8=9?^j5tQFk)vPX&G_4x9PsH%&Vo zfqpu0ZvCe9>kQnbIV)78*XlV(m!z$8bIdPT!-qDzwUQosRkAKWNya`k(D4l~`-Av= zdLN@xtW%;>`jxW(Qsu%G`Dm(IHtJ7bO#nT6O3^ZJl}~Lboad^5>}83Jm=PY7Jf_ delta 746 zcmYk4$x;(x6otRe)Rj&X2qXbb1Y#Nmf|5W6KtNG3Dmb8s;*1I`Tw3KeORFqb_R6hm z7a~rN zQ_R}TnaI4uY0fw-aMtFW@#l?MH0FXaO-ES`gDx6#$-G`pu*9;>m7V9!Xe>k4qUl@l zA^%s@>l&oslHsb&HJ9tG_^H@J_69d?R$XqfW^>!+4(k?6s>%CrVwJJGthn4W=Dslx zcAL(*fEQb5ULOemsG8BTCgeGOf=oo`6)QyXt-4`nL4GSuE_ zjA>OH{X%^CJI;D(kA#k^)1j06Oy_^0F5%Q3-Cyak*im69P*SHuxU9Jqt!{!OlTuWb t!kX6Dkg6#yWm*bmCPcN)xc<#5vw>9ewZuSWCHbh@OzO_kQws*v{{m`9PpAL@ diff --git a/src/main/resources/runner-classes/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerPerTestMethod.class b/src/main/resources/runner-classes/eu/stamp_project/testrunner/runner/coverage/JUnit5JacocoRunnerPerTestMethod.class index 7e0b12f2414e026baba96ace5d1319efcc0adaf1..b44b845a5c48e9b94314fc9d14ab2f64f7f567ad 100644 GIT binary patch delta 806 zcmYk4OH&g;6otP@GBado9wG@Qpn{Qz1PsUiWOjs6Xx0HQiPIJq`CYJm8@r$0NgxhR5Vxo)~7Cv>4fQ zcKxUG+lrOXEX==LTFehGEazY4X7jHt!VT+Ri{6If)JaQ~Vi$z5L|$Ahsq&|bs|yDt zrv@RpC{-i`wPOd_B-JwOehmlZoT5X5lA+^g-?ebHydsJ8< z>V==?7@;942_K}OBXfG2&{U?W@e|=qBE5EVBC>^@uqEMa;U?@2iW2rmVTMuRNgO|G zVuh4krNRexZjtSDHSkpqQ z?5NuJQblj-Xxt(?zKvIy%4|?9!^kL+QMyUlo>aNueH&DKX1~RnoD2o(J1G&|B6VBE z&XbhVMunIkr$emm5>vays2=H{SCn>=mEXFZzMxZmKv5v4GRVu?a!s3TTJm)S1v>u$ DD6eIX delta 712 zcmX|-*-{fx5Qe|WHe@&f1OgIdnYe|72ucz*1vf+`E-0e7D_Z4CSh@2Ba^;n8V40!{ zT&ncmOP|4q@XGSw`&_W~qJ>KqE?Za&%a+eQ$2RvpHkz$exw-C*mmCkwwPWF-g-1MgJmIP1nT6-P@OkOj z<<;KD)L3lqch}ok!y{gp+9njofX0J3p4w(L){u7ZNa};2Seh=6Bo6Rek!RS>V^Zc07?+AiN)xh{P-`UGN2BCB7xJA8d1a5v72_BQj&nlF z;6A8fN^97haFdx&QgNXeQnI<}vJHb;X*)VlAtxzBJ;DgjphBi7Mg$=xsRX_BGfi3b zjm~xa#?&S`rLkw2RmMo(tBX~t7C+Nf|3-SJv`-^Y=+^J_XAbDm^8ct;x^JIDU+DL+ zCyhnqH8RpO>N~5aI!zB}L^7uy6+K~1H1nE&LA;CNtID~g%yRVnLu~@xDyoJm^y%`P K06kf(LG>STcSxoH