From c98db644bda014caf6143d701204d0e6eea3e279 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 10:26:29 -0500 Subject: [PATCH] Reworking main method argument parsing. Updated gradle build file. --- lib/build.gradle.kts | 48 +++++++++++------ .../java/com/uwyn/urlencoder/UrlEncoder.java | 52 ++++++++++--------- .../com/uwyn/urlencoder/UrlEncoderTest.java | 26 +++++----- 3 files changed, 72 insertions(+), 54 deletions(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 89dae47..1afe499 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -1,4 +1,8 @@ +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.api.tasks.testing.logging.TestLogEvent + plugins { + application `java-library` `maven-publish` signing @@ -9,6 +13,9 @@ plugins { group = "com.uwyn" version = "1.0.1-SNAPSHOT" +val mavenName = "UrlEncoder" +val javaMainClass = "$group.${rootProject.name}.$mavenName" + base { archivesName.set(rootProject.name) } @@ -16,21 +23,12 @@ base { java { withJavadocJar() withSourcesJar() - toolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } -tasks.jar { - manifest { - attributes["Main-Class"] = "com.uwyn.urlencoder.UrlEncoder" - } -} - -tasks.jacocoTestReport { - reports { - xml.required.set(true) - } +application { + mainClass.set(javaMainClass) } sonarqube { @@ -50,8 +48,26 @@ dependencies { testImplementation("org.junit.jupiter:junit-jupiter:5.9.0") } -tasks.named("test") { - useJUnitPlatform() +tasks { + jar { + manifest { + attributes["Main-Class"] = javaMainClass + } + } + + withType { + useJUnitPlatform() + testLogging { + exceptionFormat = TestExceptionFormat.FULL + events = setOf(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) + } + } + + jacocoTestReport { + reports { + xml.required.set(true) + } + } } publishing { @@ -60,7 +76,7 @@ publishing { artifactId = rootProject.name from(components["java"]) pom { - name.set("URLEncoder") + name.set(mavenName) description.set("A simple library to encode/decode URL parameters") url.set("https://github.com/gbevin/urlencoder") licenses { diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 497d58a..52b880a 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -5,7 +5,7 @@ package com.uwyn.urlencoder; import java.nio.charset.StandardCharsets; -import java.util.BitSet; +import java.util.*; /** * URL encoding and decoding. @@ -229,46 +229,48 @@ public final class UrlEncoder { } } - static MainResult handleMain(String[] arguments) { - var valid_arguments = true; - if (arguments.length < 1 || - arguments.length > 2) { - valid_arguments = false; - } else if (!arguments[0].startsWith("-")) { - if (arguments.length > 1) { - valid_arguments = false; - } - } else { - if (!arguments[0].equals("-e") && - !arguments[0].equals("-d")) { - valid_arguments = false; + static MainResult processMain(String[] arguments) { + var valid_arguments = false; + var perform_decode = false; + var args = new ArrayList<>(List.of(arguments)); + if (!args.isEmpty() && args.get(0).startsWith("-")) { + var option = args.remove(0); + if (option.equals("-d")) { + perform_decode = true; + valid_arguments = true; + } else if (option.equals("-e")) { + valid_arguments = true; + } else { + args.clear(); } } + var text = ""; + if (args.size() == 1) { + text = args.remove(0); + valid_arguments = true; + } + if (!valid_arguments) { - return new MainResult("Usage : java " + UrlEncoder.class.getName() + " [-ed] text" + System.lineSeparator() + + return new MainResult("Usage : java -jar urlencoder-*.jar [-ed] text" + System.lineSeparator() + "Encode and decode URL parameters." + System.lineSeparator() + " -e encode (default)" + System.lineSeparator() + " -d decode", 1); } - - if (1 == arguments.length) { - return new MainResult(UrlEncoder.encode(arguments[0]), 0); - } else if (arguments[0].equals("-e")) { - return new MainResult(UrlEncoder.encode(arguments[1]), 0); + if (perform_decode) { + return new MainResult(UrlEncoder.decode(text), 0); + } else { + return new MainResult(UrlEncoder.encode(text), 0); } - - return new MainResult(UrlEncoder.decode(arguments[1]), 0); } public static void main(String[] arguments) { - var result = handleMain(arguments); + var result = processMain(arguments); if (result.status == 0) { System.out.println(result.output); - System.exit(0); } else { System.err.println(result.output); - System.exit(result.status); } + System.exit(result.status); } } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index b587598..085b8a3 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -47,43 +47,43 @@ class UrlEncoderTest { @Test void testMainNoArgs() { - var result = UrlEncoder.handleMain(new String[0]); + var result = UrlEncoder.processMain(new String[0]); assertEquals(1, result.status); - assertTrue(result.output.contains(UrlEncoder.class.getName())); + assertTrue(result.output.contains("Usage :")); } @Test void testMainTooManyArgs() { - var result = UrlEncoder.handleMain(new String[] {"-x", "-g", "f"}); + var result = UrlEncoder.processMain(new String[] {"-x", "-g", "f"}); assertEquals(1, result.status); - assertTrue(result.output.contains(UrlEncoder.class.getName())); + assertTrue(result.output.contains("Usage :")); } @Test void testMainWrongArgs1() { - var result = UrlEncoder.handleMain(new String[] {"-p"}); + var result = UrlEncoder.processMain(new String[] {"-p"}); assertEquals(1, result.status); - assertTrue(result.output.contains(UrlEncoder.class.getName())); + assertTrue(result.output.contains("Usage :")); } @Test void testMainWrongArgs2() { - var result = UrlEncoder.handleMain(new String[] {"-x", "txt"}); + var result = UrlEncoder.processMain(new String[] {"-x", "txt"}); assertEquals(1, result.status); - assertTrue(result.output.contains(UrlEncoder.class.getName())); + assertTrue(result.output.contains("Usage :")); } @Test void testMainWrongArgs3() { - var result = UrlEncoder.handleMain(new String[] {"stuff", "txt"}); + var result = UrlEncoder.processMain(new String[] {"stuff", "txt"}); assertEquals(1, result.status); - assertTrue(result.output.contains(UrlEncoder.class.getName())); + assertTrue(result.output.contains("Usage :")); } @Test void testDecodeMainOption() { validMap.forEach((expected, source) -> { - var result = UrlEncoder.handleMain(new String[] {"-d", source}); + var result = UrlEncoder.processMain(new String[] {"-d", source}); assertEquals(0, result.status); assertEquals(expected, result.output); }); @@ -92,7 +92,7 @@ class UrlEncoderTest { @Test void testEncodeMainDefault() { validMap.forEach((source, expected) -> { - var result = UrlEncoder.handleMain(new String[] {source}); + var result = UrlEncoder.processMain(new String[] {source}); assertEquals(0, result.status); assertEquals(expected, result.output); }); @@ -101,7 +101,7 @@ class UrlEncoderTest { @Test void testEncodeMainOption() { validMap.forEach((source, expected) -> { - var result = UrlEncoder.handleMain(new String[] {"-e", source}); + var result = UrlEncoder.processMain(new String[] {"-e", source}); assertEquals(0, result.status); assertEquals(expected, result.output); });