From 1e4a930864467abef9a19f042a11921478d644f8 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 02:00:11 -0500 Subject: [PATCH 01/74] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a267f82..d27e5ed 100644 --- a/README.md +++ b/README.md @@ -1,5 +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) [![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) From f5485bf2d50c5e5ab12b0441f1e5b32bcfd64646 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 02:00:58 -0500 Subject: [PATCH 02/74] Changed version to 1.0.1-SNAPSHOT --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 12c008c..67fb282 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -10,7 +10,7 @@ group = "com.uwyn" base { archivesName.set("urlencoder") - version = "1.0.0" + version = "1.0.1-SNAPSHOT" } java { From 9af78b38d941df1f451d8329b318014a48aa9bd0 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 31 Dec 2022 23:20:31 -0800 Subject: [PATCH 03/74] Minor cleanup --- README.md | 5 +++-- lib/build.gradle.kts | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d27e5ed..984afcf 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,11 @@ parameters, not URLs, causing the wrong escape sequences to be used. Additionally, `java.net.URLEncoder` allocates memory even when no encoding is necessary, significantly impacting performance. This library has a negligible -performance impact when the string that is passed in doesn't need to be encoded. +performance impact when a specified string doesn't need to be encoded. Android's [Uri.encode](https://developer.android.com/reference/android/net/Uri#encode(java.lang.String,%20java.lang.String)) -also addresses these issues. +also addresses these issues, but does not currently support [unicode surrogate pairs](https://learn.microsoft.com/en-us/globalization/encoding/surrogate-pairs). + ## Examples (TL;DR) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 67fb282..415985e 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -7,10 +7,10 @@ plugins { } group = "com.uwyn" +version = "1.0.1-SNAPSHOT" base { - archivesName.set("urlencoder") - version = "1.0.1-SNAPSHOT" + archivesName.set(rootProject.name) } java { @@ -51,11 +51,11 @@ tasks.named("test") { publishing { publications { create("mavenJava") { - artifactId = "urlencoder" + artifactId = rootProject.name from(components["java"]) pom { - name.set("URL Encoder") - description.set("A simple library to encode/decode URL parameters.") + name.set("URLEncoder") + description.set("A simple library to encode/decode URL parameters") url.set("https://github.com/gbevin/urlencoder") licenses { license { @@ -99,4 +99,4 @@ publishing { signing { sign(publishing.publications["mavenJava"]) -} \ No newline at end of file +} From 79264bdb68c4ee3ab2f906c5a6d905180d89e9a3 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 31 Dec 2022 23:37:33 -0800 Subject: [PATCH 04/74] Added Maven Central URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 984afcf..ef9d3f2 100644 --- a/README.md +++ b/README.md @@ -44,4 +44,4 @@ dependencies { } ``` -Instructions for using with Maven, Ivy, etc. can be found on Maven Central. +Instructions for using with Maven, Ivy, etc. can be found on [Maven Central](https://maven-badges.herokuapp.com/maven-central/com.uwyn/urlencoder). From 3171b82ae17ec8005580447a9d527745a5701de5 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 02:49:58 -0500 Subject: [PATCH 05/74] Added main method for command line usage --- lib/build.gradle.kts | 6 ++++ .../java/com/uwyn/urlencoder/UrlEncoder.java | 36 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 415985e..ae809c3 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -21,6 +21,12 @@ java { } } +tasks.jar { + manifest { + attributes["Main-Class"] = "com.uwyn.urlencoder.UrlEncoder" + } +} + tasks.jacocoTestReport { reports { xml.required.set(true) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 080af04..5e4a092 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -218,4 +218,40 @@ public final class UrlEncoder { private static boolean isUnreservedUriChar(char ch) { return ch <= '~' && UNRESERVED_URI_CHARS.get(ch); } + + public static void main(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; + } + } + + if (!valid_arguments) { + System.err.println("Usage : java " + UrlEncoder.class.getName() + " [-ed] text"); + System.err.println("Encode and decode URL parameters."); + System.err.println(" -e encode (default)"); + System.err.println(" -d decode"); + System.exit(1); + } + + if (1 == arguments.length) { + System.out.println(UrlEncoder.encode(arguments[0])); + System.exit(0); + } else if (arguments[0].equals("-e")) { + System.out.println(UrlEncoder.encode(arguments[1])); + System.exit(0); + } + + System.out.println(UrlEncoder.decode(arguments[1])); + System.exit(0); + } } From f3c7853d02640f98a12d219616b8346a24435f2a Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 03:27:11 -0500 Subject: [PATCH 06/74] Reworked main method for testability. --- .../java/com/uwyn/urlencoder/UrlEncoder.java | 50 ++++++++++++----- .../com/uwyn/urlencoder/UrlEncoderTest.java | 55 +++++++++++++++++++ 2 files changed, 90 insertions(+), 15 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 5e4a092..439a069 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -67,7 +67,7 @@ public final class UrlEncoder { byte[] bytes_buffer = null; var bytes_pos = 0; var i = 0; - while(i < length) { + while (i < length) { ch = source.charAt(i); if (ch == '%') { @@ -137,7 +137,7 @@ public final class UrlEncoder { * @since 1.0 */ public static String encode(String source) { - return encode(source, (String)null); + return encode(source, (String) null); } /** @@ -174,7 +174,7 @@ public final class UrlEncoder { StringBuilder out = null; char ch; var i = 0; - while(i < source.length()) { + while (i < source.length()) { ch = source.charAt(i); if (isUnreservedUriChar(ch) || (allow != null && allow.indexOf(ch) != -1)) { if (out != null) { @@ -219,7 +219,17 @@ public final class UrlEncoder { return ch <= '~' && UNRESERVED_URI_CHARS.get(ch); } - public static void main(String[] arguments) { + static class MainResult { + final String output; + final int status; + + public MainResult(String output, int status) { + this.output = output; + this.status = status; + } + } + + static MainResult handleMain(String[] arguments) { var valid_arguments = true; if (arguments.length < 1 || arguments.length > 2) { @@ -236,22 +246,32 @@ public final class UrlEncoder { } if (!valid_arguments) { - System.err.println("Usage : java " + UrlEncoder.class.getName() + " [-ed] text"); - System.err.println("Encode and decode URL parameters."); - System.err.println(" -e encode (default)"); - System.err.println(" -d decode"); - System.exit(1); + return new MainResult("Usage : java " + UrlEncoder.class.getName() + " [-ed] text" + System.lineSeparator() + + "Encode and decode URL parameters." + System.lineSeparator() + + " -e encode (default)" + System.lineSeparator() + + " -d decode" + System.lineSeparator(), 1); } if (1 == arguments.length) { - System.out.println(UrlEncoder.encode(arguments[0])); - System.exit(0); + return new MainResult(UrlEncoder.encode(arguments[0]), 0); } else if (arguments[0].equals("-e")) { - System.out.println(UrlEncoder.encode(arguments[1])); - System.exit(0); + return new MainResult(UrlEncoder.encode(arguments[1]), 0); } - System.out.println(UrlEncoder.decode(arguments[1])); - System.exit(0); + return new MainResult(UrlEncoder.decode(arguments[1]), 0); + } + + public static void main(String[] arguments) { + var result = handleMain(arguments); + switch (result.status) { + case 0: { + System.out.println(result.output); + System.exit(0); + } + case 1: { + System.err.println(result.output); + System.exit(1); + } + } } } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 530dd4c..0f5c67b 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -43,4 +43,59 @@ class UrlEncoderTest { assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", '?', '=')); assertEquals("aaa", UrlEncoder.encode("aaa", 'a')); } + + @Test + void testMainNoArgs() { + var result = UrlEncoder.handleMain(new String[0]); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testMainTooManyArgs() { + var result = UrlEncoder.handleMain(new String[] {"-x", "-g", "f"}); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testMainWrongArgs2() { + var result = UrlEncoder.handleMain(new String[] {"-x", "txt"}); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testMainWrongArgs1() { + var result = UrlEncoder.handleMain(new String[] {"-p"}); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + + @Test + void testDecodeMainOption() { + validMap.forEach((expected, source) -> { + var result = UrlEncoder.handleMain(new String[] {"-d", source}); + assertEquals(0, result.status); + assertEquals(expected, result.output); + }); + } + + @Test + void testEncodeMainDefault() { + validMap.forEach((source, expected) -> { + var result = UrlEncoder.handleMain(new String[] {source}); + assertEquals(0, result.status); + assertEquals(expected, result.output); + }); + } + + @Test + void testEncodeMainOption() { + validMap.forEach((source, expected) -> { + var result = UrlEncoder.handleMain(new String[] {"-e", source}); + assertEquals(0, result.status); + assertEquals(expected, result.output); + }); + } } From 48bc3210588234ef3907658d286d45ce2dba9ca8 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 03:30:28 -0500 Subject: [PATCH 07/74] Code cleanup --- .../main/java/com/uwyn/urlencoder/UrlEncoder.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 439a069..87e7635 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -263,15 +263,12 @@ public final class UrlEncoder { public static void main(String[] arguments) { var result = handleMain(arguments); - switch (result.status) { - case 0: { - System.out.println(result.output); - System.exit(0); - } - case 1: { - System.err.println(result.output); - System.exit(1); - } + if (result.status == 0) { + System.out.println(result.output); + System.exit(0); + } else { + System.err.println(result.output); + System.exit(result.status); } } } From bfeb89437293f748c093b152e57aa55e21293a41 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 03:31:36 -0500 Subject: [PATCH 08/74] Remove spurious line separator --- lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 87e7635..497d58a 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -249,7 +249,7 @@ public final class UrlEncoder { return new MainResult("Usage : java " + UrlEncoder.class.getName() + " [-ed] text" + System.lineSeparator() + "Encode and decode URL parameters." + System.lineSeparator() + " -e encode (default)" + System.lineSeparator() + - " -d decode" + System.lineSeparator(), 1); + " -d decode", 1); } if (1 == arguments.length) { From 2ae47b770fe76ab9ac4c2f6f50b5c5b2fb0bf5e1 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 03:35:24 -0500 Subject: [PATCH 09/74] A little more test coverage --- .../java/com/uwyn/urlencoder/UrlEncoderTest.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 0f5c67b..b587598 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -23,6 +23,7 @@ class UrlEncoderTest { @Test void testDecodeURL() { assertNull(UrlEncoder.decode(null)); + assertSame("", UrlEncoder.decode("")); assertSame(same, UrlEncoder.decode(same)); validMap.forEach((expected, source) -> assertEquals(expected, UrlEncoder.decode(source))); @@ -58,6 +59,13 @@ class UrlEncoderTest { assertTrue(result.output.contains(UrlEncoder.class.getName())); } + @Test + void testMainWrongArgs1() { + var result = UrlEncoder.handleMain(new String[] {"-p"}); + assertEquals(1, result.status); + assertTrue(result.output.contains(UrlEncoder.class.getName())); + } + @Test void testMainWrongArgs2() { var result = UrlEncoder.handleMain(new String[] {"-x", "txt"}); @@ -66,8 +74,8 @@ class UrlEncoderTest { } @Test - void testMainWrongArgs1() { - var result = UrlEncoder.handleMain(new String[] {"-p"}); + void testMainWrongArgs3() { + var result = UrlEncoder.handleMain(new String[] {"stuff", "txt"}); assertEquals(1, result.status); assertTrue(result.output.contains(UrlEncoder.class.getName())); } From 1ee9721d3c641d2e87a9f8ca7c89844566539da2 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 09:09:01 -0500 Subject: [PATCH 10/74] Update README.md From 4ed86c9a1dc735b36ca0a27b1655eee44a5e57e7 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 09:10:25 -0500 Subject: [PATCH 11/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef9d3f2..4c320df 100644 --- a/README.md +++ b/README.md @@ -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) From 76fc4b681518c1017e0cbe88050cd255510a6669 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 09:13:17 -0500 Subject: [PATCH 12/74] Updated maven publishing settings --- lib/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index ae809c3..89dae47 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -74,6 +74,7 @@ publishing { id.set("gbevin") name.set("Geert Bevin") email.set("gbevin@uwyn.com") + url.set("https://github.com/gbevin") } developer { id.set("ethauvin") From c98db644bda014caf6143d701204d0e6eea3e279 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 10:26:29 -0500 Subject: [PATCH 13/74] 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); }); From c3fad893f18b2b49bff7a0927a764b7b1e409516 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 10:30:39 -0500 Subject: [PATCH 14/74] Updated javadoc --- lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 52b880a..a669a78 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -264,6 +264,11 @@ public final class UrlEncoder { } } + /** + * 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 = processMain(arguments); if (result.status == 0) { From a5dfff64a03527b7046156d063d9da49209d1c5f Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 10:33:24 -0500 Subject: [PATCH 15/74] Updated version --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 1afe499..bb44af8 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "com.uwyn" -version = "1.0.1-SNAPSHOT" +version = "1.1.0-SNAPSHOT" val mavenName = "UrlEncoder" val javaMainClass = "$group.${rootProject.name}.$mavenName" From ca82b1ec6da1e8db101482e4126e60a92f9b6e38 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 16:55:18 -0500 Subject: [PATCH 16/74] Fixed main method usage when text is missing for encode or decode --- .../main/java/com/uwyn/urlencoder/UrlEncoder.java | 4 ++-- .../java/com/uwyn/urlencoder/UrlEncoderTest.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index a669a78..3fbcfe0 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -237,9 +237,9 @@ public final class UrlEncoder { var option = args.remove(0); if (option.equals("-d")) { perform_decode = true; - valid_arguments = true; + valid_arguments = !args.isEmpty(); } else if (option.equals("-e")) { - valid_arguments = true; + valid_arguments = !args.isEmpty(); } else { args.clear(); } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 085b8a3..f0f67a7 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -59,6 +59,20 @@ class UrlEncoderTest { assertTrue(result.output.contains("Usage :")); } + @Test + void testMainMissingEncodeText() { + var result = UrlEncoder.processMain(new String[] {"-e"}); + assertEquals(1, result.status); + assertTrue(result.output.contains("Usage :")); + } + + @Test + void testMainMissingDecodeText() { + var result = UrlEncoder.processMain(new String[] {"-d"}); + assertEquals(1, result.status); + assertTrue(result.output.contains("Usage :")); + } + @Test void testMainWrongArgs1() { var result = UrlEncoder.processMain(new String[] {"-p"}); From 97bc6137a333482c24ca9a56cdd79b3fcb38a4d1 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 17:13:28 -0500 Subject: [PATCH 17/74] Handle more invalid CLI argument usages. --- .../main/java/com/uwyn/urlencoder/UrlEncoder.java | 4 ++-- .../java/com/uwyn/urlencoder/UrlEncoderTest.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 3fbcfe0..3486188 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -237,9 +237,9 @@ public final class UrlEncoder { var option = args.remove(0); if (option.equals("-d")) { perform_decode = true; - valid_arguments = !args.isEmpty(); + valid_arguments = (args.size() == 1); } else if (option.equals("-e")) { - valid_arguments = !args.isEmpty(); + valid_arguments = (args.size() == 1); } else { args.clear(); } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index f0f67a7..a095b35 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -94,6 +94,20 @@ class UrlEncoderTest { assertTrue(result.output.contains("Usage :")); } + @Test + void testMainWrongArgs4() { + var result = UrlEncoder.processMain(new String[] {"-d", "stuff", "txt"}); + assertEquals(1, result.status); + assertTrue(result.output.contains("Usage :")); + } + + @Test + void testMainWrongArgs5() { + var result = UrlEncoder.processMain(new String[] {"-e", "stuff", "txt"}); + assertEquals(1, result.status); + assertTrue(result.output.contains("Usage :")); + } + @Test void testDecodeMainOption() { validMap.forEach((expected, source) -> { From 266691467b7745e24f46c19b30cffebff04dc72e Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 22:41:29 -0500 Subject: [PATCH 18/74] Integrated tests badge --- .github/workflows/gradle.yml | 2 +- lib/build.gradle.kts | 37 +++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index e4f46c2..e74b032 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -48,7 +48,7 @@ jobs: ${{ runner.os }}-gradle-${{ matrix.java-version }}- - name: Test with Gradle - run: ./gradlew build check --stacktrace + run: ./gradlew build check --stacktrace -PtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} - name: SonarCloud if: success() && matrix.java-version == env.SONAR_JDK diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index bb44af8..397b847 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -1,5 +1,7 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent +import java.net.* +import java.net.http.* plugins { application @@ -55,12 +57,45 @@ tasks { } } - withType { + test { useJUnitPlatform() testLogging { exceptionFormat = TestExceptionFormat.FULL events = setOf(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) } + addTestListener(object : TestListener { + override fun beforeTest(p0: TestDescriptor?) = Unit + override fun beforeSuite(p0: TestDescriptor?) = Unit + override fun afterTest(desc: TestDescriptor, result: TestResult) = Unit + override fun afterSuite(desc: TestDescriptor, result: TestResult) { + if (desc.parent == null) { + val passed = result.successfulTestCount + val failed = result.failedTestCount + val skipped = result.skippedTestCount + + if (project.properties["testsBadgeApiKey"] != null) { + val apiKey = project.properties["testsBadgeApiKey"] + val response: java.net.http.HttpResponse = HttpClient.newHttpClient() + .send( + HttpRequest.newBuilder() + .uri( + URI( + "https://rife2.com/tests-badge/update/com.uwyn/urlencoder?" + + "apiKey=$apiKey&" + + "passed=$passed&" + + "failed=$failed&" + + "skipped=$skipped" + ) + ) + .POST(HttpRequest.BodyPublishers.noBody()) + .build(), HttpResponse.BodyHandlers.ofString() + ) + println("RESPONSE: " + response.statusCode()) + println(response.body()) + } + } + } + }) } jacocoTestReport { From 3ff4549d0ef581024c087dfa9a812e02919b5c58 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sun, 1 Jan 2023 22:43:34 -0500 Subject: [PATCH 19/74] Added tests badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4c320df..f94cd08 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![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) +[![Tests](https://rife2.com/tests-badge/badge/com.uwyn/urlencoder)](https://github.com/gbevin/urlencoder/actions/workflows/gradle.yml) # URL Encoder for Java From 1370da18bb8677169fc125de9d283c263c88f4ec Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 2 Jan 2023 02:17:55 -0800 Subject: [PATCH 20/74] Added parameterized tests and related fixes --- .../java/com/uwyn/urlencoder/UrlEncoder.java | 6 +- .../com/uwyn/urlencoder/UrlEncoderTest.java | 219 ++++++++++-------- 2 files changed, 119 insertions(+), 106 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 3486188..3bb0a15 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2022 Geert Bevin (gbevin[remove] at uwyn dot com) + * Copyright 2001-2023 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") */ package com.uwyn.urlencoder; @@ -167,7 +167,7 @@ public final class UrlEncoder { * @since 1.0 */ public static String encode(String source, String allow) { - if (source == null || source.isBlank()) { + if (source == null || source.isEmpty()) { return source; } @@ -246,7 +246,7 @@ public final class UrlEncoder { } var text = ""; - if (args.size() == 1) { + if (args.size() == 1 && !args.get(0).isEmpty()) { text = args.remove(0); valid_arguments = true; } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index a095b35..2fec84f 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -1,137 +1,150 @@ /* - * Copyright 2001-2022 Geert Bevin (gbevin[remove] at uwyn dot com) + * Copyright 2001-2023 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") */ package com.uwyn.urlencoder; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; -import java.util.Map; +import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.params.provider.Arguments.arguments; class UrlEncoderTest { - private String[] invalid = {"sdkjfh%", "sdkjfh%6", "sdkjfh%xx", "sdfjfh%-1"}; - private String same = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~"; - private Map validMap = Map.of( - "a test &", "a%20test%20%26", - "!abcdefghijklmnopqrstuvwxyz%%ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~=", - "%21abcdefghijklmnopqrstuvwxyz%25%25ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~%3D", - "%#okékÉȢ smile!😁", "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81" - ); + private final String same = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~"; + + private static Stream invalid() { + return Stream.of("sdkjfh%", "sdkjfh%6", "sdkjfh%xx", "sdfjfh%-1"); + } + + private static Stream validMap() { + return Stream.of( + arguments("a test &", "a%20test%20%26"), + arguments( + "!abcdefghijklmnopqrstuvwxyz%%ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~=", + "%21abcdefghijklmnopqrstuvwxyz%25%25ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~%3D" + ), + arguments("%#okékÉȢ smile!😁", "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"), + arguments( + "\uD808\uDC00\uD809\uDD00\uD808\uDF00\uD808\uDD00", + "%F0%92%80%80%F0%92%94%80%F0%92%8C%80%F0%92%84%80" + ) + ); + } + + @ParameterizedTest(name = "decode({0}) should be {1}") + @MethodSource("validMap") + void testDecodeUrl(String expected, String source) { + assertEquals(expected, UrlEncoder.decode(source)); + } @Test - void testDecodeURL() { - assertNull(UrlEncoder.decode(null)); - assertSame("", UrlEncoder.decode("")); + void testDecodeNotNeeded() { assertSame(same, UrlEncoder.decode(same)); - validMap.forEach((expected, source) -> assertEquals(expected, UrlEncoder.decode(source))); + assertEquals("", UrlEncoder.decode(""), "decode('')"); + assertEquals(" ", UrlEncoder.decode(" "), "decode(' ')"); + } - for (String i : invalid) { - assertThrows(IllegalArgumentException.class, () -> UrlEncoder.decode(i)); - } + @ParameterizedTest(name = "decode({0})") + @MethodSource("invalid") + void testDecodeWithException(String source) { + assertThrows(IllegalArgumentException.class, () -> UrlEncoder.decode(source), "decode(" + source + ")"); } @Test - void testEncodeURL() { - assertNull(UrlEncoder.encode(null)); - assertTrue(UrlEncoder.encode("").isEmpty()); + void testDecodeWithNull() { + assertNull(UrlEncoder.decode(null), "decode(null)"); + } + + @Test + void testEncodeWhenNoneNeeded() { assertSame(same, UrlEncoder.encode(same)); - assertSame(same, UrlEncoder.encode(same, "")); - validMap.forEach((source, expected) -> assertEquals(expected, UrlEncoder.encode(source))); - - assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", "?=")); - assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", '?', '=')); - assertEquals("aaa", UrlEncoder.encode("aaa", 'a')); + assertSame(same, UrlEncoder.encode(same, ""), "with empty allow"); } @Test - void testMainNoArgs() { - var result = UrlEncoder.processMain(new String[0]); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); + void testEncodeWithAllowArg() { + assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", '=', '?'), "encode(x, =, ?)"); + assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", "=?"), "encode(x, =?)"); + assertEquals("aaa", UrlEncoder.encode("aaa", 'a'), "encode(aaa, a)"); + assertEquals(" ", UrlEncoder.encode(" ", ' '), "encode(' ', ' ')"); + } + + @Test + void testEncodeWithEmptyOrBlank() { + assertTrue(UrlEncoder.encode("", "").isEmpty(), "encode('','')"); + assertEquals("", UrlEncoder.encode(""), "encode('')"); + assertEquals("%20", UrlEncoder.encode(" "), "encode('')"); + } + + @ParameterizedTest(name = "encode({0}) should be {1}") + @MethodSource("validMap") + void testEncodeUrl(String source, String expected) { + assertEquals(expected, UrlEncoder.encode(source)); + } + + @Test + void testEncodeWithNulls() { + assertNull(UrlEncoder.encode(null), "encode(null)"); + assertNull(UrlEncoder.encode(null, (String) null), "encode(null, null)"); + assertEquals("foo", UrlEncoder.encode("foo", (String) null), "encode(foo, null"); + } + + @ParameterizedTest(name = "processMain(-d {1}) should be {0}") + @MethodSource("validMap") + void testMainDecode(String expected, String source) { + var result = UrlEncoder.processMain(new String[]{"-d", source}); + assertEquals(expected, result.output); + assertEquals(0, result.status, "processMain(-d " + source + ").status"); + } + + @ParameterizedTest(name = "processMain(-e {0})") + @MethodSource("validMap") + void testMainEncode(String source, String expected) { + var result = UrlEncoder.processMain(new String[]{source}); + assertEquals(expected, result.output); + assertEquals(0, result.status, "processMain(-e " + source + ").status"); + } + + @ParameterizedTest(name = "processMain(-d {0})") + @MethodSource("invalid") + void testMainEncodeWithExceptions(String source) { + assertThrows(IllegalArgumentException.class, () -> UrlEncoder.processMain(new String[]{"-d", source}), source); } @Test void testMainTooManyArgs() { - var result = UrlEncoder.processMain(new String[] {"-x", "-g", "f"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); + assertTrue(UrlEncoder.processMain(new String[]{"foo", "bar", "test"}).output.contains("Usage :"), "too many args"); } @Test - void testMainMissingEncodeText() { - var result = UrlEncoder.processMain(new String[] {"-e"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); + void testMainWithEmptyArgs() { + assertTrue(UrlEncoder.processMain(new String[]{" ", " "}).output.contains("Usage :"), "processMain(' ', ' ')"); + assertTrue(UrlEncoder.processMain(new String[]{"foo", " "}).output.contains("Usage :"), "processMain('foo', ' ')"); + assertTrue(UrlEncoder.processMain(new String[]{" ", "foo"}).output.contains("Usage :"), "processMain(' ', 'foo')"); + assertTrue(UrlEncoder.processMain(new String[]{"-d ", ""}).output.contains("Usage :"), "processMain('-d', '')"); + assertEquals("%20", UrlEncoder.processMain(new String[]{"-e", " "}).output, "processMain('-e', ' ')"); + assertEquals(" ", UrlEncoder.processMain(new String[]{"-d", " "}).output, "processMain('-d', ' ')"); } - @Test - void testMainMissingDecodeText() { - var result = UrlEncoder.processMain(new String[] {"-d"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); + @ParameterizedTest + @ValueSource(strings = {"", "-d", "-e"}) + void testMainWithInvalidArgs(String arg) { + var result = UrlEncoder.processMain(new String[]{arg}); + assertTrue(result.output.contains("Usage :"), "processMain('" + arg + "')"); + assertEquals(1, result.status, "processMain('" + arg + "').status"); } - @Test - void testMainWrongArgs1() { - var result = UrlEncoder.processMain(new String[] {"-p"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); + @ParameterizedTest(name = "processMain(-e {0})") + @MethodSource("validMap") + void testMainWithOption(String source, String expected) { + var result = UrlEncoder.processMain(new String[]{"-e", source}); + assertEquals(expected, result.output); + assertEquals(0, result.status, "processMain(-e " + source + ").status"); } - - @Test - void testMainWrongArgs2() { - var result = UrlEncoder.processMain(new String[] {"-x", "txt"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); - } - - @Test - void testMainWrongArgs3() { - var result = UrlEncoder.processMain(new String[] {"stuff", "txt"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); - } - - @Test - void testMainWrongArgs4() { - var result = UrlEncoder.processMain(new String[] {"-d", "stuff", "txt"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); - } - - @Test - void testMainWrongArgs5() { - var result = UrlEncoder.processMain(new String[] {"-e", "stuff", "txt"}); - assertEquals(1, result.status); - assertTrue(result.output.contains("Usage :")); - } - - @Test - void testDecodeMainOption() { - validMap.forEach((expected, source) -> { - var result = UrlEncoder.processMain(new String[] {"-d", source}); - assertEquals(0, result.status); - assertEquals(expected, result.output); - }); - } - - @Test - void testEncodeMainDefault() { - validMap.forEach((source, expected) -> { - var result = UrlEncoder.processMain(new String[] {source}); - assertEquals(0, result.status); - assertEquals(expected, result.output); - }); - } - - @Test - void testEncodeMainOption() { - validMap.forEach((source, expected) -> { - var result = UrlEncoder.processMain(new String[] {"-e", source}); - assertEquals(0, result.status); - assertEquals(expected, result.output); - }); - } -} +} \ No newline at end of file From a7eaf1a608a39140f87a595bdab12d3bb8ec1b44 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 2 Jan 2023 11:40:01 -0800 Subject: [PATCH 21/74] Test for main unknown options --- .../com/uwyn/urlencoder/UrlEncoderTest.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 2fec84f..ecf6624 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -37,12 +37,6 @@ class UrlEncoderTest { ); } - @ParameterizedTest(name = "decode({0}) should be {1}") - @MethodSource("validMap") - void testDecodeUrl(String expected, String source) { - assertEquals(expected, UrlEncoder.decode(source)); - } - @Test void testDecodeNotNeeded() { assertSame(same, UrlEncoder.decode(same)); @@ -50,6 +44,12 @@ class UrlEncoderTest { assertEquals(" ", UrlEncoder.decode(" "), "decode(' ')"); } + @ParameterizedTest(name = "decode({0}) should be {1}") + @MethodSource("validMap") + void testDecodeUrl(String expected, String source) { + assertEquals(expected, UrlEncoder.decode(source)); + } + @ParameterizedTest(name = "decode({0})") @MethodSource("invalid") void testDecodeWithException(String source) { @@ -61,6 +61,12 @@ class UrlEncoderTest { assertNull(UrlEncoder.decode(null), "decode(null)"); } + @ParameterizedTest(name = "encode({0}) should be {1}") + @MethodSource("validMap") + void testEncodeUrl(String source, String expected) { + assertEquals(expected, UrlEncoder.encode(source)); + } + @Test void testEncodeWhenNoneNeeded() { assertSame(same, UrlEncoder.encode(same)); @@ -82,12 +88,6 @@ class UrlEncoderTest { assertEquals("%20", UrlEncoder.encode(" "), "encode('')"); } - @ParameterizedTest(name = "encode({0}) should be {1}") - @MethodSource("validMap") - void testEncodeUrl(String source, String expected) { - assertEquals(expected, UrlEncoder.encode(source)); - } - @Test void testEncodeWithNulls() { assertNull(UrlEncoder.encode(null), "encode(null)"); @@ -147,4 +147,10 @@ class UrlEncoderTest { assertEquals(expected, result.output); assertEquals(0, result.status, "processMain(-e " + source + ").status"); } + + @Test + void testMainWithUnknownOptions() { + assertTrue(UrlEncoder.processMain(new String[]{"-p"}).output.contains("Usage :"), "processMain(-p)"); + assertTrue(UrlEncoder.processMain(new String[]{"-"}).output.contains("Usage :"), "processMain(-)"); + } } \ No newline at end of file From 9c103b8f9c3a9072634d1b32a3974b4cbeb3db8a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 2 Jan 2023 12:39:35 -0800 Subject: [PATCH 22/74] Added exception trapping in main --- .../java/com/uwyn/urlencoder/UrlEncoder.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 3bb0a15..7a2de08 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -270,12 +270,17 @@ public final class UrlEncoder { * @since 1.1 */ public static void main(String[] arguments) { - var result = processMain(arguments); - if (result.status == 0) { - System.out.println(result.output); - } else { - System.err.println(result.output); + try { + var result = processMain(arguments); + if (result.status == 0) { + System.out.println(result.output); + } else { + System.err.println(result.output); + } + System.exit(result.status); + } catch(IllegalArgumentException e) { + System.err.println(UrlEncoder.class.getSimpleName() + ": " + e.getMessage()); + System.exit(1); } - System.exit(result.status); } } From 5627d6db35838d60216e62e3b62c9080a476af01 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 3 Jan 2023 12:51:22 -0500 Subject: [PATCH 23/74] Added readme information about standalone usage --- README.md | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f94cd08..7196d2d 100644 --- a/README.md +++ b/README.md @@ -28,11 +28,11 @@ also addresses these issues, but does not currently support [unicode surrogate p ## Examples (TL;DR) ```java -UrlEncoder.encode("a test &"); // -> "a%20test%20%26" -UrlEncoder.encode("%#okékÉȢ smile!😁"); // -> "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81" +UrlEncoder.encode("a test &"); // -> "a%20test%20%26" +UrlEncoder.encode("%#okékÉȢ smile!😁"); // -> "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81" UrlEncoder.encode("?test=a test", "?="); // -> ?test=a%20test -UrlEncoder.decode("a%20test%20%26"); // -> "a test &" +UrlEncoder.decode("a%20test%20%26"); // -> "a test &" UrlEncoder.decode("%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"); // -> "%#okékÉȢ smile!😁" ``` @@ -46,3 +46,45 @@ dependencies { ``` Instructions for using with Maven, Ivy, etc. can be found on [Maven Central](https://maven-badges.herokuapp.com/maven-central/com.uwyn/urlencoder). + +## Standalone usage + +UrlEncoder can be used on the command line also, both for encoding and decoding. + +You have two options: +* run it with Gradle +* build the jar and launch it with Java + +The usage is as follows: + +``` +Encode and decode URL parameters. + -e encode (default) + -d decode +``` + +### Running with Gradle + +```shell +./gradlew run --args="-e 'a test &'" # -> a%20test%20%26 +./gradlew run --args="%#okékÉȢ" # -> %25%23ok%C3%A9k%C3%89%C8%A2 + +./gradlew run --args="-d 'a%20test%20%26'" # -> a test & +``` + +### Running with Java + +First build the jar file: + +```shell +./gradlew clean jar +``` + +Then run it: + +```shell +java -jar lib/build/libs/urlencoder-*.jar -e "a test &" # -> a%20test%20%26 +java -jar lib/build/libs/urlencoder-*.jar "%#okékÉȢ" # -> %25%23ok%C3%A9k%C3%89%C8%A2 + +java -jar lib/build/libs/urlencoder-*.jar -d "a%20test%20%26" # -> a test & +``` From 23707b9d185990eed4791bbab9d629e1b04d4a9a Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 3 Jan 2023 12:56:17 -0500 Subject: [PATCH 24/74] Updated version to 1.1.0 --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 397b847..04e2a21 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } group = "com.uwyn" -version = "1.1.0-SNAPSHOT" +version = "1.1.0" val mavenName = "UrlEncoder" val javaMainClass = "$group.${rootProject.name}.$mavenName" From 444175e01a5992caa7784c22942618e20afa40f3 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 3 Jan 2023 13:05:16 -0500 Subject: [PATCH 25/74] Updated version number in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7196d2d..b8dfa41 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ To use with [Gradle](https://gradle.org/), include the following dependency in y ```gradle dependencies { - implementation("com.uwyn:urlencoder:1.0.0") + implementation("com.uwyn:urlencoder:1.1.0") } ``` From 92d767aadf8bf1de1f1f2e9b9ce2697ac303ddfd Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 12:13:05 -0500 Subject: [PATCH 26/74] Updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8dfa41..d0bae33 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ necessary, significantly impacting performance. This library has a negligible performance impact when a specified string doesn't need to be encoded. Android's [Uri.encode](https://developer.android.com/reference/android/net/Uri#encode(java.lang.String,%20java.lang.String)) -also addresses these issues, but does not currently support [unicode surrogate pairs](https://learn.microsoft.com/en-us/globalization/encoding/surrogate-pairs). +also addresses these issues, but might not currently support [unicode surrogate pairs](https://learn.microsoft.com/en-us/globalization/encoding/surrogate-pairs) (needs more research). ## Examples (TL;DR) From 320be3b3a15bd00678aecbdc2b4ef047b99c54ab Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 4 Jan 2023 11:42:06 -0800 Subject: [PATCH 27/74] Clarified Android's URI.encode statement --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index d0bae33..84f4da9 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,7 @@ necessary, significantly impacting performance. This library has a negligible performance impact when a specified string doesn't need to be encoded. Android's [Uri.encode](https://developer.android.com/reference/android/net/Uri#encode(java.lang.String,%20java.lang.String)) -also addresses these issues, but might not currently support [unicode surrogate pairs](https://learn.microsoft.com/en-us/globalization/encoding/surrogate-pairs) (needs more research). - +also addresses the same issues. ## Examples (TL;DR) From b12f3eafd7d2deb6b0e9d33736607eb8e02ea51e Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 21:08:31 -0500 Subject: [PATCH 28/74] Made the encoding even more defensive. --- README.md | 26 ++++++++++++------- .../java/com/uwyn/urlencoder/UrlEncoder.java | 19 ++++++++++---- .../com/uwyn/urlencoder/UrlEncoderTest.java | 4 +-- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 84f4da9..6da4af9 100644 --- a/README.md +++ b/README.md @@ -8,21 +8,27 @@ # URL Encoder for Java -A simple library to encode/decode URL parameters. +A simple defensive library to encode/decode URL components. This library was extracted from the [RIFE2 Web Application Framework](https://rife2.com). A Kotlin version can also be found at [https://github.com/ethauvin/urlencoder](https://github.com/ethauvin/urlencoder). -For decades, we've been using [java.net.URLEncoder](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/URLEncoder.html) -because of its improper naming. It is actually intended to encode HTML form -parameters, not URLs, causing the wrong escape sequences to be used. +The rules are determined by combining the unreserved character set from +[RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#page-13) with the +percent-encode set from +[application/x-www-form-urlencoded](https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set). -Additionally, `java.net.URLEncoder` allocates memory even when no encoding is -necessary, significantly impacting performance. This library has a negligible -performance impact when a specified string doesn't need to be encoded. +Both specs above support percent decoding of two hexadecimal digits to a +binary octet, however their unreserved set of characters differs and +`application/x-www-form-urlencoded` adds conversion of space to `+`, +that has the potential to be misunderstood. -Android's [Uri.encode](https://developer.android.com/reference/android/net/Uri#encode(java.lang.String,%20java.lang.String)) -also addresses the same issues. +This class encodes with rules that will be decoded correctly in either case. + +Additionally, this library allocates no memory when encoding isn't needed and +does the work in a single pass without multiple loops, both of these +optimizations have a significantly beneficial impact on performance of encoding +compared to other solutions like the standard URLEncoder in the JDK. ## Examples (TL;DR) @@ -57,7 +63,7 @@ You have two options: The usage is as follows: ``` -Encode and decode URL parameters. +Encode and decode URL components defensively. -e encode (default) -d decode ``` diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 7a2de08..8e736f3 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -8,9 +8,19 @@ import java.nio.charset.StandardCharsets; import java.util.*; /** - * URL encoding and decoding. + * Most defensive approach to URL encoding and decoding. *

- * Rules determined by RFC 3986. + * Rules determined by combining the unreserved character set from + * RFC 3986 with + * the percent-encode set from + * application/x-www-form-urlencoded. + *

+ * Both specs above support percent decoding of two hexadecimal digits to a + * binary octet, however their unreserved set of characters differs and + * {@code application/x-www-form-urlencoded} adds conversion of space to +, + * which has the potential to be misunderstood. + *

+ * This class encodes with rules that will be decoded correctly in either case. * * @author Geert Bevin (gbevin[remove] at uwyn dot com) * @author Erik C. Thauvin (erik@thauvin.net) @@ -22,14 +32,13 @@ public final class UrlEncoder { static { // see https://www.rfc-editor.org/rfc/rfc3986#page-13 - var unreserved = new BitSet('~' + 1); + var unreserved = new BitSet('z' + 1); unreserved.set('-'); unreserved.set('.'); for (int c = '0'; c <= '9'; ++c) unreserved.set(c); for (int c = 'A'; c <= 'Z'; ++c) unreserved.set(c); unreserved.set('_'); for (int c = 'a'; c <= 'z'; ++c) unreserved.set(c); - unreserved.set('~'); UNRESERVED_URI_CHARS = unreserved; } @@ -216,7 +225,7 @@ public final class UrlEncoder { // see https://www.rfc-editor.org/rfc/rfc3986#page-13 private static boolean isUnreservedUriChar(char ch) { - return ch <= '~' && UNRESERVED_URI_CHARS.get(ch); + return ch <= 'z' && UNRESERVED_URI_CHARS.get(ch); } static class MainResult { diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index ecf6624..99cf385 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -16,7 +16,7 @@ import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.params.provider.Arguments.arguments; class UrlEncoderTest { - private final String same = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~"; + private final String same = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_."; private static Stream invalid() { return Stream.of("sdkjfh%", "sdkjfh%6", "sdkjfh%xx", "sdfjfh%-1"); @@ -27,7 +27,7 @@ class UrlEncoderTest { arguments("a test &", "a%20test%20%26"), arguments( "!abcdefghijklmnopqrstuvwxyz%%ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~=", - "%21abcdefghijklmnopqrstuvwxyz%25%25ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~%3D" + "%21abcdefghijklmnopqrstuvwxyz%25%25ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.%7E%3D" ), arguments("%#okékÉȢ smile!😁", "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"), arguments( From 954aa3e92edecf015c0e3d316f0542845aa1f49d Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 21:15:32 -0500 Subject: [PATCH 29/74] Minor clarifications --- lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 8e736f3..0c53377 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -32,6 +32,7 @@ public final class UrlEncoder { static { // see https://www.rfc-editor.org/rfc/rfc3986#page-13 + // and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set var unreserved = new BitSet('z' + 1); unreserved.set('-'); unreserved.set('.'); @@ -224,6 +225,7 @@ public final class UrlEncoder { } // see https://www.rfc-editor.org/rfc/rfc3986#page-13 + // and https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set private static boolean isUnreservedUriChar(char ch) { return ch <= 'z' && UNRESERVED_URI_CHARS.get(ch); } @@ -262,7 +264,7 @@ public final class UrlEncoder { if (!valid_arguments) { return new MainResult("Usage : java -jar urlencoder-*.jar [-ed] text" + System.lineSeparator() + - "Encode and decode URL parameters." + System.lineSeparator() + + "Encode and decode URL components defensively." + System.lineSeparator() + " -e encode (default)" + System.lineSeparator() + " -d decode", 1); } From a02e617f5bd11ed0fc34ab8175469bb283efe37e Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 21:16:36 -0500 Subject: [PATCH 30/74] Updated version to 1.2.0-SNAPSHOT --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 04e2a21..86570bf 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } group = "com.uwyn" -version = "1.1.0" +version = "1.2.0-SNAPSHOT" val mavenName = "UrlEncoder" val javaMainClass = "$group.${rootProject.name}.$mavenName" From 9c3e68bb4461c3daf05e3a0bc244a0209e669a1f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 4 Jan 2023 19:19:15 -0800 Subject: [PATCH 31/74] Cleaned up description --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 86570bf..f7c20e6 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -112,7 +112,7 @@ publishing { from(components["java"]) pom { name.set(mavenName) - description.set("A simple library to encode/decode URL parameters") + description.set("A simple defensive library to encode/decode URL components") url.set("https://github.com/gbevin/urlencoder") licenses { license { From f84caca6b2d75f88da561dc953e1d44e55065c79 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 4 Jan 2023 19:23:47 -0800 Subject: [PATCH 32/74] Minor cleanup --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6da4af9..8e3ac12 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ that has the potential to be misunderstood. This class encodes with rules that will be decoded correctly in either case. Additionally, this library allocates no memory when encoding isn't needed and -does the work in a single pass without multiple loops, both of these +does the work in a single pass without multiple loops. Both of these optimizations have a significantly beneficial impact on performance of encoding compared to other solutions like the standard URLEncoder in the JDK. From 5c2881c8454b61c5cd572fbaecd476745fa566d2 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 4 Jan 2023 19:24:28 -0800 Subject: [PATCH 33/74] Minor cleanup --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e3ac12..64a2036 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ This class encodes with rules that will be decoded correctly in either case. Additionally, this library allocates no memory when encoding isn't needed and does the work in a single pass without multiple loops. Both of these optimizations have a significantly beneficial impact on performance of encoding -compared to other solutions like the standard URLEncoder in the JDK. +compared to other solutions like the standard `URLEncoder` in the JDK. ## Examples (TL;DR) From 6bebfc3cabff98574a779592ca5d0822ebb18037 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 22:37:44 -0500 Subject: [PATCH 34/74] Minor readme change --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 64a2036..c5d2660 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,8 @@ This class encodes with rules that will be decoded correctly in either case. Additionally, this library allocates no memory when encoding isn't needed and does the work in a single pass without multiple loops. Both of these optimizations have a significantly beneficial impact on performance of encoding -compared to other solutions like the standard `URLEncoder` in the JDK. +compared to other solutions like the standard `URLEncoder` in the JDK or +`UriUtils` in Spring. ## Examples (TL;DR) From 2409932ac5195f45aa2f7700072072d5e868cda9 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 22:52:35 -0500 Subject: [PATCH 35/74] Updated version to 1.2.0 --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index f7c20e6..87a3442 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } group = "com.uwyn" -version = "1.2.0-SNAPSHOT" +version = "1.2.0" val mavenName = "UrlEncoder" val javaMainClass = "$group.${rootProject.name}.$mavenName" From 7e03e1e275e2784a6e2f92ec056eabcea4b0695f Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 23:00:07 -0500 Subject: [PATCH 36/74] Updated version on readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c5d2660..c396fa6 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ To use with [Gradle](https://gradle.org/), include the following dependency in y ```gradle dependencies { - implementation("com.uwyn:urlencoder:1.1.0") + implementation("com.uwyn:urlencoder:1.2.0") } ``` From 70bfd2e663bd16c91b258f20207ee68d1401ff29 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Wed, 4 Jan 2023 23:00:47 -0500 Subject: [PATCH 37/74] Updated version to 1.2.1-SNAPSHOT --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 87a3442..c2145cf 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } group = "com.uwyn" -version = "1.2.0" +version = "1.2.1-SNAPSHOT" val mavenName = "UrlEncoder" val javaMainClass = "$group.${rootProject.name}.$mavenName" From 783a044cab6515bb05c049fe95fb41c98abb9770 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 5 Jan 2023 00:10:37 -0800 Subject: [PATCH 38/74] Added URLEncoder section --- README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/README.md b/README.md index c396fa6..2e7679d 100644 --- a/README.md +++ b/README.md @@ -94,3 +94,35 @@ java -jar lib/build/libs/urlencoder-*.jar "%#okékÉȢ" # -> %25%23ok%C java -jar lib/build/libs/urlencoder-*.jar -d "a%20test%20%26" # -> a test & ``` + +## Why not simply use `java.net.URLEncoder`? + +Apart for being quite inefficient, some URL components encoded with `URLEncoder.encode` might not be able to be properly decoded. + +For example, a simply search query such as: + +```kotlin +var u = URLEncoder.encode("foo + bar", StandardCharsets.UTF_8); +``` + +would be encoded as: + +``` +foo+%28+bar +``` + +Trying to decode it with [Spring](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/UriUtils.html#decode(java.lang.String,java.lang.String)), for example: + +```kotlin +UriUtils.decode(u, StandardCharsets.UTF_8)); +``` + +would return: + +``` +foo+++bar +``` + +Unfortunately, decoding with [Uri.decode](https://developer.android.com/reference/android/net/Uri#decode(java.lang.String)) on Android, [decodeURI](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI) in Javascript, etc. would yield the exact same result. + +![URLEncoder](https://live.staticflickr.com/65535/52607534147_dee4a5a390_c.jpg) From d7437f3167995a1c942200a01d95c8823fcbcc9c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 5 Jan 2023 20:39:46 -0800 Subject: [PATCH 39/74] Added spaceToPlus parameter to encode method --- README.md | 1 + lib/build.gradle.kts | 2 +- .../java/com/uwyn/urlencoder/UrlEncoder.java | 153 ++++++++++-------- .../com/uwyn/urlencoder/UrlEncoderTest.java | 16 +- 4 files changed, 101 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index 2e7679d..c2e7fe3 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ compared to other solutions like the standard `URLEncoder` in the JDK or UrlEncoder.encode("a test &"); // -> "a%20test%20%26" UrlEncoder.encode("%#okékÉȢ smile!😁"); // -> "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81" UrlEncoder.encode("?test=a test", "?="); // -> ?test=a%20test +UrlEncoder.encode("foo bar", true); // -> foo+bar UrlEncoder.decode("a%20test%20%26"); // -> "a test &" UrlEncoder.decode("%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"); // -> "%#okékÉȢ smile!😁" diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index c2145cf..da6085c 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -75,7 +75,7 @@ tasks { if (project.properties["testsBadgeApiKey"] != null) { val apiKey = project.properties["testsBadgeApiKey"] - val response: java.net.http.HttpResponse = HttpClient.newHttpClient() + val response: HttpResponse = HttpClient.newHttpClient() .send( HttpRequest.newBuilder() .uri( diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 0c53377..c5aff0a 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -5,7 +5,9 @@ package com.uwyn.urlencoder; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; /** * Most defensive approach to URL encoding and decoding. @@ -43,6 +45,10 @@ public final class UrlEncoder { UNRESERVED_URI_CHARS = unreserved; } + private UrlEncoder() { + // no-op + } + private static void appendUrlEncodedByte(StringBuilder out, int ch) { out.append("%"); appendUrlEncodedDigit(out, ch >> 4); @@ -53,10 +59,6 @@ public final class UrlEncoder { out.append(HEX_DIGITS[digit & 0x0F]); } - private UrlEncoder() { - // no-op - } - /** * Transforms a provided String URL into a new string, * containing decoded URL characters in the UTF-8 encoding. @@ -67,7 +69,7 @@ public final class UrlEncoder { * @since 1.0 */ public static String decode(String source) { - if (source == null || source.isBlank()) { + if (source == null || source.isEmpty()) { return source; } @@ -107,7 +109,7 @@ public final class UrlEncoder { i += 2; } catch (NumberFormatException e) { - throw new IllegalArgumentException("Illegal characters in escape sequence: " + e.getMessage()); + throw new IllegalArgumentException("Illegal characters in escape sequence: " + e.getMessage(), e); } } else { if (bytes_buffer != null) { @@ -147,22 +149,7 @@ public final class UrlEncoder { * @since 1.0 */ public static String encode(String source) { - return encode(source, (String) null); - } - - /** - * Transforms a provided String object into a new string, - * containing only valid URL characters in the UTF-8 encoding. - * - * @param source The string that has to be transformed into a valid URL - * string. - * @param allow Additional characters to allow. - * @return The encoded String object. - * @see #decode(String) - * @since 1.0 - */ - public static String encode(String source, char... allow) { - return encode(source, new String(allow)); + return encode(source, null, false); } /** @@ -177,6 +164,37 @@ public final class UrlEncoder { * @since 1.0 */ public static String encode(String source, String allow) { + return encode(source, allow, false); + } + + /** + * Transforms a provided String object into a new string, + * containing only valid URL characters in the UTF-8 encoding. + * + * @param source The string that has to be transformed into a valid URL + * string. + * @param spaceToPlus Convert any space to {@code +}. + * @return The encoded String object. + * @see #decode(String) + * @since 1.0 + */ + public static String encode(String source, boolean spaceToPlus) { + return encode(source, null, spaceToPlus); + } + + /** + * Transforms a provided String object into a new string, + * containing only valid URL characters in the UTF-8 encoding. + * + * @param source The string that has to be transformed into a valid URL + * string. + * @param allow Additional characters to allow. + * @param spaceToPlus Convert any space to {@code +}. + * @return The encoded String object. + * @see #decode(String) + * @since 1.0 + */ + public static String encode(String source, String allow, boolean spaceToPlus) { if (source == null || source.isEmpty()) { return source; } @@ -196,23 +214,27 @@ public final class UrlEncoder { out = new StringBuilder(source.length()); out.append(source, 0, i); } - - var cp = source.codePointAt(i); - if (cp < 0x80) { - appendUrlEncodedByte(out, cp); + if (spaceToPlus && ch == ' ') { + out.append('+'); i += 1; - } else if (Character.isBmpCodePoint(cp)) { - for (var b : Character.toString(ch).getBytes(StandardCharsets.UTF_8)) { - appendUrlEncodedByte(out, b); + } else { + var cp = source.codePointAt(i); + if (cp < 0x80) { + appendUrlEncodedByte(out, cp); + i += 1; + } else if (Character.isBmpCodePoint(cp)) { + for (var b : Character.toString(ch).getBytes(StandardCharsets.UTF_8)) { + appendUrlEncodedByte(out, b); + } + i += 1; + } else if (Character.isSupplementaryCodePoint(cp)) { + var high = Character.highSurrogate(cp); + var low = Character.lowSurrogate(cp); + for (var b : new String(new char[]{high, low}).getBytes(StandardCharsets.UTF_8)) { + appendUrlEncodedByte(out, b); + } + i += 2; } - i += 1; - } else if (Character.isSupplementaryCodePoint(cp)) { - var high = Character.highSurrogate(cp); - var low = Character.lowSurrogate(cp); - for (var b : new String(new char[]{high, low}).getBytes(StandardCharsets.UTF_8)) { - appendUrlEncodedByte(out, b); - } - i += 2; } } } @@ -230,26 +252,37 @@ public final class UrlEncoder { return ch <= 'z' && UNRESERVED_URI_CHARS.get(ch); } - static class MainResult { - final String output; - final int status; - - public MainResult(String output, int status) { - this.output = output; - this.status = status; + /** + * 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) { + try { + var result = processMain(arguments); + if (result.status == 0) { + System.out.println(result.output); + } else { + System.err.println(result.output); + } + System.exit(result.status); + } catch (IllegalArgumentException e) { + System.err.println(UrlEncoder.class.getSimpleName() + ": " + e.getMessage()); + System.exit(1); } } - static MainResult processMain(String[] arguments) { + 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")) { + if (("-d").equals(option)) { perform_decode = true; valid_arguments = (args.size() == 1); - } else if (option.equals("-e")) { + } else if (("-e").equals(option)) { valid_arguments = (args.size() == 1); } else { args.clear(); @@ -275,23 +308,13 @@ public final class UrlEncoder { } } - /** - * 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) { - try { - var result = processMain(arguments); - if (result.status == 0) { - System.out.println(result.output); - } else { - System.err.println(result.output); - } - System.exit(result.status); - } catch(IllegalArgumentException e) { - System.err.println(UrlEncoder.class.getSimpleName() + ": " + e.getMessage()); - System.exit(1); + static class MainResult { + final String output; + final int status; + + public MainResult(String output, int status) { + this.output = output; + this.status = status; } } } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 99cf385..62e1db5 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -75,10 +75,9 @@ class UrlEncoderTest { @Test void testEncodeWithAllowArg() { - assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", '=', '?'), "encode(x, =, ?)"); assertEquals("?test=a%20test", UrlEncoder.encode("?test=a test", "=?"), "encode(x, =?)"); - assertEquals("aaa", UrlEncoder.encode("aaa", 'a'), "encode(aaa, a)"); - assertEquals(" ", UrlEncoder.encode(" ", ' '), "encode(' ', ' ')"); + assertEquals("aaa", UrlEncoder.encode("aaa", "a"), "encode(aaa, a)"); + assertEquals(" ", UrlEncoder.encode(" ", " "), "encode(' ', ' ')"); } @Test @@ -91,8 +90,15 @@ class UrlEncoderTest { @Test void testEncodeWithNulls() { assertNull(UrlEncoder.encode(null), "encode(null)"); - assertNull(UrlEncoder.encode(null, (String) null), "encode(null, null)"); - assertEquals("foo", UrlEncoder.encode("foo", (String) null), "encode(foo, null"); + assertNull(UrlEncoder.encode(null, null), "encode(null, null)"); + assertEquals("foo", UrlEncoder.encode("foo", null), "encode(foo, null"); + } + + @Test + void testEncodeSpaceToPlus() { + assertEquals("foo+bar", UrlEncoder.encode("foo bar", true)); + assertEquals("foo+bar++foo", UrlEncoder.encode("foo bar foo", true)); + assertEquals("foo bar", UrlEncoder.encode("foo bar", " ", true)); } @ParameterizedTest(name = "processMain(-d {1}) should be {0}") From 5b293d9ca8ad3255b018bfe5e10ad75e54e55e5a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 5 Jan 2023 21:17:50 -0800 Subject: [PATCH 40/74] Minor cleanup --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2e7fe3..761675f 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ compared to other solutions like the standard `URLEncoder` in the JDK or UrlEncoder.encode("a test &"); // -> "a%20test%20%26" UrlEncoder.encode("%#okékÉȢ smile!😁"); // -> "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81" UrlEncoder.encode("?test=a test", "?="); // -> ?test=a%20test -UrlEncoder.encode("foo bar", true); // -> foo+bar +UrlEncoder.encode("foo bar", true); // -> foo+bar (encode space to +) UrlEncoder.decode("a%20test%20%26"); // -> "a test &" UrlEncoder.decode("%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"); // -> "%#okékÉȢ smile!😁" From b8322bfe9f06d84a37dd2414cd8f27a463fdb899 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 6 Jan 2023 09:55:42 -0500 Subject: [PATCH 41/74] Optimization to spaceToPlus support, tests cleanups. --- .../java/com/uwyn/urlencoder/UrlEncoder.java | 37 +++++++++---------- .../com/uwyn/urlencoder/UrlEncoderTest.java | 24 ++++++------ 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index c5aff0a..984349f 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -214,27 +214,26 @@ public final class UrlEncoder { out = new StringBuilder(source.length()); out.append(source, 0, i); } - if (spaceToPlus && ch == ' ') { - out.append('+'); - i += 1; - } else { - var cp = source.codePointAt(i); - if (cp < 0x80) { + var cp = source.codePointAt(i); + if (cp < 0x80) { + if (spaceToPlus && ch == ' ') { + out.append('+'); + } else { appendUrlEncodedByte(out, cp); - i += 1; - } else if (Character.isBmpCodePoint(cp)) { - for (var b : Character.toString(ch).getBytes(StandardCharsets.UTF_8)) { - appendUrlEncodedByte(out, b); - } - i += 1; - } else if (Character.isSupplementaryCodePoint(cp)) { - var high = Character.highSurrogate(cp); - var low = Character.lowSurrogate(cp); - for (var b : new String(new char[]{high, low}).getBytes(StandardCharsets.UTF_8)) { - appendUrlEncodedByte(out, b); - } - i += 2; } + i += 1; + } else if (Character.isBmpCodePoint(cp)) { + for (var b : Character.toString(ch).getBytes(StandardCharsets.UTF_8)) { + appendUrlEncodedByte(out, b); + } + i += 1; + } else if (Character.isSupplementaryCodePoint(cp)) { + var high = Character.highSurrogate(cp); + var low = Character.lowSurrogate(cp); + for (var b : new String(new char[]{high, low}).getBytes(StandardCharsets.UTF_8)) { + appendUrlEncodedByte(out, b); + } + i += 2; } } } diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 62e1db5..1a7d25d 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -104,7 +104,7 @@ class UrlEncoderTest { @ParameterizedTest(name = "processMain(-d {1}) should be {0}") @MethodSource("validMap") void testMainDecode(String expected, String source) { - var result = UrlEncoder.processMain(new String[]{"-d", source}); + var result = UrlEncoder.processMain("-d", source); assertEquals(expected, result.output); assertEquals(0, result.status, "processMain(-d " + source + ").status"); } @@ -112,7 +112,7 @@ class UrlEncoderTest { @ParameterizedTest(name = "processMain(-e {0})") @MethodSource("validMap") void testMainEncode(String source, String expected) { - var result = UrlEncoder.processMain(new String[]{source}); + var result = UrlEncoder.processMain(source); assertEquals(expected, result.output); assertEquals(0, result.status, "processMain(-e " + source + ").status"); } @@ -120,20 +120,20 @@ class UrlEncoderTest { @ParameterizedTest(name = "processMain(-d {0})") @MethodSource("invalid") void testMainEncodeWithExceptions(String source) { - assertThrows(IllegalArgumentException.class, () -> UrlEncoder.processMain(new String[]{"-d", source}), source); + assertThrows(IllegalArgumentException.class, () -> UrlEncoder.processMain("-d", source), source); } @Test void testMainTooManyArgs() { - assertTrue(UrlEncoder.processMain(new String[]{"foo", "bar", "test"}).output.contains("Usage :"), "too many args"); + assertTrue(UrlEncoder.processMain("foo", "bar", "test").output.contains("Usage :"), "too many args"); } @Test void testMainWithEmptyArgs() { - assertTrue(UrlEncoder.processMain(new String[]{" ", " "}).output.contains("Usage :"), "processMain(' ', ' ')"); - assertTrue(UrlEncoder.processMain(new String[]{"foo", " "}).output.contains("Usage :"), "processMain('foo', ' ')"); - assertTrue(UrlEncoder.processMain(new String[]{" ", "foo"}).output.contains("Usage :"), "processMain(' ', 'foo')"); - assertTrue(UrlEncoder.processMain(new String[]{"-d ", ""}).output.contains("Usage :"), "processMain('-d', '')"); + assertTrue(UrlEncoder.processMain(" ", " ").output.contains("Usage :"), "processMain(' ', ' ')"); + assertTrue(UrlEncoder.processMain("foo", " ").output.contains("Usage :"), "processMain('foo', ' ')"); + assertTrue(UrlEncoder.processMain(" ", "foo").output.contains("Usage :"), "processMain(' ', 'foo')"); + assertTrue(UrlEncoder.processMain("-d ", "").output.contains("Usage :"), "processMain('-d', '')"); assertEquals("%20", UrlEncoder.processMain(new String[]{"-e", " "}).output, "processMain('-e', ' ')"); assertEquals(" ", UrlEncoder.processMain(new String[]{"-d", " "}).output, "processMain('-d', ' ')"); } @@ -141,7 +141,7 @@ class UrlEncoderTest { @ParameterizedTest @ValueSource(strings = {"", "-d", "-e"}) void testMainWithInvalidArgs(String arg) { - var result = UrlEncoder.processMain(new String[]{arg}); + var result = UrlEncoder.processMain(arg); assertTrue(result.output.contains("Usage :"), "processMain('" + arg + "')"); assertEquals(1, result.status, "processMain('" + arg + "').status"); } @@ -149,14 +149,14 @@ class UrlEncoderTest { @ParameterizedTest(name = "processMain(-e {0})") @MethodSource("validMap") void testMainWithOption(String source, String expected) { - var result = UrlEncoder.processMain(new String[]{"-e", source}); + var result = UrlEncoder.processMain("-e", source); assertEquals(expected, result.output); assertEquals(0, result.status, "processMain(-e " + source + ").status"); } @Test void testMainWithUnknownOptions() { - assertTrue(UrlEncoder.processMain(new String[]{"-p"}).output.contains("Usage :"), "processMain(-p)"); - assertTrue(UrlEncoder.processMain(new String[]{"-"}).output.contains("Usage :"), "processMain(-)"); + assertTrue(UrlEncoder.processMain("-p").output.contains("Usage :"), "processMain(-p)"); + assertTrue(UrlEncoder.processMain("-").output.contains("Usage :"), "processMain(-)"); } } \ No newline at end of file From 844db85cbe8e5f5504c505acc2b7b02519614c76 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 6 Jan 2023 13:58:41 -0500 Subject: [PATCH 42/74] Added support for plusToSpace decoding --- .../java/com/uwyn/urlencoder/UrlEncoder.java | 38 ++++++++++++++----- .../com/uwyn/urlencoder/UrlEncoderTest.java | 7 ++++ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java index 984349f..27b9a2f 100644 --- a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java +++ b/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java @@ -69,6 +69,20 @@ public final class UrlEncoder { * @since 1.0 */ public static String decode(String source) { + return decode(source, false); + } + + /** + * Transforms a provided String URL into a new string, + * containing decoded URL characters in the UTF-8 encoding. + * + * @param source The string URL that has to be decoded + * @param plusToSpace Convert any {@code +} to space. + * @return The decoded String object. + * @see #encode(String, String) + * @since 1.0 + */ + public static String decode(String source, boolean plusToSpace) { if (source == null || source.isEmpty()) { return source; } @@ -83,10 +97,7 @@ public final class UrlEncoder { ch = source.charAt(i); if (ch == '%') { - if (out == null) { - out = new StringBuilder(length); - out.append(source, 0, i); - } + out = startConstructingIfNeeded(out, source, i); if (bytes_buffer == null) { // the remaining characters divided by the length @@ -119,7 +130,10 @@ public final class UrlEncoder { bytes_pos = 0; } - if (out != null) { + if (plusToSpace && ch == '+') { + out = startConstructingIfNeeded(out, source, i); + out.append(" "); + } else if (out != null) { out.append(ch); } @@ -138,6 +152,14 @@ public final class UrlEncoder { return out.toString(); } + private static StringBuilder startConstructingIfNeeded(StringBuilder out, String source, int currentSourcePosition) { + if (out == null) { + out = new StringBuilder(source.length()); + out.append(source, 0, currentSourcePosition); + } + return out; + } + /** * Transforms a provided String object into a new string, * containing only valid URL characters in the UTF-8 encoding. @@ -210,10 +232,8 @@ public final class UrlEncoder { } i += 1; } else { - if (out == null) { - out = new StringBuilder(source.length()); - out.append(source, 0, i); - } + out = startConstructingIfNeeded(out, source, i); + var cp = source.codePointAt(i); if (cp < 0x80) { if (spaceToPlus && ch == ' ') { diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java index 1a7d25d..be7408d 100644 --- a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java +++ b/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java @@ -101,6 +101,13 @@ class UrlEncoderTest { assertEquals("foo bar", UrlEncoder.encode("foo bar", " ", true)); } + @Test + void testDecodePlusToSpace() { + assertEquals("foo bar", UrlEncoder.decode("foo+bar", true)); + assertEquals("foo bar foo", UrlEncoder.decode("foo+bar++foo", true)); + assertEquals("foo bar foo", UrlEncoder.decode("foo+%20bar%20+foo", true)); + } + @ParameterizedTest(name = "processMain(-d {1}) should be {0}") @MethodSource("validMap") void testMainDecode(String expected, String source) { From df4bf1a4c0c159dc7cd9aeb28d0423673cdaa5da Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 6 Jan 2023 11:11:48 -0800 Subject: [PATCH 43/74] Added plusToSpace example --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 761675f..461d4f6 100644 --- a/README.md +++ b/README.md @@ -36,11 +36,12 @@ compared to other solutions like the standard `URLEncoder` in the JDK or ```java UrlEncoder.encode("a test &"); // -> "a%20test%20%26" UrlEncoder.encode("%#okékÉȢ smile!😁"); // -> "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81" -UrlEncoder.encode("?test=a test", "?="); // -> ?test=a%20test -UrlEncoder.encode("foo bar", true); // -> foo+bar (encode space to +) +UrlEncoder.encode("?test=a test", "?="); // -> "?test=a%20test" +UrlEncoder.encode("foo bar", true); // -> "foo+bar" (encode space to +) UrlEncoder.decode("a%20test%20%26"); // -> "a test &" UrlEncoder.decode("%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"); // -> "%#okékÉȢ smile!😁" +UrlEncoder.decode("foot+bar", true); // -> "foo bar" (decode + to space) ``` ## Gradle, Maven, etc. From f075688dddfc8264fc5207b58d5866391405ee4d Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 6 Jan 2023 14:28:30 -0500 Subject: [PATCH 44/74] Typo fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 461d4f6..c44050d 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ UrlEncoder.encode("foo bar", true); // -> "foo+bar" (encode space to +) UrlEncoder.decode("a%20test%20%26"); // -> "a test &" UrlEncoder.decode("%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"); // -> "%#okékÉȢ smile!😁" -UrlEncoder.decode("foot+bar", true); // -> "foo bar" (decode + to space) +UrlEncoder.decode("foo+bar", true); // -> "foo bar" (decode + to space) ``` ## Gradle, Maven, etc. From 35ff42a5c848ed1b9b7a227de313300ca0a04619 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 6 Jan 2023 22:07:39 -0500 Subject: [PATCH 45/74] Updated version to 1.3.0 --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index da6085c..69f1f4a 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } group = "com.uwyn" -version = "1.2.1-SNAPSHOT" +version = "1.3.0" val mavenName = "UrlEncoder" val javaMainClass = "$group.${rootProject.name}.$mavenName" From c4fb56ba6de83ef67e1d51d3d9e3a09874891200 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 6 Jan 2023 22:11:30 -0500 Subject: [PATCH 46/74] Updated version to 1.3.1-SNAPSHOT --- lib/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 69f1f4a..dedb3a2 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -13,7 +13,7 @@ plugins { } group = "com.uwyn" -version = "1.3.0" +version = "1.3.1-SNAPSHOT" val mavenName = "UrlEncoder" val javaMainClass = "$group.${rootProject.name}.$mavenName" From 62f9d7e46a929e20bdd2be7fedba922ce56dfb92 Mon Sep 17 00:00:00 2001 From: Mark Derricutt Date: Sat, 7 Jan 2023 22:31:07 +1300 Subject: [PATCH 47/74] Update README.md Add badge reference for Java 11+ requirement. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c44050d..aa8d48d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Java](https://img.shields.io/badge/java-11%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html) [![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 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) From cdad2dd1455c87ff75d6c5add5b90aa581f502bf Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 10 Jan 2023 01:57:33 -0800 Subject: [PATCH 48/74] Minor cleanup --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index aa8d48d..ef13b05 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-11%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html) -[![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/) +[![Nexus Snapshot](https://img.shields.io/nexus/s/com.uwyn/urlencoder?label=snapshot&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 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) @@ -104,28 +104,28 @@ Apart for being quite inefficient, some URL components encoded with `URLEncoder. For example, a simply search query such as: -```kotlin -var u = URLEncoder.encode("foo + bar", StandardCharsets.UTF_8); +```java +var u = URLEncoder.encode("foo +bar", StandardCharsets.UTF_8); ``` would be encoded as: ``` -foo+%28+bar +foo+%2Bbar ``` Trying to decode it with [Spring](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/UriUtils.html#decode(java.lang.String,java.lang.String)), for example: -```kotlin +```java UriUtils.decode(u, StandardCharsets.UTF_8)); ``` would return: ``` -foo+++bar +foo++bar ``` Unfortunately, decoding with [Uri.decode](https://developer.android.com/reference/android/net/Uri#decode(java.lang.String)) on Android, [decodeURI](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI) in Javascript, etc. would yield the exact same result. -![URLEncoder](https://live.staticflickr.com/65535/52607534147_dee4a5a390_c.jpg) +![URLEncoder](https://live.staticflickr.com/65535/52607534147_6197b42666_z.jpg) From 4afb8ab50f5bb285d88d8370d7e8e87815e73069 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 1 Feb 2023 00:28:48 -0800 Subject: [PATCH 49/74] Updated workflow to latest actions --- .github/workflows/gradle.yml | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index e74b032..5b579c2 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -1,6 +1,6 @@ name: gradle-ci -on: [push, pull_request, workflow_dispatch] +on: [ push, pull_request, workflow_dispatch ] jobs: build-gradle-project: @@ -11,17 +11,17 @@ jobs: SONAR_JDK: "11" strategy: - matrix: - java-version: [ 11, 17, 19 ] + matrix: + java-version: [ 11, 17, 19 ] steps: - name: Checkout source repository - uses: actions/checkout@v3 + - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: ${{ matrix.java-version }} @@ -31,24 +31,16 @@ jobs: - name: Cache SonarCloud packages if: matrix.java-version == env.SONAR_JDK - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - - - name: Cache Gradle packages - uses: actions/cache@v2 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ matrix.java-version }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle-${{ matrix.java-version }}- - +w - name: Test with Gradle - run: ./gradlew build check --stacktrace -PtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} + uses: gradle/gradle-build-action@v2 + with: + arguments: build check --stacktrace -PtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} - name: SonarCloud if: success() && matrix.java-version == env.SONAR_JDK @@ -56,8 +48,3 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: ./gradlew jacocoTestReport sonar --info - - - name: Cleanup Gradle Cache - run: | - rm -f ~/.gradle/caches/modules-2/modules-2.lock - rm -f ~/.gradle/caches/modules-2/gc.properties \ No newline at end of file From 3f3447a48b4059bd74b0391e5d37ac71a675f9d6 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 1 Feb 2023 00:31:21 -0800 Subject: [PATCH 50/74] Fixed dangling typo --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 5b579c2..c8e45bd 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -36,7 +36,7 @@ jobs: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar -w + - name: Test with Gradle uses: gradle/gradle-build-action@v2 with: From 626e20d0303809d95c8b049d7558c492bb8c4e3c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 1 Feb 2023 00:40:04 -0800 Subject: [PATCH 51/74] Fixed incorrect yaml --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index c8e45bd..245463a 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout source repository - - uses: actions/checkout@v3 + uses: actions/checkout@v3 with: fetch-depth: 0 From 0031864b7670e1f6c4c70d042053d7a02133be3d Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 7 Mar 2023 19:38:49 -0500 Subject: [PATCH 52/74] Upgraded Gradle to 8.0.2 --- gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 61574 bytes gradle/wrapper/gradle-wrapper.properties | 3 ++- gradlew | 12 ++++++++---- gradlew.bat | 1 + 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832f090a2944b7473328c07c9755baa3196..943f0cbfa754578e88a3dae77fce6e3dea56edbf 100644 GIT binary patch delta 36524 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%0DGK?7GHTj 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 VwlMN}`%er%aGR6olj~j${vQ;P=LY}) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 070cb70..bdc9a83 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index a69d9cb..65dcd68 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac diff --git a/gradlew.bat b/gradlew.bat index f127cfd..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% From af154ed6038d2f95cd905587093f0a24f9194980 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 7 Mar 2023 19:42:36 -0500 Subject: [PATCH 53/74] Disable JDK 11 tests --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 245463a..6563b12 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - java-version: [ 11, 17, 19 ] + java-version: [ 17, 19 ] steps: - name: Checkout source repository From baa1784ca1acc338554b7a7181060673fa566082 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 7 Mar 2023 19:56:13 -0500 Subject: [PATCH 54/74] Upgraded SonarQube Gradle plugin --- .github/workflows/gradle.yml | 2 +- lib/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 6563b12..245463a 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - java-version: [ 17, 19 ] + java-version: [ 11, 17, 19 ] steps: - name: Checkout source repository diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index dedb3a2..de7f9b0 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -9,7 +9,7 @@ plugins { `maven-publish` signing jacoco - id("org.sonarqube") version "3.5.0.2730" + id("org.sonarqube") version "4.0.0.2929" } group = "com.uwyn" From 6f8fc8df36ed7a5842d6f97cf976a016fd55377a Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 4 Apr 2023 19:49:20 -0400 Subject: [PATCH 55/74] Migrated to bld --- .gitattributes | 9 - .github/workflows/bld.yml | 29 +++ .github/workflows/gradle.yml | 50 ---- .gitignore | 54 +++- .idea/.gitignore | 8 + .idea/app.iml | 28 ++ .idea/bld.iml | 14 + .idea/libraries/bld.xml | 17 ++ .idea/libraries/compile.xml | 13 + .idea/libraries/runtime.xml | 13 + .idea/libraries/test.xml | 13 + .idea/misc.xml | 9 + .idea/modules.xml | 9 + .idea/runConfigurations/Run Main.xml | 9 + .idea/runConfigurations/Run Tests.xml | 13 + .vscode/launch.json | 24 ++ .vscode/settings.json | 15 ++ bld | 2 + bld.bat | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 6 - gradlew | 244 ------------------ gradlew.bat | 92 ------- lib/bld/bld-wrapper.jar | Bin 0 -> 24362 bytes lib/bld/bld-wrapper.properties | 6 + lib/build.gradle.kts | 160 ------------ settings.gradle.kts | 11 - .../com/uwyn/urlencoder/UrlEncoderBuild.java | 70 +++++ .../java/com/uwyn/urlencoder/UrlEncoder.java | 0 .../com/uwyn/urlencoder/UrlEncoderTest.java | 0 30 files changed, 349 insertions(+), 573 deletions(-) delete mode 100644 .gitattributes create mode 100644 .github/workflows/bld.yml delete mode 100644 .github/workflows/gradle.yml create mode 100644 .idea/.gitignore create mode 100644 .idea/app.iml create mode 100644 .idea/bld.iml create mode 100644 .idea/libraries/bld.xml create mode 100644 .idea/libraries/compile.xml create mode 100644 .idea/libraries/runtime.xml create mode 100644 .idea/libraries/test.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations/Run Main.xml create mode 100644 .idea/runConfigurations/Run Tests.xml create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100755 bld create mode 100644 bld.bat delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties delete mode 100755 gradlew delete mode 100644 gradlew.bat create mode 100644 lib/bld/bld-wrapper.jar create mode 100644 lib/bld/bld-wrapper.properties delete mode 100644 lib/build.gradle.kts delete mode 100644 settings.gradle.kts create mode 100644 src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java rename {lib/src => src}/main/java/com/uwyn/urlencoder/UrlEncoder.java (100%) rename {lib/src => src}/test/java/com/uwyn/urlencoder/UrlEncoderTest.java (100%) diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 097f9f9..0000000 --- a/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# Linux start script should use lf -/gradlew text eol=lf - -# These are Windows script files and should use crlf -*.bat text eol=crlf - diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml new file mode 100644 index 0000000..8ad00fb --- /dev/null +++ b/.github/workflows/bld.yml @@ -0,0 +1,29 @@ +name: bld-ci + +on: [ push, pull_request, workflow_dispatch ] + +jobs: + build-gradle-project: + runs-on: ubuntu-latest + + strategy: + matrix: + java-version: [ 11, 17, 19, 20 ] + + steps: + - name: Checkout source repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: ${{ matrix.java-version }} + + - name: Run tests + run: >- + ./bld download compile test + -DtestsBadgeUrl=https://rife2.com/tests-badge/update/com.uwyn/urlencoder + -DtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} \ No newline at end of file diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml deleted file mode 100644 index 245463a..0000000 --- a/.github/workflows/gradle.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: gradle-ci - -on: [ push, pull_request, workflow_dispatch ] - -jobs: - build-gradle-project: - runs-on: ubuntu-latest - - env: - GRADLE_OPTS: "-Dorg.gradle.jvmargs=-XX:MaxMetaspaceSize=512m" - SONAR_JDK: "11" - - strategy: - matrix: - java-version: [ 11, 17, 19 ] - - steps: - - name: Checkout source repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: ${{ matrix.java-version }} - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Cache SonarCloud packages - if: matrix.java-version == env.SONAR_JDK - uses: actions/cache@v3 - with: - path: ~/.sonar/cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - - - name: Test with Gradle - uses: gradle/gradle-build-action@v2 - with: - arguments: build check --stacktrace -PtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} - - - name: SonarCloud - if: success() && matrix.java-version == env.SONAR_JDK - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: ./gradlew jacocoTestReport sonar --info diff --git a/.gitignore b/.gitignore index d49a8b5..a63b224 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,55 @@ .gradle +.DS_Store build -.idea +lib/bld/** +lib/compile/** +lib/runtime/** +lib/standalone/** +lib/test/** +!bld-wrapper.jar +!bld-wrapper.properties + +# IDEA ignores + +# User-specific +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Editor-based Rest Client +.idea/httpRequests \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/app.iml b/.idea/app.iml new file mode 100644 index 0000000..93f59aa --- /dev/null +++ b/.idea/app.iml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/bld.iml b/.idea/bld.iml new file mode 100644 index 0000000..e63e11e --- /dev/null +++ b/.idea/bld.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml new file mode 100644 index 0000000..e1e183f --- /dev/null +++ b/.idea/libraries/bld.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/compile.xml b/.idea/libraries/compile.xml new file mode 100644 index 0000000..9bd86aa --- /dev/null +++ b/.idea/libraries/compile.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/runtime.xml b/.idea/libraries/runtime.xml new file mode 100644 index 0000000..81feb0b --- /dev/null +++ b/.idea/libraries/runtime.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/test.xml b/.idea/libraries/test.xml new file mode 100644 index 0000000..13b6513 --- /dev/null +++ b/.idea/libraries/test.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..542659b --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..55adcb9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/Run Main.xml b/.idea/runConfigurations/Run Main.xml new file mode 100644 index 0000000..7b3a212 --- /dev/null +++ b/.idea/runConfigurations/Run Main.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/Run Tests.xml b/.idea/runConfigurations/Run Tests.xml new file mode 100644 index 0000000..bee07c9 --- /dev/null +++ b/.idea/runConfigurations/Run Tests.xml @@ -0,0 +1,13 @@ + + + +

+ + + + \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..77fa6eb --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Run Main", + "request": "launch", + "mainClass": "com.uwyn.urlencoder.UrlEncoderMain" + }, + { + "type": "java", + "name": "Run Tests", + "request": "launch", + "mainClass": "org.junit.platform.console.ConsoleLauncher", + "args": [ + "--details=verbose", + "--scan-classpath", + "--disable-banner", + "--disable-ansi-colors", + "--exclude-engine=junit-platform-suite", + "--exclude-engine=junit-vintage"] + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8a2a643 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,15 @@ +{ + "java.project.sourcePaths": [ + "src/main/java", + "src/main/resources", + "src/test/java", + "src/bld/java" + ], + "java.configuration.updateBuildConfiguration": "automatic", + "java.project.referencedLibraries": [ + "${HOME}/.rife2/dist/rife2-1.5.17.jar", + "lib/compile/*.jar", + "lib/runtime/*.jar", + "lib/test/*.jar" + ] +} diff --git a/bld b/bld new file mode 100755 index 0000000..1de4efa --- /dev/null +++ b/bld @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +java -jar "$(dirname "$0")/lib/bld/bld-wrapper.jar" "$0" --build com.uwyn.urlencoder.UrlEncoderBuild "$@" \ No newline at end of file diff --git a/bld.bat b/bld.bat new file mode 100644 index 0000000..c112d53 --- /dev/null +++ b/bld.bat @@ -0,0 +1,4 @@ +@echo off +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +java -jar "%DIRNAME%/lib/bld/bld-wrapper.jar" "%0" --build com.uwyn.urlencoder.UrlEncoderBuild %* \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61574 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 ScNgau(U?ep-K_E5zy1%ZQTdPn diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index bdc9a83..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip -networkTimeout=10000 -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew deleted file mode 100755 index 65dcd68..0000000 --- a/gradlew +++ /dev/null @@ -1,244 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index 93e3f59..0000000 --- a/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2ef270fbc8802927ee4a8c791f943e530ae3c4ab GIT binary patch literal 24362 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 = HttpClient.newHttpClient() - .send( - HttpRequest.newBuilder() - .uri( - URI( - "https://rife2.com/tests-badge/update/com.uwyn/urlencoder?" + - "apiKey=$apiKey&" + - "passed=$passed&" + - "failed=$failed&" + - "skipped=$skipped" - ) - ) - .POST(HttpRequest.BodyPublishers.noBody()) - .build(), HttpResponse.BodyHandlers.ofString() - ) - println("RESPONSE: " + response.statusCode()) - println(response.body()) - } - } - } - }) - } - - jacocoTestReport { - reports { - xml.required.set(true) - } - } -} - -publishing { - publications { - create("mavenJava") { - artifactId = rootProject.name - from(components["java"]) - pom { - name.set(mavenName) - description.set("A simple defensive library to encode/decode URL components") - url.set("https://github.com/gbevin/urlencoder") - licenses { - license { - name.set("The Apache License, Version 2.0") - url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") - } - } - developers { - developer { - id.set("gbevin") - name.set("Geert Bevin") - email.set("gbevin@uwyn.com") - url.set("https://github.com/gbevin") - } - developer { - id.set("ethauvin") - name.set("Erik C. Thauvin") - email.set("erik@thauvin.net") - url.set("https://erik.thauvin.net/") - } - } - scm { - connection.set("scm:git:https://github.com/gbevin/urlencoder.git") - developerConnection.set("scm:git:git@github.com:gbevin/urlencoder.git") - url.set("https://github.com/gbevin/urlencoder") - } - } - repositories { - maven { - credentials { - username = project.properties["ossrhUsername"].toString() - password = project.properties["ossrhPassword"].toString() - } - val releasesRepoUrl = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") - val snapshotsRepoUrl = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/") - url = if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl - } - } - } - } -} - -signing { - sign(publishing.publications["mavenJava"]) -} diff --git a/settings.gradle.kts b/settings.gradle.kts deleted file mode 100644 index 6887564..0000000 --- a/settings.gradle.kts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user manual at https://docs.gradle.org/7.5.1/userguide/multi_project_builds.html - */ - -rootProject.name = "urlencoder" -include("lib") diff --git a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java new file mode 100644 index 0000000..98915b8 --- /dev/null +++ b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java @@ -0,0 +1,70 @@ +package com.uwyn.urlencoder; + +import rife.bld.Project; +import rife.bld.extension.TestsBadgeOperation; +import rife.bld.publish.PublishDeveloper; +import rife.bld.publish.PublishInfo; +import rife.bld.publish.PublishLicense; +import rife.bld.publish.PublishScm; + +import java.util.List; + +import static rife.bld.dependencies.Repository.*; +import static rife.bld.dependencies.Scope.*; + +public class UrlEncoderBuild extends Project { + public UrlEncoderBuild() { + pkg = "com.uwyn.urlencoder"; + name = "UrlEncoder"; + mainClass = "com.uwyn.urlencoder.UrlEncoder"; + version = version(1,3,1,"SNAPSHOT"); + + publishRepository = version.isSnapshot() ? repository("sonatype-snapshots") : repository("sonatype-releases"); + publishInfo = new PublishInfo() + .groupId("com.uwyn") + .artifactId("UrlEncoder") + .description("A simple defensive library to encode/decode URL components.") + .url("https://github.com/rife2/tests-badge") + .developer(new PublishDeveloper() + .id("gbevin") + .name("Geert Bevin") + .email("gbevin@uwyn.com") + .url("https://github.com/gbevin")) + .developer(new PublishDeveloper() + .id("ethauvin") + .name("Erik C. Thauvin") + .email("erik@thauvin.net") + .url("https://erik.thauvin.net/")) + .license(new PublishLicense() + .name("The Apache License, Version 2.0") + .url("https://www.apache.org/licenses/LICENSE-2.0.txt")) + .scm(new PublishScm() + .connection("scm:git:https://github.com/gbevin/urlencoder.git") + .developerConnection("scm:git:git@github.com:gbevin/urlencoder.git") + .url("https://github.com/gbevin/urlencoder")) + .signKey(property("sign.key")) + .signPassphrase(property("sign.passphrase")); + + javaRelease = 11; + downloadSources = true; + autoDownloadPurge = true; + repositories = List.of(MAVEN_CENTRAL, RIFE2); + scope(test) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5,9,2))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1,9,2))); + } + + private final TestsBadgeOperation testsBadgeOperation = new TestsBadgeOperation(); + + public void test() + throws Exception { + testsBadgeOperation.executeOnce(() -> testsBadgeOperation + .url(property("testsBadgeUrl")) + .apiKey(property("testsBadgeApiKey")) + .fromProject(this)); + } + + public static void main(String[] args) { + new UrlEncoderBuild().start(args); + } +} \ No newline at end of file diff --git a/lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java b/src/main/java/com/uwyn/urlencoder/UrlEncoder.java similarity index 100% rename from lib/src/main/java/com/uwyn/urlencoder/UrlEncoder.java rename to src/main/java/com/uwyn/urlencoder/UrlEncoder.java diff --git a/lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java b/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java similarity index 100% rename from lib/src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java rename to src/test/java/com/uwyn/urlencoder/UrlEncoderTest.java From 27f12c169bfd48fc1c33e7c6a68f6f249a46057d Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 4 Apr 2023 19:50:45 -0400 Subject: [PATCH 56/74] Disable JDK 11 tests --- .github/workflows/bld.yml | 2 +- .idea/vcs.xml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .idea/vcs.xml diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 8ad00fb..a2d12cb 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [ 11, 17, 19, 20 ] + java-version: [ 17, 19, 20 ] steps: - name: Checkout source repository diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 96d38ac40e1bbce1eca28066eb5847e2995768fe Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 4 Apr 2023 19:55:21 -0400 Subject: [PATCH 57/74] Updated tests badge extension --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 0614e14..2cad6dd 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-tests-badge:0.9.3 +bld.extensions=com.uwyn.rife2:bld-tests-badge:0.9.4 bld.repositories=MAVEN_CENTRAL,RIFE2 rife2.downloadLocation= rife2.version=1.5.17 From 692aa5fbab4477480aac31188f05efb0d8b2eb1b Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 4 Apr 2023 19:57:06 -0400 Subject: [PATCH 58/74] Updated artifact ID --- src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java index 98915b8..b767f9d 100644 --- a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java +++ b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java @@ -22,7 +22,7 @@ public class UrlEncoderBuild extends Project { publishRepository = version.isSnapshot() ? repository("sonatype-snapshots") : repository("sonatype-releases"); publishInfo = new PublishInfo() .groupId("com.uwyn") - .artifactId("UrlEncoder") + .artifactId("urlencoder") .description("A simple defensive library to encode/decode URL components.") .url("https://github.com/rife2/tests-badge") .developer(new PublishDeveloper() From f27d846afdfd103f6fa175983f5c371b7ac494d0 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 4 Apr 2023 19:58:47 -0400 Subject: [PATCH 59/74] Updated version to 1.3.1 --- src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java index b767f9d..9b8041d 100644 --- a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java +++ b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java @@ -17,7 +17,7 @@ public class UrlEncoderBuild extends Project { pkg = "com.uwyn.urlencoder"; name = "UrlEncoder"; mainClass = "com.uwyn.urlencoder.UrlEncoder"; - version = version(1,3,1,"SNAPSHOT"); + version = version(1,3,1); publishRepository = version.isSnapshot() ? repository("sonatype-snapshots") : repository("sonatype-releases"); publishInfo = new PublishInfo() From ea8fd08ffce727a37fcd9c5601c10ee7c18bb364 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 4 Apr 2023 20:04:05 -0400 Subject: [PATCH 60/74] Updated readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ef13b05..a7cd70d 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@ [![Nexus Snapshot](https://img.shields.io/nexus/s/com.uwyn/urlencoder?label=snapshot&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 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) +[![GitHub CI](https://github.com/gbevin/urlencoder/actions/workflows/bld.yml/badge.svg)](https://github.com/gbevin/urlencoder/actions/workflows/bld.yml) [![Tests](https://rife2.com/tests-badge/badge/com.uwyn/urlencoder)](https://github.com/gbevin/urlencoder/actions/workflows/gradle.yml) # URL Encoder for Java From bc03fb03ab3e9a6693ff7be1dbc0e1bc40bce792 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Tue, 4 Apr 2023 20:09:12 -0400 Subject: [PATCH 61/74] Project file tweaks --- .idea/runConfigurations/Run Main.xml | 2 +- .vscode/launch.json | 2 +- .vscode/settings.json | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.idea/runConfigurations/Run Main.xml b/.idea/runConfigurations/Run Main.xml index 7b3a212..bee13f8 100644 --- a/.idea/runConfigurations/Run Main.xml +++ b/.idea/runConfigurations/Run Main.xml @@ -1,6 +1,6 @@ - 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 QWICQTGno7iIt79L2a7^gi2wiq delta 22213 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

  • x-9~7 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 t*fQYMqHjPJ9W|t~*s&0tTmNhEe*jkZXq^B6 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 2cad6dd..04ac087 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-tests-badge:0.9.4 -bld.repositories=MAVEN_CENTRAL,RIFE2 +bld.extensions=com.uwyn.rife2:bld-tests-badge:1.0.0 +bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES rife2.downloadLocation= -rife2.version=1.5.17 +rife2.version=1.5.18 diff --git a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java index 20c3723..d117919 100644 --- a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java +++ b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java @@ -20,41 +20,46 @@ public class UrlEncoderBuild extends Project { pkg = "com.uwyn.urlencoder"; name = "UrlEncoder"; mainClass = "com.uwyn.urlencoder.UrlEncoder"; - version = version(1,3,2); - - publishRepository = version.isSnapshot() ? repository("sonatype-snapshots") : repository("sonatype-releases"); - publishInfo = new PublishInfo() - .groupId("com.uwyn") - .artifactId("urlencoder") - .description("A simple defensive library to encode/decode URL components.") - .url("https://github.com/rife2/tests-badge") - .developer(new PublishDeveloper() - .id("gbevin") - .name("Geert Bevin") - .email("gbevin@uwyn.com") - .url("https://github.com/gbevin")) - .developer(new PublishDeveloper() - .id("ethauvin") - .name("Erik C. Thauvin") - .email("erik@thauvin.net") - .url("https://erik.thauvin.net/")) - .license(new PublishLicense() - .name("The Apache License, Version 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0.txt")) - .scm(new PublishScm() - .connection("scm:git:https://github.com/gbevin/urlencoder.git") - .developerConnection("scm:git:git@github.com:gbevin/urlencoder.git") - .url("https://github.com/gbevin/urlencoder")) - .signKey(property("sign.key")) - .signPassphrase(property("sign.passphrase")); + version = version(1,3,3); javaRelease = 11; downloadSources = true; autoDownloadPurge = true; - repositories = List.of(MAVEN_CENTRAL, RIFE2); + + repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5,9,2))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1,9,2))); + + jarOperation() + .manifestAttribute(Attributes.Name.MAIN_CLASS, mainClass()); + + publishOperation() + .repository(version.isSnapshot() ? repository("sonatype-snapshots") : repository("sonatype-releases")) + .info() + .groupId("com.uwyn") + .artifactId("urlencoder") + .description("A simple defensive library to encode/decode URL components.") + .url("https://github.com/rife2/tests-badge") + .developer(new PublishDeveloper() + .id("gbevin") + .name("Geert Bevin") + .email("gbevin@uwyn.com") + .url("https://github.com/gbevin")) + .developer(new PublishDeveloper() + .id("ethauvin") + .name("Erik C. Thauvin") + .email("erik@thauvin.net") + .url("https://erik.thauvin.net/")) + .license(new PublishLicense() + .name("The Apache License, Version 2.0") + .url("https://www.apache.org/licenses/LICENSE-2.0.txt")) + .scm(new PublishScm() + .connection("scm:git:https://github.com/gbevin/urlencoder.git") + .developerConnection("scm:git:git@github.com:gbevin/urlencoder.git") + .url("https://github.com/gbevin/urlencoder")) + .signKey(property("sign.key")) + .signPassphrase(property("sign.passphrase")); } private final TestsBadgeOperation testsBadgeOperation = new TestsBadgeOperation(); @@ -66,15 +71,6 @@ public class UrlEncoderBuild extends Project { .fromProject(this)); } - private final JarOperation jarOperation = new JarOperation(); - public void jar() - throws Exception { - compile(); - jarOperation.executeOnce(() -> jarOperation - .fromProject(this) - .manifestAttributes(Map.of(Attributes.Name.MAIN_CLASS, mainClass()))); - } - public static void main(String[] args) { new UrlEncoderBuild().start(args); } From 23713874a05c1aa2e1e973875b6f2949249d15a5 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sat, 8 Apr 2023 13:08:50 -0400 Subject: [PATCH 64/74] Updated bld-tests-badge --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 04ac087..f3f2d72 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-tests-badge:1.0.0 +bld.extensions=com.uwyn.rife2:bld-tests-badge:1.1.0 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES rife2.downloadLocation= rife2.version=1.5.18 From 678c3fd356446d3dc83fab41f5ae7a685bbe61e9 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Mon, 10 Apr 2023 08:05:41 -0400 Subject: [PATCH 65/74] Updated to bld 1.5.19 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- lib/bld/bld-wrapper.jar | Bin 24388 -> 25100 bytes lib/bld/bld-wrapper.properties | 2 +- .../com/uwyn/urlencoder/UrlEncoderBuild.java | 3 +-- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 1bc7dda..7aa10eb 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,11 +2,11 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 2367299..d11037e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.rife2/dist/rife2-1.5.18.jar", + "${HOME}/.rife2/dist/rife2-1.5.19.jar", "lib/bld/*.jar", "lib/compile/*.jar", "lib/runtime/*.jar", diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 590d8d3c7d00dbaff2c3b440740a53b0aaf57783..6510a090117d44931d7f5f0639ac14ab239c4e78 100644 GIT binary patch delta 11944 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%0DMu!X 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 D@7nu? delta 11202 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 As{jB1 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index f3f2d72..eeab8d6 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -3,4 +3,4 @@ bld.downloadExtensionSources=true bld.extensions=com.uwyn.rife2:bld-tests-badge:1.1.0 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES rife2.downloadLocation= -rife2.version=1.5.18 +rife2.version=1.5.19 diff --git a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java index d117919..f7d4ec0 100644 --- a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java +++ b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java @@ -9,7 +9,6 @@ import rife.bld.publish.PublishLicense; import rife.bld.publish.PublishScm; import java.util.List; -import java.util.Map; import java.util.jar.Attributes; import static rife.bld.dependencies.Repository.*; @@ -20,7 +19,7 @@ public class UrlEncoderBuild extends Project { pkg = "com.uwyn.urlencoder"; name = "UrlEncoder"; mainClass = "com.uwyn.urlencoder.UrlEncoder"; - version = version(1,3,3); + version = version(1,3,4); javaRelease = 11; downloadSources = true; From 1072c1a14d0783daf45553ccca87ff2a3f909562 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 14 Apr 2023 21:29:01 -0400 Subject: [PATCH 66/74] Updated to bld 1.5.20 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- lib/bld/bld-wrapper.jar | Bin 25100 -> 25100 bytes lib/bld/bld-wrapper.properties | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 7aa10eb..3409629 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,11 +2,11 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index d11037e..38f5e5f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.rife2/dist/rife2-1.5.19.jar", + "${HOME}/.rife2/dist/rife2-1.5.20.jar", "lib/bld/*.jar", "lib/compile/*.jar", "lib/runtime/*.jar", diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 6510a090117d44931d7f5f0639ac14ab239c4e78..05d9dc59ae8cbc74996488538dc583da8ea6b72d 100644 GIT binary patch delta 151 zcmeAJzuf%P{z!2cg&XM(amfhqF@gg7vlb^>sgK6CaPcU7X5CWzzB)EcUiNrXF Pc%nZCP<Jzuf)BDg(1M3or9MnJ7@BRcoC3-$ Date: Mon, 17 Apr 2023 19:47:06 -0400 Subject: [PATCH 67/74] Updated to bld 1.5.22 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- lib/bld/bld-wrapper.jar | Bin 25100 -> 25069 bytes lib/bld/bld-wrapper.properties | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 3409629..a71dcdf 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,11 +2,11 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 38f5e5f..0024985 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.rife2/dist/rife2-1.5.20.jar", + "${HOME}/.rife2/dist/rife2-1.5.22.jar", "lib/bld/*.jar", "lib/compile/*.jar", "lib/runtime/*.jar", diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 05d9dc59ae8cbc74996488538dc583da8ea6b72d..0d83893340a7fa447bf4779dea088dd6324eb034 100644 GIT binary patch delta 22928 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 delta 22949 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 QZhFdhTXw>E>wm@m3-UR+OaK4? diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index d6d465f..6411e1f 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -3,4 +3,4 @@ bld.downloadExtensionSources=true bld.extensions=com.uwyn.rife2:bld-tests-badge:1.2.0 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES rife2.downloadLocation= -rife2.version=1.5.20 +rife2.version=1.5.22 From fa63916eeb4e3fbbb5913aa911bfa51e0f2f33cb Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 12 May 2023 17:31:49 -0400 Subject: [PATCH 68/74] Updated to bld 1.7.0 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- lib/bld/bld-wrapper.jar | Bin 25069 -> 27258 bytes lib/bld/bld-wrapper.properties | 6 +++--- .../com/uwyn/urlencoder/UrlEncoderBuild.java | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index a71dcdf..f07cc1c 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,11 +2,11 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 0024985..72d3d21 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.rife2/dist/rife2-1.5.22.jar", + "${HOME}bld-1.7.0.jar", "lib/bld/*.jar", "lib/compile/*.jar", "lib/runtime/*.jar", diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 0d83893340a7fa447bf4779dea088dd6324eb034..421e02b0639e3af6ae8b8435bd1818ed3a8853c8 100644 GIT binary patch delta 25256 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 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 6411e1f..f1c77d9 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-tests-badge:1.2.0 +bld.extensions=com.uwyn.rife2:bld-tests-badge:1.4.0 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES -rife2.downloadLocation= -rife2.version=1.5.22 +bld.downloadLocation= +bld.version=1.7.0 diff --git a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java index f7d4ec0..f895986 100644 --- a/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java +++ b/src/bld/java/com/uwyn/urlencoder/UrlEncoderBuild.java @@ -27,8 +27,8 @@ public class UrlEncoderBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5,9,2))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1,9,2))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5,9,3))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1,9,3))); jarOperation() .manifestAttribute(Attributes.Name.MAIN_CLASS, mainClass()); From eae1956ff232373b976b6b8c09b4aa6934dfb1f2 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 21 Sep 2023 19:31:11 -0700 Subject: [PATCH 69/74] Update README.md Added Kotlin Multiplatform --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7cd70d..87c48ce 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A simple defensive library to encode/decode URL components. This library was extracted from the [RIFE2 Web Application Framework](https://rife2.com). -A Kotlin version can also be found at [https://github.com/ethauvin/urlencoder](https://github.com/ethauvin/urlencoder). +A Kotlin Multiplatform version can also be found at [https://github.com/ethauvin/urlencoder](https://github.com/ethauvin/urlencoder). The rules are determined by combining the unreserved character set from [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#page-13) with the From 297475c28a416374e541d970cef873d5e9a157f4 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 1 Nov 2023 00:55:04 -0700 Subject: [PATCH 70/74] Added java.net.URLEncoder deprecation reference --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 87c48ce..44e0bdd 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ java -jar lib/build/libs/urlencoder-*.jar -d "a%20test%20%26" # -> a test & ## Why not simply use `java.net.URLEncoder`? -Apart for being quite inefficient, some URL components encoded with `URLEncoder.encode` might not be able to be properly decoded. +Apart for being quite inefficient and [deprecated](https://inside.java/2023/02/15/quality-heads-up/) as of JDK 20, some URL components encoded with `URLEncoder.encode` might not be able to be properly decoded. For example, a simply search query such as: From 4f5033862cb1657ab71b9e7efddff7109e60ff0a Mon Sep 17 00:00:00 2001 From: Ethan McCue Date: Fri, 17 Nov 2023 11:25:39 -0500 Subject: [PATCH 71/74] Create module-info.java --- src/main/java/module-info.java | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/java/module-info.java diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..a0a140e --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,3 @@ +module com.uwyn.urlencoder { + exports com.uwyn.urlencoder; +} From 4821e236ad7d5e9743d6e23e2dec8d70ba114cc5 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 17 Nov 2023 08:56:07 -0800 Subject: [PATCH 72/74] Removed JDK 20 deprecation reference --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44e0bdd..87c48ce 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ java -jar lib/build/libs/urlencoder-*.jar -d "a%20test%20%26" # -> a test & ## Why not simply use `java.net.URLEncoder`? -Apart for being quite inefficient and [deprecated](https://inside.java/2023/02/15/quality-heads-up/) as of JDK 20, some URL components encoded with `URLEncoder.encode` might not be able to be properly decoded. +Apart for being quite inefficient, some URL components encoded with `URLEncoder.encode` might not be able to be properly decoded. For example, a simply search query such as: From 9d5dc90f13325c40672f9aa333489c2e46a5c51d Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Fri, 17 Nov 2023 19:08:39 -0500 Subject: [PATCH 73/74] Updated to bld 1.7.5 Updated version to 1.3.5 --- .idea/libraries/bld.xml | 4 ++-- .idea/misc.xml | 1 - lib/bld/bld-wrapper.jar | Bin 27258 -> 27321 bytes lib/bld/bld-wrapper.properties | 4 ++-- .../com/uwyn/urlencoder/UrlEncoderBuild.java | 6 +++--- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index f07cc1c..cf75013 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,11 +2,11 @@ - + - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 542659b..8678395 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - \ No newline at end of file diff --git a/.idea/libraries/test.xml b/.idea/libraries/test.xml index 13b6513..c16475a 100644 --- a/.idea/libraries/test.xml +++ b/.idea/libraries/test.xml @@ -2,12 +2,17 @@ + + + + + \ No newline at end of file diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 654ae3796d1463842221fa48db1e076e67bdfb30..56d549b5f388c56933e86958d7c182225204e3b9 100644 GIT binary patch delta 25301 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 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index a03a901..88b5a9f 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-tests-badge:1.4.5 +bld.extensions=com.uwyn.rife2:bld-tests-badge:1.4.6 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES bld.downloadLocation= -bld.version=1.7.5 +bld.version=1.8.0