Compare commits

...

7 commits

Author SHA1 Message Date
a5dfff64a0 Updated version 2023-01-01 10:33:24 -05:00
c3fad893f1 Updated javadoc 2023-01-01 10:30:39 -05:00
c98db644bd Reworking main method argument parsing.
Updated gradle build file.
2023-01-01 10:26:29 -05:00
076c95d132 Merge remote-tracking branch 'origin/main' 2023-01-01 09:13:23 -05:00
76fc4b6815 Updated maven publishing settings 2023-01-01 09:13:17 -05:00
4ed86c9a1d
Update README.md 2023-01-01 09:10:25 -05:00
1ee9721d3c
Update README.md 2023-01-01 09:09:01 -05:00
4 changed files with 80 additions and 56 deletions

View file

@ -1,7 +1,7 @@
[![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Nexus Snapshot](https://img.shields.io/nexus/s/com.uwyn/urlencoder?server=https%3A%2F%2Fs01.oss.sonatype.org%2F)](https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/urlencoder/)
[![Release](https://img.shields.io/github/release/gbevin/urlencoder.svg)](https://github.com/gbevin/urlencoder/releases/latest)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.uwyn/urlencoder/badge.svg?color=blue)](https://maven-badges.herokuapp.com/maven-central/com.uwyn/urlencoder)
[![Maven Central Repo](https://maven-badges.herokuapp.com/maven-central/com.uwyn/urlencoder/badge.svg?color=blue)](https://maven-badges.herokuapp.com/maven-central/com.uwyn/urlencoder)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=gbevin_urlencoder&metric=alert_status)](https://sonarcloud.io/dashboard?id=gbevin_urlencoder)
[![GitHub CI](https://github.com/gbevin/urlencoder/actions/workflows/gradle.yml/badge.svg)](https://github.com/gbevin/urlencoder/actions/workflows/gradle.yml)

View file

@ -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
@ -7,7 +11,10 @@ plugins {
}
group = "com.uwyn"
version = "1.0.1-SNAPSHOT"
version = "1.1.0-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>("test") {
useJUnitPlatform()
tasks {
jar {
manifest {
attributes["Main-Class"] = javaMainClass
}
}
withType<Test> {
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 {
@ -74,6 +90,7 @@ publishing {
id.set("gbevin")
name.set("Geert Bevin")
email.set("gbevin@uwyn.com")
url.set("https://github.com/gbevin")
}
developer {
id.set("ethauvin")

View file

@ -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,53 @@ 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);
}
/**
* Main method to encode/decode URLs on the command line
* @param arguments the command line arguments
* @since 1.1
*/
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);
}
}

View file

@ -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);
});