Skip to content

Commit

Permalink
✨ Add EmailAddress.toString() in org.kotools.types (#635)
Browse files Browse the repository at this point in the history
  • Loading branch information
LVMVRQUXL committed Apr 1, 2024
1 parent f79a220 commit 726be95
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/api/types.api
Original file line number Diff line number Diff line change
Expand Up @@ -443,10 +443,12 @@ public final class kotools/types/web/EmailAddress$Companion {
public final class org/kotools/types/EmailAddress {
public static final field Companion Lorg/kotools/types/EmailAddress$Companion;
public static final field PATTERN Ljava/lang/String;
public synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public static final fun fromString (Ljava/lang/Object;)Lorg/kotools/types/EmailAddress;
public static final fun fromString (Ljava/lang/Object;Ljava/lang/Object;)Lorg/kotools/types/EmailAddress;
public static final fun fromStringOrNull (Ljava/lang/Object;)Lorg/kotools/types/EmailAddress;
public static final fun fromStringOrNull (Ljava/lang/Object;Ljava/lang/Object;)Lorg/kotools/types/EmailAddress;
public final fun toString ()Ljava/lang/String;
}

public final class org/kotools/types/EmailAddress$Companion {
Expand Down
33 changes: 31 additions & 2 deletions src/commonMain/kotlin/org/kotools/types/EmailAddress.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,35 @@ import kotlin.jvm.JvmStatic
*/
@ExperimentalKotoolsTypesApi
@ExperimentalSince(KotoolsTypesVersion.Unreleased)
public class EmailAddress private constructor() {
public class EmailAddress private constructor(private val value: String) {
/**
* Returns the string representation of this email address.
*
* <br>
* <details open>
* <summary>
* <b>Calling from Kotlin</b>
* </summary>
*
* Here's an example of calling this function from Kotlin code:
*
* SAMPLE: EmailAddressKotlinSample.toString_override.md
* </details>
*
* <br>
* <details>
* <summary>
* <b>Calling from Java</b>
* </summary>
*
* Here's an example of calling this function from Java code:
*
* SAMPLE: EmailAddressJavaSample.toString_override.md
* </details>
*/
@Suppress("RedundantModalityModifier")
final override fun toString(): String = value

/** Contains static declarations for the [EmailAddress] type. */
public companion object {
/**
Expand Down Expand Up @@ -228,7 +256,8 @@ public class EmailAddress private constructor() {
): EmailAddress? {
val valueAsString: String = value.toString()
val regex = Regex(pattern)
return if (valueAsString matches regex) EmailAddress() else null
return if (valueAsString matches regex) EmailAddress(valueAsString)
else null
}
}
}
Expand Down
11 changes: 11 additions & 0 deletions src/commonTest/kotlin/org/kotools/types/EmailAddressTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertTrue

@OptIn(ExperimentalKotoolsTypesApi::class)
class EmailAddressTest {
@Test
fun toString_should_pass() {
val value: Any = "[email protected]"
val address: EmailAddress = EmailAddress.fromString(value)
val actual: String = address.toString()
assertEquals(expected = value, actual)
}
}

@OptIn(ExperimentalKotoolsTypesApi::class)
class EmailAddressCompanionTest {
@Test
Expand Down
10 changes: 10 additions & 0 deletions subprojects/samples/src/main/java/EmailAddressJavaSample.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.kotools.types;

class EmailAddressJavaSample {
void toString_override() {
final Object value = "[email protected]";
final EmailAddress address = EmailAddress.fromString(value);
final String addressAsString = address.toString();
System.out.println(addressAsString == value); // true
} // END
}
14 changes: 14 additions & 0 deletions subprojects/samples/src/main/kotlin/EmailAddressKotlinSample.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.kotools.types

import kotools.types.experimental.ExperimentalKotoolsTypesApi

@OptIn(ExperimentalKotoolsTypesApi::class)
internal object EmailAddressKotlinSample {
@Suppress("FunctionName")
fun toString_override() {
val value: Any = "[email protected]"
val address: EmailAddress = EmailAddress.fromString(value)
val addressAsString: String = address.toString()
println(addressAsString == value) // true
} // END
}
17 changes: 17 additions & 0 deletions subprojects/samples/src/test/java/EmailAddressJavaSampleTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.kotools.types;

import com.github.stefanbirkner.systemlambda.SystemLambda;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

class EmailAddressJavaSampleTest {
@Test
void toString_override_should_pass() {
final EmailAddressJavaSample sample = new EmailAddressJavaSample();
final String output = Assertions.assertDoesNotThrow(
() -> SystemLambda.tapSystemOut(sample::toString_override)
).trim();
final boolean actual = Boolean.parseBoolean(output);
Assertions.assertTrue(actual);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.kotools.types

import com.github.stefanbirkner.systemlambda.SystemLambda
import kotlin.test.Test
import kotlin.test.assertTrue

class EmailAddressKotlinSampleTest {
@Test
fun `toString() should pass`() {
val actual: Boolean = SystemLambda
.tapSystemOut(EmailAddressKotlinSample::toString_override)
.trim()
.toBooleanStrict()
assertTrue(actual)
}
}

0 comments on commit 726be95

Please sign in to comment.