From f9a6f7aad12d7f40d6d706f68c38e8993e6e58a4 Mon Sep 17 00:00:00 2001 From: levBagryansky <28lev11@gmail.com> Date: Tue, 6 Aug 2024 13:39:04 +0300 Subject: [PATCH] #3267: Added xcop condition --- .../org/eolang/maven/OptimizeMojoTest.java | 4 +- .../java/org/eolang/maven/XcopCondition.java | 60 +++++++++++++++++++ .../test/java/org/eolang/maven/Xmir2Xmir.java | 2 + 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 eo-maven-plugin/src/test/java/org/eolang/maven/XcopCondition.java diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java index 109a3dad30..70fbd0112c 100644 --- a/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java @@ -46,6 +46,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; @@ -74,7 +75,8 @@ void checksPacks(final String pack) throws IOException { @ParameterizedTest @ClasspathSource(value = "org/eolang/maven/xmir2xmir/", glob = "**.yaml") - void checksXmirToXmir(final String pack, @TempDir final Path dir) throws Exception { + @ExtendWith(XcopCondition.class) + void checksXmirToXmir(final String pack, @TempDir final Path dir) { MatcherAssert.assertThat( "Xmir2xmir tests passes", new Xmir2Xmir(pack, dir), diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/XcopCondition.java b/eo-maven-plugin/src/test/java/org/eolang/maven/XcopCondition.java new file mode 100644 index 0000000000..6ef8bdba37 --- /dev/null +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/XcopCondition.java @@ -0,0 +1,60 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2024 Objectionary.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package org.eolang.maven; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.regex.Pattern; +import java.util.stream.Stream; +import org.junit.jupiter.api.extension.ConditionEvaluationResult; +import org.junit.jupiter.api.extension.ExecutionCondition; +import org.junit.jupiter.api.extension.ExtensionContext; + +/** + * JUnit's extension to skip a test if there is no xcop command. + * Xcop is needed to bring xml to a single format. + * + * @since 0.40 + */ +@SuppressWarnings("JTCOP.RuleAllTestsHaveProductionClass") +public final class XcopCondition implements ExecutionCondition { + @Override + public ConditionEvaluationResult evaluateExecutionCondition( + final ExtensionContext context) { + final ConditionEvaluationResult ret; + final boolean exists = Stream.of( + System.getenv("PATH").split(Pattern.quote(File.pathSeparator)) + ) + .map(Paths::get) + .anyMatch(path -> Files.exists(path.resolve("xcop"))); + if (exists) { + ret = ConditionEvaluationResult.enabled("xcop is installed"); + } else { + ret = ConditionEvaluationResult.disabled("There is not xcop here"); + } + return ret; + } +} diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/Xmir2Xmir.java b/eo-maven-plugin/src/test/java/org/eolang/maven/Xmir2Xmir.java index f4b7437f59..6e3720744a 100644 --- a/eo-maven-plugin/src/test/java/org/eolang/maven/Xmir2Xmir.java +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/Xmir2Xmir.java @@ -43,6 +43,8 @@ * Test scenario in YAML. * * @since 0.1 + * @todo #3267:90min Add better error printing. Ideally, it should print the difference + * the way the linux diff command does (line by line). */ @SuppressWarnings({"JTCOP.RuleAllTestsHaveProductionClass", "JTCOP.RuleCorrectTestName"}) public final class Xmir2Xmir {