mirror of
https://github.com/ReVanced/revanced-patcher.git
synced 2026-01-26 20:51:03 +00:00
It's so much better now. Really happy with the current system. BREAKING CHANGE: Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
93 lines
2.6 KiB
Kotlin
93 lines
2.6 KiB
Kotlin
package app.revanced.patcher.patch
|
|
|
|
import app.revanced.patcher.usage.bytecode.ExampleBytecodePatch
|
|
import org.junit.jupiter.api.Test
|
|
import org.junit.jupiter.api.assertThrows
|
|
import java.io.File
|
|
import kotlin.test.assertNotEquals
|
|
|
|
internal class PatchOptionsTest {
|
|
private val options = ExampleBytecodePatch.options
|
|
|
|
@Test
|
|
fun `should not throw an exception`() {
|
|
for (option in options) {
|
|
when (option) {
|
|
is PatchOption.StringOption -> {
|
|
option.value = "Hello World"
|
|
}
|
|
|
|
is PatchOption.BooleanOption -> {
|
|
option.value = false
|
|
}
|
|
|
|
is PatchOption.StringListOption -> {
|
|
option.value = option.options.first()
|
|
for (choice in option.options) {
|
|
println(choice)
|
|
}
|
|
}
|
|
|
|
is PatchOption.IntListOption -> {
|
|
option.value = option.options.first()
|
|
for (choice in option.options) {
|
|
println(choice)
|
|
}
|
|
}
|
|
|
|
is PatchOption.PathOption -> {
|
|
option.value = File("test.txt").toPath()
|
|
}
|
|
}
|
|
}
|
|
val option = options["key1"]
|
|
println(option.value)
|
|
options["key1"] = "Hello, world!"
|
|
println(option.value)
|
|
}
|
|
|
|
@Test
|
|
fun `should return a different value when changed`() {
|
|
var value: String by options["key1"]
|
|
val current = value + "" // force a copy
|
|
value = "Hello, world!"
|
|
assertNotEquals(current, value)
|
|
}
|
|
|
|
@Test
|
|
fun `should be able to set value to null`() {
|
|
// Sadly, doing:
|
|
// > options["key2"] = null
|
|
// is not possible because Kotlin
|
|
// cannot reify the type "Nothing?".
|
|
options.nullify("key2")
|
|
}
|
|
|
|
@Test
|
|
fun `should fail because the option does not exist`() {
|
|
assertThrows<NoSuchOptionException> {
|
|
options["this option does not exist"] = 123
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun `should fail because of invalid value type`() {
|
|
assertThrows<InvalidTypeException> {
|
|
options["key1"] = 123
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun `should fail because of an illegal value`() {
|
|
assertThrows<IllegalValueException> {
|
|
options["key3"] = "this value is not an allowed option"
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun `should fail because of the requirement is not met`() {
|
|
assertThrows<RequirementNotMetException> {
|
|
options.nullify("key1")
|
|
}
|
|
}
|
|
} |