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