Compare commits
4 commits
61137e0878
...
a689c56e1e
Author | SHA1 | Date | |
---|---|---|---|
a689c56e1e | |||
b59d01ec6d | |||
|
8890fef665 | ||
|
171570159e |
10 changed files with 237 additions and 196 deletions
|
@ -5,7 +5,7 @@ plugins {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("com.github.ben-manes:gradle-versions-plugin:0.51.0")
|
implementation("com.github.ben-manes:gradle-versions-plugin:0.51.0")
|
||||||
implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.1")
|
implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.1")
|
||||||
implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10")
|
implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.9.20")
|
||||||
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.10")
|
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23")
|
||||||
implementation("org.jetbrains.kotlinx:kover-gradle-plugin:0.7.4")
|
implementation("org.jetbrains.kotlinx:kover-gradle-plugin:0.7.4")
|
||||||
}
|
}
|
|
@ -3,7 +3,9 @@ package buildsrc.conventions.lang
|
||||||
import buildsrc.utils.Rife2TestListener
|
import buildsrc.utils.Rife2TestListener
|
||||||
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
||||||
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
||||||
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
|
||||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
||||||
|
|
||||||
|
@ -24,29 +26,21 @@ plugins {
|
||||||
kotlin {
|
kotlin {
|
||||||
//jvmToolchain(11)
|
//jvmToolchain(11)
|
||||||
|
|
||||||
targets.configureEach {
|
applyDefaultHierarchyTemplate()
|
||||||
compilations.configureEach {
|
|
||||||
kotlinOptions {
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
||||||
languageVersion = "1.6"
|
compilerOptions {
|
||||||
}
|
languageVersion = KotlinVersion.KOTLIN_1_6
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// configure all Kotlin/JVM Tests to use JUnit
|
// configure all Kotlin/JVM Tests to use JUnit
|
||||||
targets.withType<KotlinJvmTarget>().configureEach {
|
targets.withType<KotlinJvmTarget>().configureEach {
|
||||||
testRuns.configureEach {
|
testRuns.configureEach {
|
||||||
executionTask.configure {
|
executionTask.configure {
|
||||||
// useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets.configureEach {
|
|
||||||
languageSettings {
|
|
||||||
// languageVersion =
|
|
||||||
// apiVersion =
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package buildsrc.conventions.lang
|
package buildsrc.conventions.lang
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
|
||||||
|
|
||||||
/** conventions for a Kotlin/JS subproject */
|
/** conventions for a Kotlin/JS subproject */
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
|
@ -7,12 +9,38 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
targets {
|
|
||||||
js(IR) {
|
js(IR) {
|
||||||
browser()
|
browser()
|
||||||
nodejs()
|
nodejs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalWasmDsl::class)
|
||||||
|
wasmJs {
|
||||||
|
browser()
|
||||||
|
nodejs()
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalWasmDsl::class)
|
||||||
|
wasmWasi {
|
||||||
|
nodejs()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
relocateKotlinJsStore()
|
relocateKotlinJsStore()
|
||||||
|
|
||||||
|
|
||||||
|
//region FIXME: WORKAROUND https://youtrack.jetbrains.com/issue/KT-65864
|
||||||
|
rootProject.plugins.withType<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin> {
|
||||||
|
rootProject.extensions.configure<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension> {
|
||||||
|
// Use a Node.js version current enough to support Kotlin/Wasm
|
||||||
|
nodeVersion = "22.0.0-nightly2024010568c8472ed9"
|
||||||
|
logger.lifecycle("Using Node.js $nodeVersion to support Kotlin/Wasm")
|
||||||
|
nodeDownloadBaseUrl = "https://nodejs.org/download/nightly"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.tasks.withType<org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask>().configureEach {
|
||||||
|
// Prevent Yarn from complaining about newer Node.js versions.
|
||||||
|
args.add("--ignore-engines")
|
||||||
|
}
|
||||||
|
//endregion
|
||||||
|
|
|
@ -7,94 +7,26 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
|
||||||
// Native targets all extend commonMain and commonTest.
|
|
||||||
//
|
|
||||||
// Some targets (ios, tvos, watchos) are shortcuts provided by the Kotlin DSL, that
|
|
||||||
// provide additional targets, except for 'simulators' which must be defined manually.
|
|
||||||
// https://kotlinlang.org/docs/multiplatform-share-on-platforms.html#use-target-shortcuts
|
|
||||||
//
|
|
||||||
// common/
|
|
||||||
// └── native/
|
|
||||||
// ├── linuxX64
|
|
||||||
// ├── mingwX64
|
|
||||||
// ├── macosX64
|
|
||||||
// ├── macosArm64
|
|
||||||
// ├── ios/ (shortcut)
|
|
||||||
// │ ├── iosArm64
|
|
||||||
// │ ├── iosX64
|
|
||||||
// │ └── iosSimulatorArm64
|
|
||||||
// ├── tvos/ (shortcut)
|
|
||||||
// │ ├── tvosArm64
|
|
||||||
// │ ├── tvosX64
|
|
||||||
// │ └── tvosSimulatorArm64Main
|
|
||||||
// └── watchos/ (shortcut)
|
|
||||||
// ├── watchosArm32
|
|
||||||
// ├── watchosArm64
|
|
||||||
// ├── watchosX64
|
|
||||||
// └── watchosSimulatorArm64Main
|
|
||||||
|
|
||||||
linuxX64()
|
linuxX64()
|
||||||
|
|
||||||
mingwX64()
|
mingwX64()
|
||||||
|
|
||||||
|
linuxArm64()
|
||||||
|
|
||||||
macosX64()
|
macosX64()
|
||||||
macosArm64()
|
macosArm64()
|
||||||
|
|
||||||
// https://kotlinlang.org/docs/multiplatform-share-on-platforms.html#use-target-shortcuts
|
iosArm64()
|
||||||
ios() // iosArm64, iosX64
|
iosX64()
|
||||||
watchos() // watchosArm32, watchosArm64, watchosX64
|
|
||||||
tvos() // tvosArm64, tvosX64
|
|
||||||
|
|
||||||
iosSimulatorArm64()
|
iosSimulatorArm64()
|
||||||
tvosSimulatorArm64()
|
|
||||||
|
watchosArm32()
|
||||||
|
watchosArm64()
|
||||||
|
watchosX64()
|
||||||
watchosSimulatorArm64()
|
watchosSimulatorArm64()
|
||||||
|
watchosDeviceArm64()
|
||||||
|
|
||||||
@Suppress("UNUSED_VARIABLE")
|
tvosArm64()
|
||||||
sourceSets {
|
tvosX64()
|
||||||
val commonMain by getting {}
|
tvosSimulatorArm64()
|
||||||
val commonTest by getting {}
|
|
||||||
|
|
||||||
val nativeMain by creating { dependsOn(commonMain) }
|
|
||||||
val nativeTest by creating { dependsOn(commonTest) }
|
|
||||||
|
|
||||||
// Linux
|
|
||||||
val linuxX64Main by getting { dependsOn(nativeMain) }
|
|
||||||
val linuxX64Test by getting { dependsOn(nativeTest) }
|
|
||||||
|
|
||||||
// Windows - MinGW
|
|
||||||
val mingwX64Main by getting { dependsOn(nativeMain) }
|
|
||||||
val mingwX64Test by getting { dependsOn(nativeTest) }
|
|
||||||
|
|
||||||
// Apple - macOS
|
|
||||||
val macosArm64Main by getting { dependsOn(nativeMain) }
|
|
||||||
val macosArm64Test by getting { dependsOn(nativeTest) }
|
|
||||||
|
|
||||||
val macosX64Main by getting { dependsOn(nativeMain) }
|
|
||||||
val macosX64Test by getting { dependsOn(nativeTest) }
|
|
||||||
|
|
||||||
// Apple - iOS
|
|
||||||
val iosMain by getting { dependsOn(nativeMain) }
|
|
||||||
val iosTest by getting { dependsOn(nativeTest) }
|
|
||||||
|
|
||||||
val iosSimulatorArm64Main by getting { dependsOn(iosMain) }
|
|
||||||
// val iosSimulatorArm64Test by getting { dependsOn(iosTest) }
|
|
||||||
|
|
||||||
// // Apple - tvOS
|
|
||||||
// val tvosMain by getting { dependsOn(nativeMain) }
|
|
||||||
// val tvosTest by getting { dependsOn(nativeTest) }
|
|
||||||
|
|
||||||
// val tvosSimulatorArm64Main by getting { dependsOn(tvosMain) }
|
|
||||||
// val tvosSimulatorArm64Test by getting { dependsOn(tvosTest) }
|
|
||||||
|
|
||||||
// // Apple - watchOS
|
|
||||||
// val watchosMain by getting { dependsOn(nativeMain) }
|
|
||||||
// val watchosTest by getting { dependsOn(nativeTest) }
|
|
||||||
|
|
||||||
// val watchosSimulatorArm64Main by getting { dependsOn(watchosMain) }
|
|
||||||
// val watchosSimulatorArm64Test by getting { dependsOn(watchosTest) }
|
|
||||||
|
|
||||||
// val iosArm32Main by getting { dependsOn(desktopMain) }
|
|
||||||
// val iosArm32Test by getting { dependsOn(nativeTest) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
|
@ -20,14 +20,23 @@ dependencyResolutionManagement {
|
||||||
|
|
||||||
// Declare the Node.js & Yarn download repositories
|
// Declare the Node.js & Yarn download repositories
|
||||||
exclusiveContent {
|
exclusiveContent {
|
||||||
forRepository {
|
forRepositories(
|
||||||
ivy("https://nodejs.org/dist/") {
|
ivy("https://nodejs.org/dist/") {
|
||||||
name = "Node Distributions at $url"
|
name = "Node Distributions at $url"
|
||||||
patternLayout { artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]") }
|
patternLayout { artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]") }
|
||||||
metadataSources { artifact() }
|
metadataSources { artifact() }
|
||||||
content { includeModule("org.nodejs", "node") }
|
},
|
||||||
}
|
ivy("https://nodejs.org/download/v8-canary/") {
|
||||||
}
|
name = "Node Canary Distributions at $url"
|
||||||
|
patternLayout { artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]") }
|
||||||
|
metadataSources { artifact() }
|
||||||
|
},
|
||||||
|
ivy("https://nodejs.org/download/nightly/") {
|
||||||
|
name = "Node Nightly Distributions at $url"
|
||||||
|
patternLayout { artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]") }
|
||||||
|
metadataSources { artifact() }
|
||||||
|
},
|
||||||
|
)
|
||||||
filter { includeGroup("org.nodejs") }
|
filter { includeGroup("org.nodejs") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +46,6 @@ dependencyResolutionManagement {
|
||||||
name = "Yarn Distributions at $url"
|
name = "Yarn Distributions at $url"
|
||||||
patternLayout { artifact("v[revision]/[artifact](-v[revision]).[ext]") }
|
patternLayout { artifact("v[revision]/[artifact](-v[revision]).[ext]") }
|
||||||
metadataSources { artifact() }
|
metadataSources { artifact() }
|
||||||
content { includeModule("com.yarnpkg", "yarn") }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
filter { includeGroup("com.yarnpkg") }
|
filter { includeGroup("com.yarnpkg") }
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
import org.jetbrains.dokka.gradle.DokkaTask
|
import org.jetbrains.dokka.gradle.DokkaTask
|
||||||
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
buildsrc.conventions.lang.`kotlin-multiplatform-jvm`
|
buildsrc.conventions.lang.`kotlin-multiplatform-jvm`
|
||||||
// buildsrc.conventions.lang.`kotlin-multiplatform-js`
|
|
||||||
// buildsrc.conventions.lang.`kotlin-multiplatform-native`
|
|
||||||
buildsrc.conventions.publishing
|
buildsrc.conventions.publishing
|
||||||
id("application")
|
|
||||||
id("com.github.ben-manes.versions")
|
id("com.github.ben-manes.versions")
|
||||||
}
|
}
|
||||||
|
|
||||||
val urlEncoderMainClass = "net.thauvin.erik.urlencoder.UrlEncoder"
|
val urlEncoderMainClass = "net.thauvin.erik.urlencoder.UrlEncoder"
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
jvm {
|
||||||
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
||||||
|
mainRun {
|
||||||
|
mainClass.set(urlEncoderMainClass)
|
||||||
|
}
|
||||||
|
}
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -32,10 +36,6 @@ base {
|
||||||
archivesName.set(rootProject.name)
|
archivesName.set(rootProject.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
|
||||||
mainClass.set(urlEncoderMainClass)
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
jvmJar {
|
jvmJar {
|
||||||
manifest {
|
manifest {
|
||||||
|
@ -45,14 +45,13 @@ tasks {
|
||||||
|
|
||||||
val fatJar by registering(Jar::class) {
|
val fatJar by registering(Jar::class) {
|
||||||
group = LifecycleBasePlugin.BUILD_GROUP
|
group = LifecycleBasePlugin.BUILD_GROUP
|
||||||
dependsOn.addAll(listOf("compileJava", "compileKotlinJvm", "processResources"))
|
|
||||||
archiveClassifier.set("all")
|
archiveClassifier.set("all")
|
||||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
manifest { attributes(mapOf("Main-Class" to application.mainClass)) }
|
manifest { attributes(mapOf("Main-Class" to urlEncoderMainClass)) }
|
||||||
from(sourceSets.main.get().output)
|
from(sourceSets.main.map { it.output })
|
||||||
dependsOn(configurations.jvmRuntimeClasspath)
|
dependsOn(configurations.jvmRuntimeClasspath)
|
||||||
from(configurations.jvmRuntimeClasspath.map { classpath ->
|
from(configurations.jvmRuntimeClasspath.map { classpath ->
|
||||||
classpath.incoming.artifacts.artifactFiles.files.filter { it.name.endsWith("jar") }.map { zipTree(it) }
|
classpath.filter { it.name.endsWith(".jar") }.map { zipTree(it) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2001-2024 the original author or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.thauvin.erik.urlencoder
|
||||||
|
|
||||||
|
import kotlin.jvm.JvmField
|
||||||
|
|
||||||
|
const val standardContent = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_."
|
||||||
|
|
||||||
|
val invalidContent = listOf("sdkjfh%", "sdkjfh%6", "sdkjfh%xx", "sdfjfh%-1")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of unencoded content paired with the encoded content.
|
||||||
|
*/
|
||||||
|
val decodedToEncoded = listOf(
|
||||||
|
TestData("a test &", "a%20test%20%26"),
|
||||||
|
TestData(
|
||||||
|
"!abcdefghijklmnopqrstuvwxyz%%ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~=",
|
||||||
|
"%21abcdefghijklmnopqrstuvwxyz%25%25ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.%7E%3D"
|
||||||
|
),
|
||||||
|
TestData("%#okékÉȢ smile!😁", "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81"),
|
||||||
|
TestData("\uD808\uDC00\uD809\uDD00\uD808\uDF00\uD808\uDD00", "%F0%92%80%80%F0%92%94%80%F0%92%8C%80%F0%92%84%80"),
|
||||||
|
)
|
||||||
|
|
||||||
|
data class TestData(
|
||||||
|
@JvmField
|
||||||
|
val unencoded: String,
|
||||||
|
@JvmField
|
||||||
|
val encoded: String,
|
||||||
|
)
|
|
@ -23,30 +23,17 @@ import kotlin.test.DefaultAsserter.assertEquals
|
||||||
import kotlin.test.DefaultAsserter.assertSame
|
import kotlin.test.DefaultAsserter.assertSame
|
||||||
|
|
||||||
class UrlEncoderUtilTest {
|
class UrlEncoderUtilTest {
|
||||||
private val same = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_."
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val invalid = listOf("sdkjfh%", "sdkjfh%6", "sdkjfh%xx", "sdfjfh%-1")
|
|
||||||
|
|
||||||
val validMap = listOf(
|
|
||||||
"a test &" to "a%20test%20%26",
|
|
||||||
"!abcdefghijklmnopqrstuvwxyz%%ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.~=" to
|
|
||||||
"%21abcdefghijklmnopqrstuvwxyz%25%25ABCDEFGHIJKLMNOPQRSTUVQXYZ0123456789-_.%7E%3D",
|
|
||||||
"%#okékÉȢ smile!😁" to "%25%23ok%C3%A9k%C3%89%C8%A2%20smile%21%F0%9F%98%81",
|
|
||||||
"\uD808\uDC00\uD809\uDD00\uD808\uDF00\uD808\uDD00" to "%F0%92%80%80%F0%92%94%80%F0%92%8C%80%F0%92%84%80",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun decodeURL() {
|
fun decodeURL() {
|
||||||
for (m in validMap) {
|
for ((unencoded, encoded) in decodedToEncoded) {
|
||||||
assertEquals(m.first, decode(m.second))
|
assertEquals(unencoded, decode(encoded))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun decodeWithException() {
|
fun decodeWithException() {
|
||||||
for (source in invalid) {
|
for (source in invalidContent) {
|
||||||
assertFailsWith<IllegalArgumentException>(
|
assertFailsWith<IllegalArgumentException>(
|
||||||
message = "decode($source)",
|
message = "decode($source)",
|
||||||
block = { decode(source) }
|
block = { decode(source) }
|
||||||
|
@ -56,7 +43,7 @@ class UrlEncoderUtilTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun decodeWhenNoneNeeded() {
|
fun decodeWhenNoneNeeded() {
|
||||||
assertSame(same, decode(same))
|
assertSame(standardContent, decode(standardContent))
|
||||||
assertEquals("decode('')", decode(""), "")
|
assertEquals("decode('')", decode(""), "")
|
||||||
assertEquals("decode(' ')", decode(" "), " ")
|
assertEquals("decode(' ')", decode(" "), " ")
|
||||||
}
|
}
|
||||||
|
@ -72,8 +59,8 @@ class UrlEncoderUtilTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun encodeURL() {
|
fun encodeURL() {
|
||||||
for (m in validMap) {
|
for ((unencoded, encoded) in decodedToEncoded) {
|
||||||
assertEquals(m.second, encode(m.first))
|
assertEquals(encoded, encode(unencoded))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,8 +73,8 @@ class UrlEncoderUtilTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun encodeWhenNoneNeeded() {
|
fun encodeWhenNoneNeeded() {
|
||||||
assertSame(encode(same), same)
|
assertSame(encode(standardContent), standardContent)
|
||||||
assertSame("with empty allow", encode(same, allow = ""), same)
|
assertSame("with empty allow", encode(standardContent, allow = ""), standardContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2001-2024 the original author or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.thauvin.erik.urlencoder;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static net.thauvin.erik.urlencoder.TestDataKt.getDecodedToEncoded;
|
||||||
|
import static net.thauvin.erik.urlencoder.UrlEncoderUtil.decode;
|
||||||
|
import static net.thauvin.erik.urlencoder.UrlEncoderUtil.encode;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertAll;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
class UrlEncoderJavaTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void decodeURL() {
|
||||||
|
assertAll(
|
||||||
|
getDecodedToEncoded()
|
||||||
|
.stream()
|
||||||
|
.map(data ->
|
||||||
|
() -> assertEquals(data.unencoded, decode(data.encoded))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void encodeURL() {
|
||||||
|
assertAll(
|
||||||
|
getDecodedToEncoded()
|
||||||
|
.stream()
|
||||||
|
.map(data ->
|
||||||
|
() -> assertEquals(data.encoded, encode(data.unencoded))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue