From 1c6b9063367a7480b12b7413d1bfbf945be1ef98 Mon Sep 17 00:00:00 2001 From: Abel Salgado Romero Date: Thu, 21 May 2020 00:48:32 +0200 Subject: [PATCH 1/6] adds compatibility to install gems with jruby > 9.2.10.x --- .gitignore | 2 + .../pom.xml | 2 +- .../pom.xml | 4 +- .../pom.xml | 53 ++++++ .../verify.bsh | 8 + parent-mojo/pom.xml | 2 +- pom.xml | 6 + .../saumya/mojo/ruby/gems/GemsInstaller.java | 82 +++++---- .../saumya/mojo/ruby/rails/RailsService.java | 2 +- .../mojo/ruby/script/AbstractLauncher.java | 37 ++++- .../saumya/mojo/ruby/script/AntLauncher.java | 104 ++++++++---- .../mojo/ruby/script/EmbeddedLauncher.java | 28 +++- .../saumya/mojo/ruby/script/JRubyVersion.java | 33 ++++ .../de/saumya/mojo/ruby/script/Launcher.java | 14 ++ .../de/saumya/mojo/ruby/script/Script.java | 13 ++ .../mojo/ruby/script/ScriptFactory.java | 155 +++++++++--------- .../mojo/ruby/EmbeddedLauncherTest.java | 10 +- .../ruby/script/AbstractLauncherTest.java | 85 ++++++++++ .../mojo/ruby/script/JRubyVersionTest.java | 53 ++++++ .../mojo/ruby/script/ScriptFactoryTest.java | 59 +++++++ .../mojo/ruby/script/TestDataFactories.java | 71 ++++++++ 21 files changed, 658 insertions(+), 165 deletions(-) create mode 100644 gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/pom.xml create mode 100644 gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh create mode 100644 ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java create mode 100644 ruby-tools/src/test/java/de/saumya/mojo/ruby/script/AbstractLauncherTest.java create mode 100644 ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java create mode 100644 ruby-tools/src/test/java/de/saumya/mojo/ruby/script/ScriptFactoryTest.java create mode 100644 ruby-tools/src/test/java/de/saumya/mojo/ruby/script/TestDataFactories.java diff --git a/.gitignore b/.gitignore index 2088ce53..aaf23d24 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ target tmp *Backup release.properties +.idea/ +*.iml \ No newline at end of file diff --git a/gem-maven-plugin/src/it/include-rubygems-in-test-resources-failure/pom.xml b/gem-maven-plugin/src/it/include-rubygems-in-test-resources-failure/pom.xml index ba313582..f2010392 100644 --- a/gem-maven-plugin/src/it/include-rubygems-in-test-resources-failure/pom.xml +++ b/gem-maven-plugin/src/it/include-rubygems-in-test-resources-failure/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.example - target/rubygems-in-test-resources + rubygems-in-test-resources-failure testing diff --git a/gem-maven-plugin/src/it/include-rubygems-in-test-resources/pom.xml b/gem-maven-plugin/src/it/include-rubygems-in-test-resources/pom.xml index 1b46367c..2fac30fe 100644 --- a/gem-maven-plugin/src/it/include-rubygems-in-test-resources/pom.xml +++ b/gem-maven-plugin/src/it/include-rubygems-in-test-resources/pom.xml @@ -14,8 +14,8 @@ rubygems - yard - 0.8.0 + sass + 3.2.7 gem diff --git a/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/pom.xml b/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/pom.xml new file mode 100644 index 00000000..bbf18345 --- /dev/null +++ b/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + rubygems + pom_first + 0.0.0 + Installs a gem from http://rubygems.org with Ruby 2.7 compatibility + + 9.2.10.0 + + + + rubygems + yard + 0.9.25 + gem + + + + + + org.torquebox.mojo + mavengem-wagon + 1.0.3 + + + + + de.saumya.mojo + gem-maven-plugin + @project.version@ + + ${jruby.version} + + + + install-gems + + initialize + + initialize + + + + + + + + mavengems + mavengem:http://rubygems.org + + + diff --git a/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh b/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh new file mode 100644 index 00000000..7b2d7c00 --- /dev/null +++ b/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh @@ -0,0 +1,8 @@ +import java.io.*; +import org.codehaus.plexus.util.FileUtils; + +File f = new File( basedir, "target/rubygems/gems/yard-0.9.25" ); +if ( !f.exists() ) +{ + throw new RuntimeException( "file does not exists: " + f ); +} \ No newline at end of file diff --git a/parent-mojo/pom.xml b/parent-mojo/pom.xml index 9657eeb7..b683afa1 100644 --- a/parent-mojo/pom.xml +++ b/parent-mojo/pom.xml @@ -118,7 +118,7 @@ maven-invoker-plugin - 1.5 + 3.0.1 src/it ${project.build.directory}/it diff --git a/pom.xml b/pom.xml index 6d5287c8..45b8cfab 100644 --- a/pom.xml +++ b/pom.xml @@ -41,6 +41,12 @@ 4.8.2 test + + org.assertj + assertj-core + 3.16.1 + test + diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java index 4ead6121..98ce7a12 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java @@ -1,36 +1,37 @@ /** - * + * */ package de.saumya.mojo.ruby.gems; -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.util.Collection; -import java.util.List; - +import de.saumya.mojo.ruby.script.JRubyVersion; +import de.saumya.mojo.ruby.script.Script; +import de.saumya.mojo.ruby.script.ScriptException; +import de.saumya.mojo.ruby.script.ScriptFactory; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.FileUtils; -import de.saumya.mojo.ruby.script.Script; -import de.saumya.mojo.ruby.script.ScriptException; -import de.saumya.mojo.ruby.script.ScriptFactory; +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.util.Collection; +import java.util.List; + public class GemsInstaller { private static final String OPENSSL_VERSION = "0.8.2"; private static final String OPENSSL = "jruby-openssl"; - + private static final FileFilter FILTER = new FileFilter() { - + public boolean accept(File f) { return f.getName().endsWith(".gemspec"); } }; - + public final GemsConfig config; public final ScriptFactory factory; @@ -54,19 +55,19 @@ public void installPom(final MavenProject pom, ScriptException, GemException { installPom(pom, localRepository, null); } - + public void installPom(final MavenProject pom, final ArtifactRepository localRepository, String scope) throws IOException, ScriptException, GemException { installGems(pom, localRepository, scope); } - + public MavenProject installOpenSSLGem(final Object repositorySystemSession, final ArtifactRepository localRepository, List remotes) throws GemException, IOException, ScriptException { return installGem(OPENSSL, OPENSSL_VERSION, repositorySystemSession, localRepository, remotes); } - + public MavenProject installGem(final String name, final String version, final Object repositorySystemSession, final ArtifactRepository localRepository, List remoteRepositories) throws GemException, @@ -87,21 +88,21 @@ public MavenProject installGem(final String name, final String version, installPom(pom); return pom; } - + public void installGems(final MavenProject pom, - final ArtifactRepository localRepository) + final ArtifactRepository localRepository) throws IOException, ScriptException, GemException { installGems(pom, localRepository, null); - + } - + public void installGems(final MavenProject pom, - final ArtifactRepository localRepository, String scope ) + final ArtifactRepository localRepository, String scope ) throws IOException, ScriptException, GemException { installGems(pom, (Collection)null, localRepository, scope); } - + public void installGems(final MavenProject pom, PluginDescriptor plugin, final ArtifactRepository localRepository) throws IOException, ScriptException, GemException { @@ -118,7 +119,7 @@ public void installGems(final MavenProject pom, final Collection artif throws IOException, ScriptException, GemException { installGems( pom, artifacts, localRepository, remoteRepos, null ); } - + public void installGems(final MavenProject pom, final Collection artifacts, final ArtifactRepository localRepository, List remoteRepos, String scope ) throws IOException, @@ -130,9 +131,9 @@ public void installGems(final MavenProject pom, final Collection artif boolean hasAlreadyOpenSSL = false; for (final Artifact artifact : pom.getArtifacts()) { // assume pom.getBasedir() != null indicates the project pom - if ( ( "compile".equals(artifact.getScope()) || + if ( ( "compile".equals(artifact.getScope()) || "runtime".equals(artifact.getScope()) || - pom.getBasedir() != null ) && + pom.getBasedir() != null ) && ( scope == null || scope.equals(artifact.getScope()) ) ) { if (!artifact.getFile().exists()) { this.manager.resolve(artifact, @@ -160,7 +161,7 @@ public void installGems(final MavenProject pom, final Collection artif } if ( pom.getArtifact().getFile() != null // to filter out target/classes - && pom.getArtifact().getFile().isFile() + && pom.getArtifact().getFile().isFile() // have only gem files && pom.getArtifact().getFile().getName().endsWith(".gem") ) { script = maybeAddArtifact(script, pom.getArtifact()); @@ -194,7 +195,7 @@ public void installGems(final MavenProject pom, final Collection artif this.config.getBinDirectory().mkdirs(); } script.execute(); - + if (this.config.getGemHome() != null){ // workaround for unpatched: https://github.com/rubygems/rubygems/commit/21cccd55b823848c5e941093a615b0fdd6cd8bc7 for(File spec : new File(this.config.getGemHome(), "specifications").listFiles(FILTER)){ @@ -227,21 +228,26 @@ private boolean exists(Artifact artifact) { } return false; } - + private Script maybeAddArtifact(Script script, final Artifact artifact) throws IOException, GemException { if (artifact.getType().contains("gem")) { if (!exists(artifact)) { if (script == null) { + script = this.factory.newScriptFromJRubyJar("gem") .addArg("install") .addArg("--ignore-dependencies") - .addArg(booleanArg(this.config.isAddRdoc(), "rdoc")) - .addArg(booleanArg(this.config.isAddRI(), "ri")) - .addArg(booleanArg(this.config.isUserInstall(), - "user-install")) - .addArg(booleanArg(this.config.isVerbose(), - "verbose")); + .addArg(booleanArg(this.config.isUserInstall(), "user-install")) + .addArg(booleanArg(this.config.isVerbose(), "verbose")); + + final JRubyVersion version = this.getVersion(); + if (version == null || version.isLanguageLowerThan(2,6)) { + script.addArg(booleanArg(this.config.isAddRdoc(), "rdoc")) + .addArg(booleanArg(this.config.isAddRI(), "ri")); + } else { + script.addArg(booleanArg(this.config.isAddRdoc(), "document")); + } } if (artifact.getFile() != null) { @@ -252,6 +258,14 @@ private Script maybeAddArtifact(Script script, final Artifact artifact) return script; } + private JRubyVersion getVersion() { + try { + return this.factory.getVersion(); + } catch (Exception e) { + return null; + } + } + private String booleanArg(final boolean flag, final String name) { return "--" + (flag ? "" : "no-") + name; } diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/rails/RailsService.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/rails/RailsService.java index 64bec81c..0674180f 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/rails/RailsService.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/rails/RailsService.java @@ -16,7 +16,7 @@ public class RailsService { private final GemsInstaller installer; private final RailsManager manager; private final RailsState state; - private final Object session; + private Object session; public RailsService(final RailsState state, final Object repositorySystemSession, diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AbstractLauncher.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AbstractLauncher.java index ce7c814c..4475bbef 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AbstractLauncher.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AbstractLauncher.java @@ -2,17 +2,22 @@ import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.util.List; abstract class AbstractLauncher implements Launcher { protected abstract void doExecute(final File launchDirectory, - final List args, final File outputFile) + final List args, final File outputFile) + throws ScriptException, IOException; + + protected abstract void doExecute(final File launchDirectory, + final List args, final OutputStream outputStream) throws ScriptException, IOException; public void execute(final List args) throws ScriptException, IOException { - doExecute(null, args, null); + doExecute(null, args, (File) null); } public void execute(final List args, final File outputFile) @@ -20,28 +25,44 @@ public void execute(final List args, final File outputFile) doExecute(null, args, outputFile); } + public void execute(final List args, final OutputStream outputStream) + throws ScriptException, IOException { + doExecute(null, args, outputStream); + } + public void executeIn(final File launchDirectory, final List args) throws ScriptException, IOException { - doExecute(launchDirectory, args, null); + doExecute(launchDirectory, args, (File) null); } public void executeIn(final File launchDirectory, final List args, - final File outputFile) throws ScriptException, IOException { + final File outputFile) throws ScriptException, IOException { doExecute(launchDirectory, args, outputFile); } + public void executeIn(final File launchDirectory, final List args, + final OutputStream outputStream) throws ScriptException, IOException { + doExecute(launchDirectory, args, outputStream); + } + public void executeScript(final String script, final List args) throws ScriptException, IOException { - executeScript(script, args, null); + executeScript(script, args, (File) null); } public void executeScript(final String script, final List args, - final File outputFile) throws ScriptException, IOException { + final File outputFile) throws ScriptException, IOException { executeScript(null, script, args, outputFile); } + public void executeScript(final String script, final List args, + final OutputStream outputStream) throws ScriptException, IOException { + executeScript(null, script, args, outputStream); + } + public void executeScript(final File launchDirectory, final String script, - final List args) throws ScriptException, IOException { - executeScript(launchDirectory, script, args, null); + final List args) throws ScriptException, IOException { + executeScript(launchDirectory, script, args, (File) null); } + } diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AntLauncher.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AntLauncher.java index 8b6b0ae3..39a67eb1 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AntLauncher.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/AntLauncher.java @@ -3,18 +3,16 @@ */ package de.saumya.mojo.ruby.script; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.List; -import java.util.Map; - +import de.saumya.mojo.ruby.Logger; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Environment.Variable; +import org.apache.tools.ant.types.Path; -import de.saumya.mojo.ruby.Logger; +import java.io.*; +import java.nio.file.Files; +import java.util.List; +import java.util.Map; class AntLauncher extends AbstractLauncher { @@ -22,11 +20,13 @@ class AntLauncher extends AbstractLauncher { private static final String DEFAULT_XMX = "-Xmx384m"; - private final Logger logger; + private static final String TEMP_FILE_PREFIX = "jruby-ant-launcher-"; + + private final Logger logger; private final ScriptFactory factory; - private final Project project; + private final Project project; AntLauncher(final Logger logger, final ScriptFactory factory) { this.logger = logger; @@ -35,8 +35,14 @@ class AntLauncher extends AbstractLauncher { } @Override - protected void doExecute(final File launchDirectory, - final List args, final File outputFile) { + protected void doExecute(final File launchDirectory, + final List args, File outputFile) throws ScriptException, IOException { + doExecute(launchDirectory, args,new FileOutputStream(outputFile)); + } + + @Override + protected void doExecute(final File launchDirectory, final List args, + final OutputStream outputStream) throws ScriptException, IOException { final Java java = new Java(); java.setProject(this.project); java.setClassname("org.jruby.Main"); @@ -79,7 +85,7 @@ protected void doExecute(final File launchDirectory, // Does not work on all JVMs // if (!factory.jvmArgs.matches("(-client|-server)")) { -// java.createJvmarg().setValue("-client"); +// java.createJvmarg().setValue("-client"); // } for (String arg : factory.jvmArgs.list) { @@ -102,38 +108,50 @@ protected void doExecute(final File launchDirectory, java.createJvmarg().setValue("-Xbootclasspath/a:" + jrubyJar.getAbsolutePath()); } - - if (outputFile != null) { - java.setOutput(outputFile); + + File outputTempFile = null; + if (outputStream != null) { + outputTempFile = File.createTempFile(TEMP_FILE_PREFIX, ".output"); + java.setOutput(outputTempFile); } + java.setLogError(true); - File tempFile = null; + File errorTempFile = null; try { - tempFile = File.createTempFile("jruby-ant-launcher-", ".log"); - tempFile.deleteOnExit(); - java.setError(tempFile); + errorTempFile = File.createTempFile(TEMP_FILE_PREFIX, ".log"); + errorTempFile.deleteOnExit(); + java.setError(errorTempFile); java.execute(); - } - catch(IOException e) { + + if (outputStream != null) { + writeInto(outputTempFile, outputStream); + outputTempFile.delete(); + } + } catch (IOException e) { logger.warn("can not create tempfile for stderr"); java.execute(); - } - finally { - if (tempFile != null) { + } finally { + if (errorTempFile != null && errorTempFile.length() > 0) { try { - byte[] encoded = Files.readAllBytes(tempFile.toPath()); - if (encoded.length > 0) { + byte[] encoded = Files.readAllBytes(errorTempFile.toPath()); logger.warn(new String(encoded)); - } - } - catch(IOException e) { + } catch (IOException e) { logger.warn("can not read error file"); } - tempFile.delete(); + errorTempFile.delete(); } } } + private void writeInto(File file, OutputStream outputStream) throws IOException { + byte[] buffer = new byte[1024 * 4]; + final InputStream fileIS = new FileInputStream(file); + + while (fileIS.read(buffer) > 0) { + outputStream.write(buffer); + } + } + private Project createAntProject() { final Project project = new Project(); @@ -153,7 +171,7 @@ private Project createAntProject() { @Override public void execute(final List args) throws ScriptException, IOException { - doExecute(null, args, null); + doExecute(null, args, (OutputStream) null); } @Override @@ -165,7 +183,7 @@ public void execute(final List args, final File outputFile) @Override public void executeIn(final File launchDirectory, final List args) throws ScriptException, IOException { - doExecute(launchDirectory, args, null); + doExecute(launchDirectory, args, (OutputStream) null); } @Override @@ -177,7 +195,7 @@ public void executeIn(final File launchDirectory, final List args, @Override public void executeScript(final String script, final List args) throws ScriptException, IOException { - executeScript(script, args, null); + executeScript(script, args, (OutputStream) null); } @Override @@ -189,15 +207,29 @@ public void executeScript(final String script, final List args, @Override public void executeScript(final File launchDirectory, final String script, final List args) throws ScriptException, IOException { - executeScript(launchDirectory, script, args, null); + executeScript(launchDirectory, script, args, (OutputStream) null); } + @Override public void executeScript(final File launchDirectory, final String script, final List args, final File outputFile) throws ScriptException, IOException { + addScriptArguments(script, args); + doExecute(launchDirectory, args, outputFile); + } + + @Override + public void executeScript(final File launchDirectory, final String script, + final List args, final OutputStream outputStream) + throws ScriptException, IOException { + addScriptArguments(script, args); + doExecute(launchDirectory, args, outputStream); + } + + private void addScriptArguments(String script, List args) { args.add(0, "-e"); args.add(1, script); args.add(2, "--"); - doExecute(launchDirectory, args, outputFile); } + } diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/EmbeddedLauncher.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/EmbeddedLauncher.java index 32f9be52..ea9007be 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/EmbeddedLauncher.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/EmbeddedLauncher.java @@ -3,15 +3,15 @@ */ package de.saumya.mojo.ruby.script; -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; +import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; +import java.nio.file.Files; import java.util.List; import java.util.Map; +import org.apache.commons.io.FileUtils; import org.codehaus.classworlds.ClassRealm; import org.codehaus.classworlds.DuplicateRealmException; import org.codehaus.classworlds.NoSuchRealmException; @@ -20,6 +20,8 @@ class EmbeddedLauncher extends AbstractLauncher { + private static final String TEMP_FILE_PREFIX = "jruby-embedded-launcher-"; + private static final Class[] No_ARG_TYPES = new Class[0]; private static final Object[] NO_ARGS = new Object[0]; @@ -93,6 +95,16 @@ protected void doExecute(final File launchDirectory, doExecute(launchDirectory, outputFile, args, true); } + @Override + protected void doExecute(final File launchDirectory, + final List args, OutputStream outputStream) + throws ScriptException, IOException { + final File outputFile = Files.createTempFile(TEMP_FILE_PREFIX, ".output").toFile(); + doExecute(launchDirectory, outputFile, args, true); + byte[] outputBytes = FileUtils.readFileToByteArray(outputFile); + outputStream.write(outputBytes); + } + private void doExecute(final File launchDirectory, final File outputFile, final List args, final boolean warn) throws ScriptException, IOException { @@ -201,6 +213,16 @@ private void doExecute(final File launchDirectory, final File outputFile, } } + @Override + public void executeScript(final File launchDirectory, + final String script, final List args, + final OutputStream outputStream) throws ScriptException, IOException { + final File outputFile = Files.createTempFile(TEMP_FILE_PREFIX, ".output").toFile(); + executeScript(launchDirectory, script, args, outputFile); + byte[] outputBytes = FileUtils.readFileToByteArray(outputFile); + outputStream.write(outputBytes); + } + public void executeScript(final File launchDirectory, final String script, final List args, final File outputFile) throws ScriptException, IOException { diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java new file mode 100644 index 00000000..0f0f8e88 --- /dev/null +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java @@ -0,0 +1,33 @@ +package de.saumya.mojo.ruby.script; + +public class JRubyVersion { + + private final String version; + private final String language; + + public JRubyVersion(String version, String language) { + this.version = version; + this.language = language; + } + + public String getVersion() { + return version; + } + + public String getLanguage() { + return language; + } + + public boolean isLanguageLowerThan(int major, int minor) { + final String[] parts = getLanguage().split("\\."); + + if (major < Integer.parseInt(parts[0])) + return true; + + if (minor < Integer.parseInt(parts[1])) + return true; + + return false; + } + +} diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Launcher.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Launcher.java index 779ddbb8..8343155e 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Launcher.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Launcher.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.util.List; interface Launcher { @@ -15,6 +16,9 @@ public abstract void execute(final List args) public abstract void execute(final List args, final File outputFile) throws ScriptException, IOException; + public abstract void execute(final List args, final OutputStream outputStream) + throws ScriptException, IOException; + public abstract void executeIn(final File launchDirectory, final List args) throws ScriptException, IOException; @@ -22,6 +26,9 @@ public abstract void executeIn(final File launchDirectory, final List args, final File outputFile) throws ScriptException, IOException; + public abstract void executeIn(final File launchDirectory, final List args, + final OutputStream outputStream) throws ScriptException, IOException; + public abstract void executeScript(final String script, final List args) throws ScriptException, IOException; @@ -29,6 +36,10 @@ public abstract void executeScript(final String script, final List args, final File outputFile) throws ScriptException, IOException; + public abstract void executeScript(final String script, + final List args, final OutputStream outputStream) + throws ScriptException, IOException; + public abstract void executeScript(final File launchDirectory, final String script, final List args) throws ScriptException, IOException; @@ -37,4 +48,7 @@ public abstract void executeScript(final File launchDirectory, final String script, final List args, final File outputFile) throws ScriptException, IOException; + public abstract void executeScript(final File launchDirectory, + final String script, final List args, + final OutputStream outputStream) throws ScriptException, IOException; } \ No newline at end of file diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Script.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Script.java index 7b40e409..871c506f 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Script.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/Script.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.net.URL; public class Script extends Arguments { @@ -97,6 +98,18 @@ public void execute(final File output) throws ScriptException, } } + public void execute(final OutputStream output) throws ScriptException, + IOException { + if (this.script != null) { + this.scriptFactory.launcher.executeScript(this.script, + this.list, + output); + } + else { + this.scriptFactory.launcher.execute(this.list, output); + } + } + public void executeIn(final File launchDirectory) throws ScriptException, IOException { if (this.script != null) { diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java index b0513625..57fabeb4 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java @@ -1,98 +1,95 @@ /** - * + * */ package de.saumya.mojo.ruby.script; +import de.saumya.mojo.ruby.Logger; +import de.saumya.mojo.ruby.ScriptUtils; +import org.codehaus.classworlds.ClassRealm; +import org.codehaus.classworlds.DuplicateRealmException; +import org.codehaus.classworlds.NoSuchRealmException; + +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.codehaus.classworlds.ClassRealm; -import org.codehaus.classworlds.DuplicateRealmException; -import org.codehaus.classworlds.NoSuchRealmException; - -import de.saumya.mojo.ruby.Logger; -import de.saumya.mojo.ruby.ScriptUtils; - public class ScriptFactory { public static List NO_CLASSPATH = Collections.emptyList(); - final Arguments switches = new Arguments(); - final Arguments jvmArgs = new Arguments(); + final Arguments switches = new Arguments(); + final Arguments jvmArgs = new Arguments(); - private final Map env = new HashMap(); - final File jrubyStdlibJar; + private final Map env = new HashMap(); + final File jrubyStdlibJar; - final Logger logger; - final ClassRealm classRealm; - final File jrubyJar; - final List classpathElements; - final boolean fork; + final Logger logger; + final ClassRealm classRealm; + final File jrubyJar; + final List classpathElements; + final boolean fork; - final Launcher launcher; + final Launcher launcher; public ScriptFactory(final Logger logger, final ClassRealm classRealm, - final File jrubyJar, - final List classpathElements, final boolean fork) throws ScriptException, IOException { + final File jrubyJar, + final List classpathElements, final boolean fork) throws ScriptException, IOException { this(logger, classRealm, jrubyJar, jrubyJar, classpathElements, fork); } - + public ScriptFactory(final Logger logger, final ClassRealm classRealm, - final File jrubyJar, File stdlibJar, - final List classpathElements, final boolean fork) throws ScriptException, IOException { + final File jrubyJar, File stdlibJar, + final List classpathElements, final boolean fork) throws ScriptException, IOException { this.logger = logger; this.jrubyStdlibJar = stdlibJar; this.jrubyJar = jrubyJar; - if(this.jrubyJar != null){ + if (this.jrubyJar != null) { this.logger.debug("script uses jruby jar:" + this.jrubyJar.getAbsolutePath()); } - + this.classpathElements = classpathElements == null ? NO_CLASSPATH : Collections.unmodifiableList(classpathElements); this.fork = fork; if (classRealm != null && jrubyJar != null) { this.classRealm = getOrCreateClassRealm(classRealm, jrubyJar); - } - else { + } else { this.classRealm = classRealm; } if (fork) { this.launcher = new AntLauncher(logger, this); - } - else { + } else { this.launcher = new EmbeddedLauncher(logger, this); } } - private static synchronized ClassRealm getOrCreateClassRealm(final ClassRealm classRealm, final File jrubyJar) throws MalformedURLException, ScriptException { - ClassRealm jruby; - try { - jruby = classRealm.getWorld().getRealm("jruby"); - } - catch (final NoSuchRealmException e) { - try { - jruby = classRealm.getWorld().newRealm("jruby"); - if(jrubyJar != null){ - jruby.addConstituent(jrubyJar.toURI().toURL()); - } - } - catch (final DuplicateRealmException ee) { - throw new ScriptException("could not setup classrealm for jruby", - ee); - } - } - return jruby; - } + private static synchronized ClassRealm getOrCreateClassRealm(final ClassRealm classRealm, final File jrubyJar) throws MalformedURLException, ScriptException { + ClassRealm jruby; + try { + jruby = classRealm.getWorld().getRealm("jruby"); + } catch (final NoSuchRealmException e) { + try { + jruby = classRealm.getWorld().newRealm("jruby"); + if (jrubyJar != null) { + jruby.addConstituent(jrubyJar.toURI().toURL()); + } + } catch (final DuplicateRealmException ee) { + throw new ScriptException("could not setup classrealm for jruby", + ee); + } + } + return jruby; + } public Script newScriptFromSearchPath(final String scriptName) throws IOException { @@ -104,38 +101,33 @@ public Script newScriptFromJRubyJar(final String scriptName) try { // the first part only works on jruby-complete.jar URL url = new URL("jar:file:" - + this.jrubyStdlibJar.getAbsolutePath() - + "!/META-INF/jruby.home/bin/" + scriptName); + + this.jrubyStdlibJar.getAbsolutePath() + + "!/META-INF/jruby.home/bin/" + scriptName); url.openConnection().getContent(); return new Script(this, url); - } - catch (Exception e) { + } catch (Exception e) { try { // fallback on classloader return newScriptFromResource("META-INF/jruby.home/bin/" + scriptName); - } - catch (FileNotFoundException ee) { + } catch (FileNotFoundException ee) { // find jruby-home String base = "."; - if ( this.env.containsKey( "JRUBY_HOME" ) ) { - base = this.env.get( "JRUBY_HOME" ); - } - else if ( System.getProperty( "jruby.home" ) != null ) { - base = System.getProperty( "jruby.home" ); - } - else { - for( String arg : this.jvmArgs.list ){ - if (arg.startsWith("-Djruby.home=")){ + if (this.env.containsKey("JRUBY_HOME")) { + base = this.env.get("JRUBY_HOME"); + } else if (System.getProperty("jruby.home") != null) { + base = System.getProperty("jruby.home"); + } else { + for (String arg : this.jvmArgs.list) { + if (arg.startsWith("-Djruby.home=")) { base = arg.substring("-Djruby.home=".length()); break; } } } - File f = new File( base, new File( "bin", scriptName ).getPath() ); - if ( f.exists() ){ + File f = new File(base, new File("bin", scriptName).getPath()); + if (f.exists()) { return new Script(this, f); - } - else { + } else { throw ee; } } @@ -151,8 +143,7 @@ public Script newScriptFromResource(final String scriptName) } if (url.getProtocol().equals("file")) { return new Script(this, url.getPath(), false); - } - else { + } else { return new Script(this, url); } } @@ -172,7 +163,7 @@ public Script newScript(final File file) { public void addJvmArgs(final String args) { this.jvmArgs.parseAndAdd(args); } - + public void addSwitch(final String name) { this.switches.add(name); } @@ -188,13 +179,12 @@ public void addSwitches(final String switches) { public void addEnv(final String name, final File value) { if (value != null) { this.env.put(name, value.getAbsolutePath()); - } - else { + } else { this.env.put(name, null); } } - - public Map environment(){ + + public Map environment() { return env; } @@ -211,6 +201,23 @@ public void addEnvs(final String environmentVars) { } } + public JRubyVersion getVersion() throws ScriptException, IOException { + final ByteArrayOutputStream os = new ByteArrayOutputStream(); + this.newArguments() + .addArg("-v") + .execute(os); + final String[] versionParts = os.toString(StandardCharsets.UTF_8.toString()) + .split(" "); + final String jrubyVersion = versionParts[1]; + final String languageVersion = extractLanguageVersion(versionParts[2]); + return new JRubyVersion(jrubyVersion, languageVersion); + } + + private String extractLanguageVersion(String versionPart) { + return versionPart + .replaceAll("\\(|\\)|ruby-", ""); + } + @Override public String toString() { // TODO diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/EmbeddedLauncherTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/EmbeddedLauncherTest.java index f85ffddf..b83443d9 100644 --- a/ruby-tools/src/test/java/de/saumya/mojo/ruby/EmbeddedLauncherTest.java +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/EmbeddedLauncherTest.java @@ -15,8 +15,8 @@ import de.saumya.mojo.ruby.script.ScriptFactory; public class EmbeddedLauncherTest extends TestCase { - - private static final String SEP = System.getProperty("line.separator"); + + private static final String SEP = System.getProperty("line.separator"); public EmbeddedLauncherTest(final String testName) { super(testName); @@ -42,7 +42,7 @@ public void setUp() throws Exception { GemsConfig config = new GemsConfig(); config.setGemHome(home); config.addGemPath(path); - + this.path.mkdirs(); this.expected = "onetwothree" + SEP + this.home.getAbsolutePath() + SEP + this.path.getAbsolutePath() + SEP; @@ -135,7 +135,7 @@ public void testScript() throws Exception { .addArg("three") .execute(); assertEquals(this.expected, - FileUtils.fileRead("target/test-classes/test.rb-gem.txt")); + FileUtils.fileRead("target/test-classes/test.rb-gem.txt")); } public void testScriptInTarget() throws Exception { @@ -145,7 +145,7 @@ public void testScriptInTarget() throws Exception { .addArg("three") .executeIn(new File("target")); assertEquals(this.expected, - FileUtils.fileRead("target/test-classes/test.rb-gem.txt") ); + FileUtils.fileRead("target/test-classes/test.rb-gem.txt") ); } public void testScriptWithOutput() throws Exception { diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/AbstractLauncherTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/AbstractLauncherTest.java new file mode 100644 index 00000000..733a69e5 --- /dev/null +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/AbstractLauncherTest.java @@ -0,0 +1,85 @@ +package de.saumya.mojo.ruby.script; + +import de.saumya.mojo.ruby.NoopLogger; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; + +import static de.saumya.mojo.ruby.script.TestDataFactories.gemScriptFactory; +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(Parameterized.class) +public class AbstractLauncherTest { + + @Parameterized.Parameters + public static Collection parameters() throws ScriptException, IOException { + final NoopLogger logger = new NoopLogger(); + final GemScriptFactory gemScriptFactory = gemScriptFactory(testClassloader()); + + return Arrays.asList(new Object[][]{ + {new AntLauncher(logger, gemScriptFactory)}, + {new EmbeddedLauncher(logger, gemScriptFactory)} + }); + } + + public final AbstractLauncher launcher; + + public AbstractLauncherTest(AbstractLauncher launcher) { + this.launcher = launcher; + } + + @Test + public void should_execute_command_with_args_and_return_in_output_stream() throws IOException, ScriptException { + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + launcher.execute(Arrays.asList("-v"), outputStream); + + final String output = outputStream.toString(); + assertThat(output).startsWith("jruby 1.7.3 (1.9.3p385)"); + } + + @Test + public void should_execute_command_with_args_and_return_in_file() throws IOException, ScriptException { + + File outputFile = org.assertj.core.util.Files.newTemporaryFile(); + launcher.execute(Arrays.asList("-v", "--help"), outputFile); + + byte[] fileBytes = Files.readAllBytes(outputFile.toPath()); + final String output = new String(fileBytes, StandardCharsets.UTF_8); + String[] lines = output.split("\n"); + assertThat(lines).hasSizeGreaterThan(3); + // -v line + assertThat(lines[0]).startsWith("jruby 1.7.3 (1.9.3p385)"); + // --help first + assertThat(lines[1]).isEqualTo("Usage: jruby [switches] [--] [programfile] [arguments]"); + } + + @Test + public void should_execute_command_without_args_and_fail_silently() throws IOException, ScriptException { + + // NOTE: process hangs because starts online interpreter + if (launcher instanceof EmbeddedLauncher) + return; + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + launcher.execute(Collections.emptyList()); + launcher.execute(Collections.emptyList(), outputStream); + + final String output = outputStream.toString(); + assertThat(output).isEmpty(); + } + + private static ClassLoader testClassloader() { + return AbstractLauncherTest.class.getClassLoader(); + } + +} diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java new file mode 100644 index 00000000..a097662f --- /dev/null +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java @@ -0,0 +1,53 @@ +package de.saumya.mojo.ruby.script; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class JRubyVersionTest { + + @Test + public void should_return_true_when_compared_language_version_is_lower_than_major() { + final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + + boolean result = version.isLanguageLowerThan(1, 5); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_true_when_compared_language_version_is_lower_than_minor() { + final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + + boolean result = version.isLanguageLowerThan(2, 4); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_true_when_compared_language_version_is_equal() { + final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + + boolean result = version.isLanguageLowerThan(2, 5); + + assertThat(result).isFalse(); + } + + @Test + public void should_return_false_when_compared_language_version_is_higher_than_major() { + final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + + boolean result = version.isLanguageLowerThan(3, 5); + + assertThat(result).isFalse(); + } + + @Test + public void should_return_false_when_compared_language_version_is_higher_than_minor() { + final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + + boolean result = version.isLanguageLowerThan(2, 6); + + assertThat(result).isFalse(); + } +} diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/ScriptFactoryTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/ScriptFactoryTest.java new file mode 100644 index 00000000..c4cd9a37 --- /dev/null +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/ScriptFactoryTest.java @@ -0,0 +1,59 @@ +package de.saumya.mojo.ruby.script; + +import org.jruby.Main; +import org.junit.Test; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; + +import static de.saumya.mojo.ruby.script.TestDataFactories.gemScriptFactory; +import static org.assertj.core.api.Assertions.assertThat; + +public class ScriptFactoryTest { + + @Test + public void should_execute_script_with_only_args_and_return_in_output_stream() throws ScriptException, IOException { + Main main = new Main(); + final GemScriptFactory gemScriptFactory = gemScriptFactory(testClassloader()); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + gemScriptFactory.newArguments() + .addArg("-v") + .execute(outputStream); + + final String output = outputStream.toString(); + assertThat(output).startsWith("jruby 1.7.3 (1.9.3p385)"); + } + + @Test + public void should_execute_script_with_only_args_and_return_in_file() throws ScriptException, IOException { + Main main = new Main(); + final GemScriptFactory gemScriptFactory = gemScriptFactory(testClassloader()); + + File outputFile = org.assertj.core.util.Files.newTemporaryFile(); + gemScriptFactory.newArguments() + .addArg("-v") + .execute(outputFile); + + byte[] fileBytes = Files.readAllBytes(outputFile.toPath()); + final String output = new String(fileBytes, StandardCharsets.UTF_8); + assertThat(output).startsWith("jruby 1.7.3 (1.9.3p385)"); + } + + @Test + public void should_return_jruby_version() throws ScriptException, IOException { + final GemScriptFactory gemScriptFactory = gemScriptFactory(testClassloader()); + + JRubyVersion version = gemScriptFactory.getVersion(); + + assertThat(version.getVersion()).isEqualTo("1.7.3"); + assertThat(version.getLanguage()).isEqualTo("1.9.3p385"); + } + + private ClassLoader testClassloader() { + return this.getClass().getClassLoader(); + } +} diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/TestDataFactories.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/TestDataFactories.java new file mode 100644 index 00000000..2182fc00 --- /dev/null +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/TestDataFactories.java @@ -0,0 +1,71 @@ +package de.saumya.mojo.ruby.script; + +import de.saumya.mojo.ruby.NoopLogger; +import de.saumya.mojo.ruby.gems.GemsConfig; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Paths; +import java.util.ArrayList; + +public class TestDataFactories { + + public static GemScriptFactory gemScriptFactory(ClassLoader cl) throws ScriptException, IOException { + return new GemScriptFactory( + new NoopLogger(), + null, + findJRubyJar(cl), + new ArrayList(), + true, + gemsConfig()); + } + + public static GemsConfig gemsConfig() { + final GemsConfig config = new GemsConfig(); + config.setGemHome(new File("target")); + config.addGemPath(new File("target/rubygems")); + return config; + } + + public static File findJRubyJar(ClassLoader cl) { + final File inClassLoader = findInClassLoader((URLClassLoader) cl); + if (inClassLoader == null) { + return findForClass(org.jruby.Main.class); + } else { + return inClassLoader; + } + } + + private static File findForClass(Class className) { + final String fullClassname = '/' + className.getName().replace('.', '/') + ".class"; + final URL location = className.getResource(fullClassname); + if (location != null) { + String substring = urlAsAbsolutePath(location, fullClassname); + return new File(substring); + } + return null; + } + + private static String urlAsAbsolutePath(URL url, String fullClassname) { + final String path = url.getPath(); + if (path.startsWith("file:")) + return path.substring("file:".length(), path.indexOf("!" + fullClassname)); + else + return path; + } + + private static File findInClassLoader(URLClassLoader cl) { + URLClassLoader classLoader = cl; + for (URL url : classLoader.getURLs()) { + if (url.getFile().contains("jruby-complete")) { + return new File(url.getPath()); + } + if (url.getFile().contains("jruby-core")) { + return new File(url.getPath()); + } + } + return null; + } +} From 55f8be4a8865fd6389889ad08172788bbbe6c145 Mon Sep 17 00:00:00 2001 From: Abel Salgado Romero Date: Sat, 11 Jul 2020 18:12:07 +0200 Subject: [PATCH 2/6] refactor to handle jruby version discovery errors in ScriptFactory --- .../saumya/mojo/ruby/gems/GemsInstaller.java | 10 +------ .../mojo/ruby/script/ScriptFactory.java | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java index 98ce7a12..2bb50d20 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java @@ -241,7 +241,7 @@ private Script maybeAddArtifact(Script script, final Artifact artifact) .addArg(booleanArg(this.config.isUserInstall(), "user-install")) .addArg(booleanArg(this.config.isVerbose(), "verbose")); - final JRubyVersion version = this.getVersion(); + final JRubyVersion version = this.factory.getVersion(); if (version == null || version.isLanguageLowerThan(2,6)) { script.addArg(booleanArg(this.config.isAddRdoc(), "rdoc")) .addArg(booleanArg(this.config.isAddRI(), "ri")); @@ -258,14 +258,6 @@ private Script maybeAddArtifact(Script script, final Artifact artifact) return script; } - private JRubyVersion getVersion() { - try { - return this.factory.getVersion(); - } catch (Exception e) { - return null; - } - } - private String booleanArg(final boolean flag, final String name) { return "--" + (flag ? "" : "no-") + name; } diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java index 57fabeb4..c79bc314 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/ScriptFactory.java @@ -201,16 +201,22 @@ public void addEnvs(final String environmentVars) { } } - public JRubyVersion getVersion() throws ScriptException, IOException { - final ByteArrayOutputStream os = new ByteArrayOutputStream(); - this.newArguments() - .addArg("-v") - .execute(os); - final String[] versionParts = os.toString(StandardCharsets.UTF_8.toString()) - .split(" "); - final String jrubyVersion = versionParts[1]; - final String languageVersion = extractLanguageVersion(versionParts[2]); - return new JRubyVersion(jrubyVersion, languageVersion); + /** + * Returns JRuby version representation found. + * {@code null} if version format could not be processed. + */ + public JRubyVersion getVersion() { + try { + final ByteArrayOutputStream os = new ByteArrayOutputStream(); + this.newArguments().addArg("-v").execute(os); + final String[] versionParts = os.toString(StandardCharsets.UTF_8.toString()).split(" "); + final String jrubyVersion = versionParts[1]; + final String languageVersion = extractLanguageVersion(versionParts[2]); + return new JRubyVersion(jrubyVersion, languageVersion); + } catch (Exception e) { + logger.warn("Could not identify version: " + e.getMessage()); + return null; + } } private String extractLanguageVersion(String versionPart) { From 23511c68c5f1c498547ede1afbae0ea3e96e0ce5 Mon Sep 17 00:00:00 2001 From: Abel Salgado Romero Date: Thu, 16 Jul 2020 21:12:27 +0200 Subject: [PATCH 3/6] fix JRubyVersion language comparison --- .../saumya/mojo/ruby/script/JRubyVersion.java | 15 +++-- .../mojo/ruby/script/JRubyVersionTest.java | 66 ++++++++++++++----- 2 files changed, 59 insertions(+), 22 deletions(-) diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java index 0f0f8e88..d5e7eb21 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java @@ -21,13 +21,14 @@ public String getLanguage() { public boolean isLanguageLowerThan(int major, int minor) { final String[] parts = getLanguage().split("\\."); - if (major < Integer.parseInt(parts[0])) - return true; - - if (minor < Integer.parseInt(parts[1])) - return true; - - return false; + int majorLanguageVersion = Integer.parseInt(parts[0]); + int minorLanguageVersion = Integer.parseInt(parts[1]); + + if (major == majorLanguageVersion) { + return minorLanguageVersion < minor; + } else { + return majorLanguageVersion < major; + } } } diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java index a097662f..04b12317 100644 --- a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java @@ -7,46 +7,82 @@ public class JRubyVersionTest { @Test - public void should_return_true_when_compared_language_version_is_lower_than_major() { - final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_equal() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - boolean result = version.isLanguageLowerThan(1, 5); + boolean result = version.isLanguageLowerThan(2, 5); - assertThat(result).isTrue(); + assertThat(result).isFalse(); } @Test - public void should_return_true_when_compared_language_version_is_lower_than_minor() { - final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_lower() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); boolean result = version.isLanguageLowerThan(2, 4); + assertThat(result).isFalse(); + } + + @Test + public void should_return_true_when_compared_language_major_is_equal_and_minor_version_is_higher() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(2, 6); + assertThat(result).isTrue(); } @Test - public void should_return_true_when_compared_language_version_is_equal() { - final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + public void should_return_true_when_compared_language_major_is_higher_and_minor_is_equal() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - boolean result = version.isLanguageLowerThan(2, 5); + boolean result = version.isLanguageLowerThan(3, 5); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_true_when_compared_language_major_is_higher_and_minor_is_lower() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(3, 3); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_true_when_compared_language_major_is_higher_and_minor_is_higher() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(3, 6); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_false_when_compared_language_major_is_lower_and_minor_is_equal() { + final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); + + boolean result = version.isLanguageLowerThan(1, 5); assertThat(result).isFalse(); } @Test - public void should_return_false_when_compared_language_version_is_higher_than_major() { - final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + public void should_return_false_when_compared_language_major_is_lower_and_minor_is_lower() { + final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); - boolean result = version.isLanguageLowerThan(3, 5); + boolean result = version.isLanguageLowerThan(1, 2); assertThat(result).isFalse(); } @Test - public void should_return_false_when_compared_language_version_is_higher_than_minor() { - final JRubyVersion version = new JRubyVersion("2.5.7", "2.5.7"); + public void should_return_false_when_compared_language_major_is_lower_and_minor_is_higher() { + final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); - boolean result = version.isLanguageLowerThan(2, 6); + boolean result = version.isLanguageLowerThan(1, 10); assertThat(result).isFalse(); } From b38682c6af1dd8e9d48b98a298328c056b0925c6 Mon Sep 17 00:00:00 2001 From: Abel Salgado Romero Date: Thu, 16 Jul 2020 21:13:30 +0200 Subject: [PATCH 4/6] fix 'file does not exists' typo in tests and RSpecMojo --- bundler-maven-plugin/src/it/bundler-pom/verify.bsh | 2 +- .../src/it/cucumber-summary-report/verify.bsh | 4 ++-- .../src/it/gemfile-to-pom-forced/verify.bsh | 2 +- gem-maven-plugin/src/it/gemfile-to-pom/verify.bsh | 2 +- .../src/it/gemspec-to-pom-forced/verify.bsh | 2 +- gem-maven-plugin/src/it/gemspec-to-pom/verify.bsh | 2 +- gem-maven-plugin/src/it/install-gem-pom/verify.bsh | 2 +- .../install-gem-ruby-9.2.10-compatibility/verify.bsh | 2 +- .../src/it/install-java-gem-pom/verify.bsh | 2 +- .../src/it/install-pom-with-gemspec/verify.bsh | 4 ++-- gem-maven-plugin/src/it/jars-lock/verify.bsh | 6 +++--- .../verify.bsh | 2 +- .../package-gem-artifact-from-gemspec-pom/verify.bsh | 2 +- jruby-maven-plugin/src/it/compile-dir-156/verify.bsh | 2 +- jruby-maven-plugin/src/it/compile-dir/verify.bsh | 2 +- .../src/it/generate-java-and-compile-156/verify.bsh | 2 +- .../src/it/generate-java-and-compile/verify.bsh | 2 +- .../src/it/minispec-with-jar-dependencies/verify.bsh | 4 ++-- .../src/it/minitest-failure-19/verify.bsh | 2 +- .../src/it/minitest-failure/verify.bsh | 2 +- .../src/it/minitest-from-jruby/verify.bsh | 2 +- .../src/it/minitest-pom-210/verify.bsh | 2 +- .../src/it/minitest-pom-508/verify.bsh | 2 +- .../src/it/minitest-somewhere/verify.bsh | 2 +- .../src/it/minitest-summary-report/verify.bsh | 4 ++-- rspec-maven-plugin/src/it/rspec-3.x/verify.bsh | 2 +- .../src/it/rspec-failure-19/verify.bsh | 2 +- rspec-maven-plugin/src/it/rspec-failure/verify.bsh | 2 +- rspec-maven-plugin/src/it/rspec-pom/verify.bsh | 2 +- .../src/it/rspec-summary-report/verify.bsh | 4 ++-- .../src/it/rspec-with-jar-dependencies/verify.bsh | 4 ++-- .../main/java/de/saumya/mojo/rspec/RSpecMojo.java | 2 +- .../src/it/runit-18_19_20-156_161_175/verify.bsh | 12 ++++++------ runit-maven-plugin/src/it/runit-18_19_20/verify.bsh | 6 +++--- .../src/it/runit-failure-19/verify.bsh | 2 +- runit-maven-plugin/src/it/runit-failure/verify.bsh | 2 +- runit-maven-plugin/src/it/runit-pom/verify.bsh | 2 +- runit-maven-plugin/src/it/runit-somewhere/verify.bsh | 2 +- .../src/it/runit-summary-report/verify.bsh | 4 ++-- runit-maven-plugin/src/it/runit-with-env/verify.bsh | 4 ++-- .../src/it/runit-with-jar-dependencies/verify.bsh | 4 ++-- 41 files changed, 59 insertions(+), 59 deletions(-) diff --git a/bundler-maven-plugin/src/it/bundler-pom/verify.bsh b/bundler-maven-plugin/src/it/bundler-pom/verify.bsh index e389778e..7f540182 100644 --- a/bundler-maven-plugin/src/it/bundler-pom/verify.bsh +++ b/bundler-maven-plugin/src/it/bundler-pom/verify.bsh @@ -5,5 +5,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "Gemfile.lock" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/cucumber-maven-plugin/src/it/cucumber-summary-report/verify.bsh b/cucumber-maven-plugin/src/it/cucumber-summary-report/verify.bsh index 7a329619..4f2d0685 100644 --- a/cucumber-maven-plugin/src/it/cucumber-summary-report/verify.bsh +++ b/cucumber-maven-plugin/src/it/cucumber-summary-report/verify.bsh @@ -11,11 +11,11 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-simplest-1.6.5--1.8.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/summary.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/gem-maven-plugin/src/it/gemfile-to-pom-forced/verify.bsh b/gem-maven-plugin/src/it/gemfile-to-pom-forced/verify.bsh index b99697bc..4823c00d 100644 --- a/gem-maven-plugin/src/it/gemfile-to-pom-forced/verify.bsh +++ b/gem-maven-plugin/src/it/gemfile-to-pom-forced/verify.bsh @@ -5,7 +5,7 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "pom.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } if ( f.lastModified() < new File( basedir, "timestamp" ).lastModified()) { diff --git a/gem-maven-plugin/src/it/gemfile-to-pom/verify.bsh b/gem-maven-plugin/src/it/gemfile-to-pom/verify.bsh index a3bb9d99..e1a28f8e 100644 --- a/gem-maven-plugin/src/it/gemfile-to-pom/verify.bsh +++ b/gem-maven-plugin/src/it/gemfile-to-pom/verify.bsh @@ -5,5 +5,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "pom.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } \ No newline at end of file diff --git a/gem-maven-plugin/src/it/gemspec-to-pom-forced/verify.bsh b/gem-maven-plugin/src/it/gemspec-to-pom-forced/verify.bsh index b99697bc..4823c00d 100644 --- a/gem-maven-plugin/src/it/gemspec-to-pom-forced/verify.bsh +++ b/gem-maven-plugin/src/it/gemspec-to-pom-forced/verify.bsh @@ -5,7 +5,7 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "pom.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } if ( f.lastModified() < new File( basedir, "timestamp" ).lastModified()) { diff --git a/gem-maven-plugin/src/it/gemspec-to-pom/verify.bsh b/gem-maven-plugin/src/it/gemspec-to-pom/verify.bsh index a3bb9d99..e1a28f8e 100644 --- a/gem-maven-plugin/src/it/gemspec-to-pom/verify.bsh +++ b/gem-maven-plugin/src/it/gemspec-to-pom/verify.bsh @@ -5,5 +5,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "pom.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } \ No newline at end of file diff --git a/gem-maven-plugin/src/it/install-gem-pom/verify.bsh b/gem-maven-plugin/src/it/install-gem-pom/verify.bsh index dca52044..07d937c8 100644 --- a/gem-maven-plugin/src/it/install-gem-pom/verify.bsh +++ b/gem-maven-plugin/src/it/install-gem-pom/verify.bsh @@ -5,5 +5,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "target/pom_first-0.0.0.gem" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } \ No newline at end of file diff --git a/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh b/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh index 7b2d7c00..81001ef8 100644 --- a/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh +++ b/gem-maven-plugin/src/it/install-gem-ruby-9.2.10-compatibility/verify.bsh @@ -4,5 +4,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "target/rubygems/gems/yard-0.9.25" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } \ No newline at end of file diff --git a/gem-maven-plugin/src/it/install-java-gem-pom/verify.bsh b/gem-maven-plugin/src/it/install-java-gem-pom/verify.bsh index bba0a380..9f070a5c 100644 --- a/gem-maven-plugin/src/it/install-java-gem-pom/verify.bsh +++ b/gem-maven-plugin/src/it/install-java-gem-pom/verify.bsh @@ -5,5 +5,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "target/com.example.package-java-gem-0.0.0-java.gem" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/gem-maven-plugin/src/it/install-pom-with-gemspec/verify.bsh b/gem-maven-plugin/src/it/install-pom-with-gemspec/verify.bsh index 3994195f..71ce441a 100644 --- a/gem-maven-plugin/src/it/install-pom-with-gemspec/verify.bsh +++ b/gem-maven-plugin/src/it/install-pom-with-gemspec/verify.bsh @@ -5,10 +5,10 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "target/first.gem" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } f = new File( basedir, "pom.pom_first.gemspec.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/gem-maven-plugin/src/it/jars-lock/verify.bsh b/gem-maven-plugin/src/it/jars-lock/verify.bsh index bf3e1365..06b96d10 100644 --- a/gem-maven-plugin/src/it/jars-lock/verify.bsh +++ b/gem-maven-plugin/src/it/jars-lock/verify.bsh @@ -48,17 +48,17 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/jars/org/slf4j/log4j-over-slf4j/1.7.10/log4j-over-slf4j-1.7.10.jar" ); if ( !file.exists() ) { - throw new RuntimeException( "expected file does not exists '" + file + "'" ); + throw new RuntimeException( "expected file does not exist '" + file + "'" ); } file = new File( basedir, "target/jars/org/apache/kafka/kafka_2.10/0.8.1.1/kafka_2.10-0.8.1.1.jar" ); if ( !file.exists() ) { - throw new RuntimeException( "expected file does not exists '" + file + "'" ); + throw new RuntimeException( "expected file does not exist '" + file + "'" ); } file = new File( basedir, "target/jars/org/bouncycastle/bcprov-jdk15on/1.49/bcprov-jdk15on-1.49.jar" ); if ( !file.exists() ) { - throw new RuntimeException( "expected file does not exists '" + file + "'" ); + throw new RuntimeException( "expected file does not exist '" + file + "'" ); } diff --git a/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-no-pom/verify.bsh b/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-no-pom/verify.bsh index 7cdcf77f..0a36045b 100644 --- a/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-no-pom/verify.bsh +++ b/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-no-pom/verify.bsh @@ -5,5 +5,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "gem_first-0.0.0.gem" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } \ No newline at end of file diff --git a/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-pom/verify.bsh b/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-pom/verify.bsh index 74131b52..f2177ac1 100644 --- a/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-pom/verify.bsh +++ b/gem-maven-plugin/src/it/package-gem-artifact-from-gemspec-pom/verify.bsh @@ -5,5 +5,5 @@ import org.codehaus.plexus.util.FileUtils; File f = new File( basedir, "target/gem_first-0.0.0.gem" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } \ No newline at end of file diff --git a/jruby-maven-plugin/src/it/compile-dir-156/verify.bsh b/jruby-maven-plugin/src/it/compile-dir-156/verify.bsh index 07faa8a5..3a90e91a 100644 --- a/jruby-maven-plugin/src/it/compile-dir-156/verify.bsh +++ b/jruby-maven-plugin/src/it/compile-dir-156/verify.bsh @@ -3,6 +3,6 @@ import java.io.*; File target = new File(basedir, "target/classes"); for(String f: new String[] { "file.class", "more/hello.class" }){ if( !new File(target, f).exists() ){ - throw new RuntimeException("file does not exists: target/classes" + f); + throw new RuntimeException("file does not exist: target/classes" + f); } } \ No newline at end of file diff --git a/jruby-maven-plugin/src/it/compile-dir/verify.bsh b/jruby-maven-plugin/src/it/compile-dir/verify.bsh index 07faa8a5..3a90e91a 100644 --- a/jruby-maven-plugin/src/it/compile-dir/verify.bsh +++ b/jruby-maven-plugin/src/it/compile-dir/verify.bsh @@ -3,6 +3,6 @@ import java.io.*; File target = new File(basedir, "target/classes"); for(String f: new String[] { "file.class", "more/hello.class" }){ if( !new File(target, f).exists() ){ - throw new RuntimeException("file does not exists: target/classes" + f); + throw new RuntimeException("file does not exist: target/classes" + f); } } \ No newline at end of file diff --git a/jruby-maven-plugin/src/it/generate-java-and-compile-156/verify.bsh b/jruby-maven-plugin/src/it/generate-java-and-compile-156/verify.bsh index f5647ec0..8368a159 100644 --- a/jruby-maven-plugin/src/it/generate-java-and-compile-156/verify.bsh +++ b/jruby-maven-plugin/src/it/generate-java-and-compile-156/verify.bsh @@ -3,6 +3,6 @@ import java.io.*; File target = new File(basedir, "target/classes"); for(String f: new String[] { "com/example/Reply.class", "com/otherexample/MyReply.class" }){ if( !new File(target, f).exists() ){ - throw new RuntimeException("file does not exists: target/classes/" + f); + throw new RuntimeException("file does not exist: target/classes/" + f); } } \ No newline at end of file diff --git a/jruby-maven-plugin/src/it/generate-java-and-compile/verify.bsh b/jruby-maven-plugin/src/it/generate-java-and-compile/verify.bsh index f5647ec0..8368a159 100644 --- a/jruby-maven-plugin/src/it/generate-java-and-compile/verify.bsh +++ b/jruby-maven-plugin/src/it/generate-java-and-compile/verify.bsh @@ -3,6 +3,6 @@ import java.io.*; File target = new File(basedir, "target/classes"); for(String f: new String[] { "com/example/Reply.class", "com/otherexample/MyReply.class" }){ if( !new File(target, f).exists() ){ - throw new RuntimeException("file does not exists: target/classes/" + f); + throw new RuntimeException("file does not exist: target/classes/" + f); } } \ No newline at end of file diff --git a/minitest-maven-plugin/src/it/minispec-with-jar-dependencies/verify.bsh b/minitest-maven-plugin/src/it/minispec-with-jar-dependencies/verify.bsh index 5750d8ec..119c84f6 100644 --- a/minitest-maven-plugin/src/it/minispec-with-jar-dependencies/verify.bsh +++ b/minitest-maven-plugin/src/it/minispec-with-jar-dependencies/verify.bsh @@ -12,11 +12,11 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-minispec-9.0.1.0.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-minispec-1.7.22--1.9.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/minitest-maven-plugin/src/it/minitest-failure-19/verify.bsh b/minitest-maven-plugin/src/it/minitest-failure-19/verify.bsh index c3832d63..279f3996 100644 --- a/minitest-maven-plugin/src/it/minitest-failure-19/verify.bsh +++ b/minitest-maven-plugin/src/it/minitest-failure-19/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-minitest.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/minitest-maven-plugin/src/it/minitest-failure/verify.bsh b/minitest-maven-plugin/src/it/minitest-failure/verify.bsh index c3832d63..279f3996 100644 --- a/minitest-maven-plugin/src/it/minitest-failure/verify.bsh +++ b/minitest-maven-plugin/src/it/minitest-failure/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-minitest.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/minitest-maven-plugin/src/it/minitest-from-jruby/verify.bsh b/minitest-maven-plugin/src/it/minitest-from-jruby/verify.bsh index 64b45abd..9ff78638 100644 --- a/minitest-maven-plugin/src/it/minitest-from-jruby/verify.bsh +++ b/minitest-maven-plugin/src/it/minitest-from-jruby/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-minitest.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/minitest-maven-plugin/src/it/minitest-pom-210/verify.bsh b/minitest-maven-plugin/src/it/minitest-pom-210/verify.bsh index 64b45abd..9ff78638 100644 --- a/minitest-maven-plugin/src/it/minitest-pom-210/verify.bsh +++ b/minitest-maven-plugin/src/it/minitest-pom-210/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-minitest.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/minitest-maven-plugin/src/it/minitest-pom-508/verify.bsh b/minitest-maven-plugin/src/it/minitest-pom-508/verify.bsh index 64b45abd..9ff78638 100644 --- a/minitest-maven-plugin/src/it/minitest-pom-508/verify.bsh +++ b/minitest-maven-plugin/src/it/minitest-pom-508/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-minitest.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/minitest-maven-plugin/src/it/minitest-somewhere/verify.bsh b/minitest-maven-plugin/src/it/minitest-somewhere/verify.bsh index 64b45abd..9ff78638 100644 --- a/minitest-maven-plugin/src/it/minitest-somewhere/verify.bsh +++ b/minitest-maven-plugin/src/it/minitest-somewhere/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-minitest.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/minitest-maven-plugin/src/it/minitest-summary-report/verify.bsh b/minitest-maven-plugin/src/it/minitest-summary-report/verify.bsh index 06710949..f3d75f12 100644 --- a/minitest-maven-plugin/src/it/minitest-summary-report/verify.bsh +++ b/minitest-maven-plugin/src/it/minitest-summary-report/verify.bsh @@ -11,11 +11,11 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-minitest.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/summary.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/rspec-maven-plugin/src/it/rspec-3.x/verify.bsh b/rspec-maven-plugin/src/it/rspec-3.x/verify.bsh index cd4a7521..f9b0a812 100644 --- a/rspec-maven-plugin/src/it/rspec-3.x/verify.bsh +++ b/rspec-maven-plugin/src/it/rspec-3.x/verify.bsh @@ -12,5 +12,5 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-rspec.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/rspec-maven-plugin/src/it/rspec-failure-19/verify.bsh b/rspec-maven-plugin/src/it/rspec-failure-19/verify.bsh index f9ab24c3..a9701560 100644 --- a/rspec-maven-plugin/src/it/rspec-failure-19/verify.bsh +++ b/rspec-maven-plugin/src/it/rspec-failure-19/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-rspec.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/rspec-maven-plugin/src/it/rspec-failure/verify.bsh b/rspec-maven-plugin/src/it/rspec-failure/verify.bsh index f9ab24c3..a9701560 100644 --- a/rspec-maven-plugin/src/it/rspec-failure/verify.bsh +++ b/rspec-maven-plugin/src/it/rspec-failure/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-rspec.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/rspec-maven-plugin/src/it/rspec-pom/verify.bsh b/rspec-maven-plugin/src/it/rspec-pom/verify.bsh index df226834..db5c7e28 100644 --- a/rspec-maven-plugin/src/it/rspec-pom/verify.bsh +++ b/rspec-maven-plugin/src/it/rspec-pom/verify.bsh @@ -12,5 +12,5 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-rspec.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/rspec-maven-plugin/src/it/rspec-summary-report/verify.bsh b/rspec-maven-plugin/src/it/rspec-summary-report/verify.bsh index cbe319ab..57d5bc3a 100644 --- a/rspec-maven-plugin/src/it/rspec-summary-report/verify.bsh +++ b/rspec-maven-plugin/src/it/rspec-summary-report/verify.bsh @@ -12,10 +12,10 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-rspec.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } f = new File( new File( basedir, "target" ), "TEST-Ruby.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/rspec-maven-plugin/src/it/rspec-with-jar-dependencies/verify.bsh b/rspec-maven-plugin/src/it/rspec-with-jar-dependencies/verify.bsh index 0dda1b71..22e1ca7d 100644 --- a/rspec-maven-plugin/src/it/rspec-with-jar-dependencies/verify.bsh +++ b/rspec-maven-plugin/src/it/rspec-with-jar-dependencies/verify.bsh @@ -12,11 +12,11 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-rspec-9.0.1.0.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-rspec-1.7.22--1.9.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } diff --git a/rspec-maven-plugin/src/main/java/de/saumya/mojo/rspec/RSpecMojo.java b/rspec-maven-plugin/src/main/java/de/saumya/mojo/rspec/RSpecMojo.java index b475dc3f..a15e9f63 100644 --- a/rspec-maven-plugin/src/main/java/de/saumya/mojo/rspec/RSpecMojo.java +++ b/rspec-maven-plugin/src/main/java/de/saumya/mojo/rspec/RSpecMojo.java @@ -70,7 +70,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { new File( launchDirectory(), specSourceDirectory ); if ( !this.specsDir.isDirectory() ) { - getLog().info("given " + specSourceDirectory + " does not exists - skipping RSpec test'" ); + getLog().info("given " + specSourceDirectory + " does not exist - skipping RSpec test'" ); return; } outputfile = new File( this.project.getBuild().getDirectory().replace( "${project.basedir}/", ""), diff --git a/runit-maven-plugin/src/it/runit-18_19_20-156_161_175/verify.bsh b/runit-maven-plugin/src/it/runit-18_19_20-156_161_175/verify.bsh index 7a42d1b9..74338bb8 100644 --- a/runit-maven-plugin/src/it/runit-18_19_20-156_161_175/verify.bsh +++ b/runit-maven-plugin/src/it/runit-18_19_20-156_161_175/verify.bsh @@ -40,35 +40,35 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit-1.5.6--1.8.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.6.1--1.8.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.6.1--1.9.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.5--1.8.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.5--1.9.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.5--2.0.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-18_19_20/verify.bsh b/runit-maven-plugin/src/it/runit-18_19_20/verify.bsh index 49af4ad9..c738db14 100644 --- a/runit-maven-plugin/src/it/runit-18_19_20/verify.bsh +++ b/runit-maven-plugin/src/it/runit-18_19_20/verify.bsh @@ -23,17 +23,17 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.5--1.8.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.5--1.9.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.5--2.0.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-failure-19/verify.bsh b/runit-maven-plugin/src/it/runit-failure-19/verify.bsh index 0108b7e0..142872a0 100644 --- a/runit-maven-plugin/src/it/runit-failure-19/verify.bsh +++ b/runit-maven-plugin/src/it/runit-failure-19/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-failure/verify.bsh b/runit-maven-plugin/src/it/runit-failure/verify.bsh index 0108b7e0..142872a0 100644 --- a/runit-maven-plugin/src/it/runit-failure/verify.bsh +++ b/runit-maven-plugin/src/it/runit-failure/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-pom/verify.bsh b/runit-maven-plugin/src/it/runit-pom/verify.bsh index c6849d3e..f8eae2a6 100644 --- a/runit-maven-plugin/src/it/runit-pom/verify.bsh +++ b/runit-maven-plugin/src/it/runit-pom/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-somewhere/verify.bsh b/runit-maven-plugin/src/it/runit-somewhere/verify.bsh index c6849d3e..f8eae2a6 100644 --- a/runit-maven-plugin/src/it/runit-somewhere/verify.bsh +++ b/runit-maven-plugin/src/it/runit-somewhere/verify.bsh @@ -11,5 +11,5 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-summary-report/verify.bsh b/runit-maven-plugin/src/it/runit-summary-report/verify.bsh index 008b0490..86be52ac 100644 --- a/runit-maven-plugin/src/it/runit-summary-report/verify.bsh +++ b/runit-maven-plugin/src/it/runit-summary-report/verify.bsh @@ -11,11 +11,11 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/summary.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-with-env/verify.bsh b/runit-maven-plugin/src/it/runit-with-env/verify.bsh index b5d57924..513aa746 100644 --- a/runit-maven-plugin/src/it/runit-with-env/verify.bsh +++ b/runit-maven-plugin/src/it/runit-with-env/verify.bsh @@ -11,10 +11,10 @@ if ( !log.contains( expected ) ) File file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.8--1.9.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } file = new File( basedir, "target/surefire-reports/TEST-runit-1.7.13--1.9.xml"); if ( !file.exists() ) { - throw new RuntimeException( "file does not exists: '" + file.getAbsolutePath() + "'" ); + throw new RuntimeException( "file does not exist: '" + file.getAbsolutePath() + "'" ); } diff --git a/runit-maven-plugin/src/it/runit-with-jar-dependencies/verify.bsh b/runit-maven-plugin/src/it/runit-with-jar-dependencies/verify.bsh index 13865ed7..76a5e9b7 100644 --- a/runit-maven-plugin/src/it/runit-with-jar-dependencies/verify.bsh +++ b/runit-maven-plugin/src/it/runit-with-jar-dependencies/verify.bsh @@ -18,11 +18,11 @@ if ( !log.contains( expected ) ) File f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-runit-9.0.1.0.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } f = new File( new File( new File( basedir, "target" ), "surefire-reports" ), "TEST-runit-1.7.22--1.9.xml" ); if ( !f.exists() ) { - throw new RuntimeException( "file does not exists: " + f ); + throw new RuntimeException( "file does not exist: " + f ); } From 2f20e771b17f4141528c97ef887dbfbeb092b902 Mon Sep 17 00:00:00 2001 From: Abel Salgado Romero Date: Thu, 16 Jul 2020 23:45:04 +0200 Subject: [PATCH 5/6] replace langauge version comparision by jruby version due to limitations in version reporting --- .../saumya/mojo/ruby/gems/GemsInstaller.java | 2 +- .../saumya/mojo/ruby/script/JRubyVersion.java | 33 ++++++- .../script/JRubyLanguageComparisonTest.java | 98 +++++++++++++++++++ .../script/JRubyVersionComparisonTest.java | 56 +++++++++++ .../mojo/ruby/script/JRubyVersionTest.java | 96 ++++++------------ 5 files changed, 215 insertions(+), 70 deletions(-) create mode 100644 ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyLanguageComparisonTest.java create mode 100644 ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionComparisonTest.java diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java index 2bb50d20..29864287 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java @@ -242,7 +242,7 @@ private Script maybeAddArtifact(Script script, final Artifact artifact) .addArg(booleanArg(this.config.isVerbose(), "verbose")); final JRubyVersion version = this.factory.getVersion(); - if (version == null || version.isLanguageLowerThan(2,6)) { + if (version == null || version.isVersionLowerThan(9, 2, 10)) { script.addArg(booleanArg(this.config.isAddRdoc(), "rdoc")) .addArg(booleanArg(this.config.isAddRI(), "ri")); } else { diff --git a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java index d5e7eb21..f09efe6f 100644 --- a/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java +++ b/ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java @@ -1,5 +1,8 @@ package de.saumya.mojo.ruby.script; +import java.util.ArrayList; +import java.util.List; + public class JRubyVersion { private final String version; @@ -18,11 +21,35 @@ public String getLanguage() { return language; } + public boolean isVersionLowerThan(Integer... version) { + final List parts = extractVersionComponents(this.version); + + for (int i = 0; i < version.length && i < parts.size(); i++) { + if (parts.get(i) == version[i]) + continue; + return parts.get(i) < version[i]; + } + return false; + } + + private List extractVersionComponents(String versionString) { + if (versionString == null) + throw new NumberFormatException(); + + final String[] parts = versionString.split("\\."); + + final List versionComponents = new ArrayList(); + for (String part : parts) { + versionComponents.add(Integer.parseInt(part)); + } + return versionComponents; + } + public boolean isLanguageLowerThan(int major, int minor) { - final String[] parts = getLanguage().split("\\."); + final List parts = extractVersionComponents(language); - int majorLanguageVersion = Integer.parseInt(parts[0]); - int minorLanguageVersion = Integer.parseInt(parts[1]); + int majorLanguageVersion = parts.get(0); + int minorLanguageVersion = parts.get(1); if (major == majorLanguageVersion) { return minorLanguageVersion < minor; diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyLanguageComparisonTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyLanguageComparisonTest.java new file mode 100644 index 00000000..5ad7ab8a --- /dev/null +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyLanguageComparisonTest.java @@ -0,0 +1,98 @@ +package de.saumya.mojo.ruby.script; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class JRubyLanguageComparisonTest { + + @Test + public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_equal() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(2, 5); + + assertThat(result).isFalse(); + } + + @Test + public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_lower() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(2, 4); + + assertThat(result).isFalse(); + } + + @Test + public void should_return_true_when_compared_language_major_is_equal_and_minor_version_is_higher() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(2, 6); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_true_when_compared_language_major_is_higher_and_minor_is_equal() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(3, 5); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_true_when_compared_language_major_is_higher_and_minor_is_lower() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(3, 3); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_true_when_compared_language_major_is_higher_and_minor_is_higher() { + final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); + + boolean result = version.isLanguageLowerThan(3, 6); + + assertThat(result).isTrue(); + } + + @Test + public void should_return_false_when_compared_language_major_is_lower_and_minor_is_equal() { + final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); + + boolean result = version.isLanguageLowerThan(1, 5); + + assertThat(result).isFalse(); + } + + @Test + public void should_return_false_when_compared_language_major_is_lower_and_minor_is_lower() { + final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); + + boolean result = version.isLanguageLowerThan(1, 2); + + assertThat(result).isFalse(); + } + + @Test + public void should_return_false_when_compared_language_major_is_lower_and_minor_is_higher() { + final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); + + boolean result = version.isLanguageLowerThan(1, 10); + + assertThat(result).isFalse(); + } + + @Test + public void should_return_false_when_compared_version_major_is_lower_and_minor_is_higher() { + final JRubyVersion version = new JRubyVersion("9.2.10.1", "3.5.7"); + + boolean result = version.isVersionLowerThan(7, 10); + + assertThat(result).isFalse(); + } +} diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionComparisonTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionComparisonTest.java new file mode 100644 index 00000000..af73f3ac --- /dev/null +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionComparisonTest.java @@ -0,0 +1,56 @@ +package de.saumya.mojo.ruby.script; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.Collection; + +import static java.lang.Boolean.FALSE; +import static java.lang.Boolean.TRUE; +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(Parameterized.class) +public class JRubyVersionComparisonTest { + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[][]{ + {"9.2.10.1", new Integer[]{9}, FALSE, "compared major is equal"}, + {"9.2.10.1", new Integer[]{9, 2}, FALSE, "compared major is equal and minor is lower"}, + {"9.2.10.1", new Integer[]{9, 3}, TRUE, "compared major is equal and minor is higher"}, + + {"9.2.10.1", new Integer[]{10}, TRUE, "compared major is greater and minor is equal"}, + {"9.2.10.1", new Integer[]{11, 2}, TRUE, "compared major is equal and minor is lower"}, + {"9.2.10.1", new Integer[]{12, 3, 14}, TRUE, "compared major is equal and minor is higher"}, + + {"9.2.10.1", new Integer[]{7}, FALSE, "compared major is lower and minor is equal"}, + {"9.2.10.1", new Integer[]{6, 2}, FALSE, "compared major is lower and minor is lower"}, + {"9.2.10.1", new Integer[]{5, 3, 14}, FALSE, "compared major is lower and minor is higher"}, + + {"9.1", new Integer[]{9, 1, 10}, FALSE, "version has more components"} + }); + } + + private final String jrubyVersion; + private final Integer[] versionToCompare; + private final Boolean expectedValue; + + public JRubyVersionComparisonTest(String jrubyVersion, Integer[] versionToCompare, Boolean expectedValue, String description) { + this.jrubyVersion = jrubyVersion; + this.versionToCompare = versionToCompare; + this.expectedValue = expectedValue; + } + + + @Test + public void should_compared_jruby_version() { + final JRubyVersion version = new JRubyVersion(jrubyVersion, "3.5.7"); + + boolean result = version.isVersionLowerThan(versionToCompare); + + assertThat(result).isEqualTo(expectedValue); + } + +} diff --git a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java index 04b12317..62351ecc 100644 --- a/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java +++ b/ruby-tools/src/test/java/de/saumya/mojo/ruby/script/JRubyVersionTest.java @@ -1,89 +1,53 @@ package de.saumya.mojo.ruby.script; +import org.assertj.core.api.ThrowableAssert; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; -public class JRubyVersionTest { - - @Test - public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_equal() { - final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - - boolean result = version.isLanguageLowerThan(2, 5); - - assertThat(result).isFalse(); - } - - @Test - public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_lower() { - final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - - boolean result = version.isLanguageLowerThan(2, 4); - - assertThat(result).isFalse(); - } - - @Test - public void should_return_true_when_compared_language_major_is_equal_and_minor_version_is_higher() { - final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - - boolean result = version.isLanguageLowerThan(2, 6); - - assertThat(result).isTrue(); - } - @Test - public void should_return_true_when_compared_language_major_is_higher_and_minor_is_equal() { - final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - - boolean result = version.isLanguageLowerThan(3, 5); - - assertThat(result).isTrue(); - } - - @Test - public void should_return_true_when_compared_language_major_is_higher_and_minor_is_lower() { - final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - - boolean result = version.isLanguageLowerThan(3, 3); - - assertThat(result).isTrue(); - } - - @Test - public void should_return_true_when_compared_language_major_is_higher_and_minor_is_higher() { - final JRubyVersion version = new JRubyVersion("jruby", "2.5.7"); - - boolean result = version.isLanguageLowerThan(3, 6); - - assertThat(result).isTrue(); - } +public class JRubyVersionTest { @Test - public void should_return_false_when_compared_language_major_is_lower_and_minor_is_equal() { - final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); + public void should_fail_with_exceptions_when_jruby_version_is_null() { + final JRubyVersion version = new JRubyVersion(null, "3.5.7"); - boolean result = version.isLanguageLowerThan(1, 5); + Throwable throwable = catchThrowable(new ThrowableAssert.ThrowingCallable() { + public void call() { + version.isVersionLowerThan(1, 2, 3); + } + }); - assertThat(result).isFalse(); + assertThat(throwable) + .isInstanceOf(NumberFormatException.class); } @Test - public void should_return_false_when_compared_language_major_is_lower_and_minor_is_lower() { - final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); + public void should_fail_with_exceptions_when_jruby_version_is_empty() { + final JRubyVersion version = new JRubyVersion("", "3.5.7"); - boolean result = version.isLanguageLowerThan(1, 2); + Throwable throwable = catchThrowable(new ThrowableAssert.ThrowingCallable() { + public void call() { + version.isVersionLowerThan(1, 2, 3); + } + }); - assertThat(result).isFalse(); + assertThat(throwable) + .isInstanceOf(NumberFormatException.class); } @Test - public void should_return_false_when_compared_language_major_is_lower_and_minor_is_higher() { - final JRubyVersion version = new JRubyVersion("jruby", "3.5.7"); + public void should_fail_with_exceptions_when_jruby_version_contains_text() { + final JRubyVersion version = new JRubyVersion("not.a.number", "3.5.7"); - boolean result = version.isLanguageLowerThan(1, 10); + Throwable throwable = catchThrowable(new ThrowableAssert.ThrowingCallable() { + public void call() { + version.isVersionLowerThan(1, 2, 3); + } + }); - assertThat(result).isFalse(); + assertThat(throwable) + .isInstanceOf(NumberFormatException.class); } } From a9194eb4c1e7a5fd3dc2ba588794f847b4cee555 Mon Sep 17 00:00:00 2001 From: Abel Salgado Romero Date: Fri, 17 Jul 2020 00:53:45 +0200 Subject: [PATCH 6/6] fix IT test execute-compass-with-gems-from-plugin --- .../verify.bsh | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/gem-maven-plugin/src/it/execute-compass-with-gems-from-plugin/verify.bsh b/gem-maven-plugin/src/it/execute-compass-with-gems-from-plugin/verify.bsh index fe7eeb98..6469bd18 100644 --- a/gem-maven-plugin/src/it/execute-compass-with-gems-from-plugin/verify.bsh +++ b/gem-maven-plugin/src/it/execute-compass-with-gems-from-plugin/verify.bsh @@ -1,20 +1,18 @@ import java.io.*; +import java.util.*; import org.codehaus.plexus.util.FileUtils; String log = FileUtils.fileRead( new File( basedir, "build.log" ) ); -String expected = "Successfully installed compass-"; -if ( !log.contains( expected ) ) -{ - throw new RuntimeException( "log file does not contain '" + expected + "'" ); -} -expected = "Successfully installed sass-"; -if ( !log.contains( expected ) ) -{ - throw new RuntimeException( "log file does not contain '" + expected + "'" ); -} -expected = "Individual stylesheets must be in the sass directory."; -if ( !log.contains( expected ) ) + +String installMessage = "Successfully installed "; +String[] expectedGems = new String[] { "compass-", "sass-", "rb-inotify-" }; + +for ( String expectedGem: expectedGems ) { - throw new RuntimeException( "log file does not contain '" + expected + "'" ); + String expected = installMessage + expectedGem; + if ( !log.contains( expected ) ) + { + throw new RuntimeException( "log file does not contain '" + expected + "'" ); + } }