diff --git a/api/revanced-patcher.api b/api/revanced-patcher.api index b9d7c3f..fff57eb 100644 --- a/api/revanced-patcher.api +++ b/api/revanced-patcher.api @@ -362,15 +362,16 @@ public abstract interface annotation class app/revanced/patcher/patch/annotation public class app/revanced/patcher/patch/options/PatchOption { public static final field PatchExtensions Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions; - public fun (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)V + public fun (Ljava/lang/String;Ljava/lang/Object;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)V public final fun getDefault ()Ljava/lang/Object; public final fun getDescription ()Ljava/lang/String; public final fun getKey ()Ljava/lang/String; public final fun getRequired ()Z public final fun getTitle ()Ljava/lang/String; - public final fun getValidator ()Lkotlin/jvm/functions/Function1; + public final fun getValidator ()Lkotlin/jvm/functions/Function2; public final fun getValue ()Ljava/lang/Object; public final fun getValue (Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; + public final fun getValues ()Ljava/util/Set; public fun reset ()V public final fun setValue (Ljava/lang/Object;)V public final fun setValue (Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V @@ -378,26 +379,26 @@ public class app/revanced/patcher/patch/options/PatchOption { } public final class app/revanced/patcher/patch/options/PatchOption$PatchExtensions { - public final fun booleanArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun booleanArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun booleanPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun booleanPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun floatArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Float;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun floatArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Float;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun floatPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Float;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun floatPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Float;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun intArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun intArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun intPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun intPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun longArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun longArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun longPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun longPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun stringArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun stringArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; - public final fun stringPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/options/PatchOption; - public static synthetic fun stringPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun booleanArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun booleanArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun booleanPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun booleanPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun floatArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Float;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun floatArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Float;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun floatPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Float;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun floatPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Float;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun intArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Integer;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun intArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Integer;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun intPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Integer;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun intPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Integer;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun longArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Long;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun longArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Long;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun longPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Long;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun longPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Long;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun stringArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun stringArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun stringPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun stringPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; } public abstract class app/revanced/patcher/patch/options/PatchOptionException : java/lang/Exception { diff --git a/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt b/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt index 01430a3..20bd846 100644 --- a/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt +++ b/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt @@ -8,6 +8,7 @@ import kotlin.reflect.KProperty * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -18,10 +19,11 @@ import kotlin.reflect.KProperty open class PatchOption( val key: String, val default: T?, + val values: Set, val title: String?, val description: String?, val required: Boolean, - val validator: (T?) -> Boolean + val validator: PatchOption.(T?) -> Boolean ) { /** * The value of the [PatchOption]. @@ -90,6 +92,7 @@ open class PatchOption( * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -102,17 +105,19 @@ open class PatchOption( fun

> P.stringPatchOption( key: String, default: String? = null, + values: Set = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (String?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption.(String?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with an integer value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -125,17 +130,19 @@ open class PatchOption( fun

> P.intPatchOption( key: String, default: Int? = null, + values: Set = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Int?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption.(Int?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with a boolean value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -148,17 +155,19 @@ open class PatchOption( fun

> P.booleanPatchOption( key: String, default: Boolean? = null, + values: Set = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Boolean?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption.(Boolean?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with a float value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -171,17 +180,19 @@ open class PatchOption( fun

> P.floatPatchOption( key: String, default: Float? = null, + values: Set = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Float?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption.(Float?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with a long value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -194,17 +205,19 @@ open class PatchOption( fun

> P.longPatchOption( key: String, default: Long? = null, + values: Set = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Long?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption.(Long?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with a string array value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -217,17 +230,19 @@ open class PatchOption( fun

> P.stringArrayPatchOption( key: String, default: Array? = null, + values: Set> = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Array?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption?>.(Array?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with an integer array value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -240,17 +255,19 @@ open class PatchOption( fun

> P.intArrayPatchOption( key: String, default: Array? = null, + values: Set> = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Array?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption?>.(Array?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with a boolean array value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -263,17 +280,19 @@ open class PatchOption( fun

> P.booleanArrayPatchOption( key: String, default: Array? = null, + values: Set> = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Array?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption?>.(Array?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with a float array value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -286,17 +305,19 @@ open class PatchOption( fun

> P.floatArrayPatchOption( key: String, default: Array? = null, + values: Set> = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Array?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption?>.(Array?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } /** * Create a new [PatchOption] with a long array value and add it to the current [Patch]. * * @param key The identifier. * @param default The default value. + * @param values The set of guaranteed valid values. * @param title The title. * @param description A description. * @param required Whether the option is required. @@ -309,11 +330,12 @@ open class PatchOption( fun

> P.longArrayPatchOption( key: String, default: Array? = null, + values: Set> = emptySet(), title: String? = null, description: String? = null, required: Boolean = false, - validator: (Array?) -> Boolean = { true } - ) = PatchOption(key, default, title, description, required, validator).also { registerOption(it) } + validator: PatchOption?>.(Array?) -> Boolean = { true } + ) = PatchOption(key, default, values, title, description, required, validator).also { registerOption(it) } private fun

> P.registerOption(option: PatchOption<*>) = option.also { options.register(it) } } diff --git a/src/test/kotlin/app/revanced/patcher/patch/options/PatchOptionsTest.kt b/src/test/kotlin/app/revanced/patcher/patch/options/PatchOptionsTest.kt index cf344b9..cee2172 100644 --- a/src/test/kotlin/app/revanced/patcher/patch/options/PatchOptionsTest.kt +++ b/src/test/kotlin/app/revanced/patcher/patch/options/PatchOptionsTest.kt @@ -8,6 +8,7 @@ import app.revanced.patcher.patch.options.PatchOption.PatchExtensions.stringPatc import org.junit.jupiter.api.assertDoesNotThrow import org.junit.jupiter.api.assertThrows import kotlin.test.Test +import kotlin.test.assertTrue internal class PatchOptionsTest { @Test @@ -46,6 +47,36 @@ internal class PatchOptionsTest { } } + @Suppress("UNCHECKED_CAST") + @Test + fun `should allow setting value from values`() = + with(OptionsTestPatch.options["choices"] as PatchOption) { + value = values.last() + assertTrue(value == "valid") + } + + @Test + fun `should allow setting custom value`() { + assertDoesNotThrow { + OptionsTestPatch.options["choices"] = "unknown" + } + } + + @Test + fun `should not allow setting custom value with validation`() = + @Suppress("UNCHECKED_CAST") + with(OptionsTestPatch.options["validated"] as PatchOption) { + // Getter validation + assertThrows { value } + + // setter validation on incorrect value + assertThrows { value = "invalid" } + + // Setter validation on correct value + assertDoesNotThrow { value = "valid" } + } + + @Suppress("unused") private object OptionsTestPatch : BytecodePatch() { private var stringOption by stringPatchOption("string", "default") private var booleanOption by booleanPatchOption("bool", true) @@ -53,6 +84,9 @@ internal class PatchOptionsTest { private var nullDefaultRequiredOption by stringPatchOption("null", null, required = true) val stringArrayOption = stringArrayPatchOption("array", arrayOf("1", "2")) + val stringOptionWithChoices = stringPatchOption("choices", "value", values = setOf("valid")) + + val validatedOption = stringPatchOption("validated", "default") { it == "valid" } override fun execute(context: BytecodeContext) {} }