Skip to content

Commit a0a80af

Browse files
nnhai1991jzheaux
authored andcommitted
Generate a random alphanumeric string in Kotlin
Issue: BAEL-1913
1 parent eaa890a commit a0a80af

2 files changed

Lines changed: 68 additions & 0 deletions

File tree

core-kotlin/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
<artifactId>commons-math3</artifactId>
1919
<version>${commons-math3.version}</version>
2020
</dependency>
21+
<dependency>
22+
<groupId>org.apache.commons</groupId>
23+
<artifactId>commons-lang3</artifactId>
24+
<version>${commons-lang3.version}</version>
25+
</dependency>
2126
<dependency>
2227
<groupId>org.junit.platform</groupId>
2328
<artifactId>junit-platform-runner</artifactId>
@@ -70,6 +75,7 @@
7075

7176
<properties>
7277
<commons-math3.version>3.6.1</commons-math3.version>
78+
<commons-lang3.version>3.8.1</commons-lang3.version>
7379
<junit.platform.version>1.1.1</junit.platform.version>
7480
<junit.vintage.version>5.2.0</junit.vintage.version>
7581
<assertj.version>3.10.0</assertj.version>
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import org.apache.commons.lang3.RandomStringUtils
2+
import org.junit.Before
3+
import org.junit.jupiter.api.BeforeAll
4+
import org.junit.jupiter.api.BeforeEach
5+
import org.junit.jupiter.api.Test
6+
import java.security.SecureRandom
7+
import java.util.concurrent.ThreadLocalRandom
8+
import kotlin.experimental.and
9+
import kotlin.streams.asSequence
10+
import kotlin.test.assertEquals
11+
12+
const val STRING_LENGTH = 10
13+
const val ALPHANUMERIC_REGEX = "[a-zA-Z0-9]+"
14+
15+
class RandomStringUnitTest {
16+
private val charPool : List<Char> = ('a'..'z') + ('A'..'Z') + ('0'..'9')
17+
18+
@Test
19+
fun givenAStringLength_whenUsingJava_thenReturnAlphanumericString() {
20+
var randomString = ThreadLocalRandom.current()
21+
.ints(STRING_LENGTH.toLong(), 0, charPool.size)
22+
.asSequence()
23+
.map(charPool::get)
24+
.joinToString("")
25+
26+
assert(randomString.matches(Regex(ALPHANUMERIC_REGEX)))
27+
assertEquals(STRING_LENGTH, randomString.length)
28+
}
29+
30+
@Test
31+
fun givenAStringLength_whenUsingKotlin_thenReturnAlphanumericString() {
32+
var randomString = (1..STRING_LENGTH).map { i -> kotlin.random.Random.nextInt(0, charPool.size) }
33+
.map(charPool::get)
34+
.joinToString("")
35+
36+
assert(randomString.matches(Regex(ALPHANUMERIC_REGEX)))
37+
assertEquals(STRING_LENGTH, randomString.length)
38+
}
39+
40+
@Test
41+
fun givenAStringLength_whenUsingApacheCommon_thenReturnAlphanumericString() {
42+
var randomString = RandomStringUtils.randomAlphanumeric(STRING_LENGTH)
43+
44+
assert(randomString.matches(Regex(ALPHANUMERIC_REGEX)))
45+
assertEquals(STRING_LENGTH, randomString.length)
46+
}
47+
48+
@Test
49+
fun givenAStringLength_whenUsingRandomForBytes_thenReturnAlphanumericString() {
50+
val random = SecureRandom()
51+
val bytes = ByteArray(STRING_LENGTH)
52+
random.nextBytes(bytes)
53+
54+
var randomString = (0..bytes.size - 1).map { i ->
55+
charPool.get((bytes[i] and 0xFF.toByte() and charPool.size.toByte()).toInt())
56+
}.joinToString("")
57+
58+
assert(randomString.matches(Regex(ALPHANUMERIC_REGEX)))
59+
assertEquals(STRING_LENGTH, randomString.length)
60+
}
61+
62+
}

0 commit comments

Comments
 (0)