All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wesleyhome.test.jupiter.generator.ArgumentParameters.kt Maven / Gradle / Ivy

Go to download

Library to help generate test parameter permutations for parameterized tests in JUnit. This version is an initial attempt to convert to building with Gradle.

There is a newer version: 3.0.0
Show newest version
package com.wesleyhome.test.jupiter.generator

import org.junit.jupiter.params.provider.Arguments
import java.util.concurrent.atomic.AtomicLong

class ArgumentParameters(private val options: List>) : Iterable {
    private val totalPermutations: Long = options.map { it.size }
        .map { it.toLong() }
        .reduce { acc, i -> acc * i }
    private val pointers: Array = Array(options.size) { 0 }
    private val current = AtomicLong(0)

    override fun iterator(): Iterator {
        return object : Iterator {
            override fun hasNext(): Boolean {
                return current.get() < totalPermutations
            }

            override fun next(): Arguments {
                return createArgument().also { increment() }
            }
        }
    }

    fun createArgument(): Arguments {
        val indexed = options
            .mapIndexed { index, list ->
                val paramIndex = pointers[index]
                list[paramIndex]
            }
        return Arguments.of(*indexed.toTypedArray())
    }

    private fun increment() {
        current.incrementAndGet()
        incrementIndex(pointers.size - 1)
    }

    private fun incrementIndex(index: Int) {
        if (index < 0) {
            return
        }
        val parameterIndex = pointers[index] + 1
        val length = options[index].size
        if (parameterIndex < length) {
            pointers[index] = parameterIndex
        } else {
            pointers[index] = 0
            incrementIndex(index - 1)
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy