Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2db3be6d authored by Victor Gabriel Savu's avatar Victor Gabriel Savu
Browse files

Add tests for enums in PolicyProcessorTest

Add compiler tests for enum policies.

Bug: 440992241
Flag: TEST_ONLY
Test: atest frameworks/base/tools/processors/devicepolicy/test/src/android/processor/devicepolicy/test/PolicyProcessorTest.kt
Change-Id: Ide540de95874fdb8744f847ddf65cb3345b78366
parent 240f4ce9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -51,9 +51,10 @@ java_test_host {
filegroup {
    name: "DevicePolicyAnnotationProcessorTestSource",
    srcs: [
        // We need the java sources for compiler tests.
        ":framework-metalava-annotations",
        "test/resources/**/*.java",
        "test/resources/**/*.json",
    ],
    path: "test/resources/",
    visibility: ["//visibility:private"],
}
+46 −0
Original line number Diff line number Diff line
@@ -16,9 +16,14 @@

package android.app.admin;

import android.annotation.IntDef;
import android.processor.devicepolicy.BooleanPolicyDefinition;
import android.processor.devicepolicy.EnumPolicyDefinition;
import android.processor.devicepolicy.PolicyDefinition;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

public final class PolicyIdentifier<T> {
    // We don't actually do anything with this.
    public PolicyIdentifier(String id) {
@@ -33,4 +38,45 @@ public final class PolicyIdentifier<T> {
    @BooleanPolicyDefinition
    public static final PolicyIdentifier<Boolean> TEST_POLICY_1 = new PolicyIdentifier<>(
            TEST_POLICY_1_KEY);

    private static final String TEST_POLICY_2_KEY = "test_policy_1_key";

    /**
     * First entry
     */
    public static final int ENUM_ENTRY_1 = 0;

    /**
     * Second entry
     */
    public static final int ENUM_ENTRY_2 = 1;

    /**
     * Third entry
     */
    public static final int ENUM_ENTRY_3 = 2;

    /**
     * Enum for {@link TEST_POLICY_2}
     *
     * @hide
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "AUTO_TIME_ZONE_" }, value = {
            ENUM_ENTRY_1,
            ENUM_ENTRY_2,
            ENUM_ENTRY_3
    })
    public @interface TestPolicy2Enum {}

    /**
     * Test policy 2
     */
    @PolicyDefinition
    @EnumPolicyDefinition(
            defaultValue = ENUM_ENTRY_2,
            intDef = TestPolicy2Enum.class
    )
    public static final PolicyIdentifier<Integer> TEST_POLICY_2 = new PolicyIdentifier<>(
            TEST_POLICY_2_KEY);
}
+25 −0
Original line number Diff line number Diff line
@@ -4,6 +4,31 @@
      "name": "android.app.admin.PolicyIdentifier<T>.TEST_POLICY_1",
      "type": "java.lang.Boolean",
      "documentation": " Test policy 1\n"
    },
    {
      "name": "android.app.admin.PolicyIdentifier<T>.TEST_POLICY_2",
      "type": "java.lang.Integer",
      "documentation": " Test policy 2\n",
      "default": 1,
      "enum": "android.app.admin.PolicyIdentifier.TestPolicy2Enum",
      "enumDocumentation": " Enum for {@link TEST_POLICY_2}\n\n @hide\n",
      "options": [
        {
          "name": "ENUM_ENTRY_1",
          "value": 0,
          "documentation": " First entry\n"
        },
        {
          "name": "ENUM_ENTRY_2",
          "value": 1,
          "documentation": " Second entry\n"
        },
        {
          "name": "ENUM_ENTRY_3",
          "value": 2,
          "documentation": " Third entry\n"
        }
      ]
    }
  ]
}
 No newline at end of file
+23 −12
Original line number Diff line number Diff line
@@ -18,14 +18,13 @@ package android.processor.devicepolicy.test

import android.processor.devicepolicy.PolicyProcessor
import com.google.common.base.Charsets
import com.google.common.io.ByteSource
import com.google.common.io.Resources
import com.google.testing.compile.Compilation
import com.google.testing.compile.CompilationSubject.assertThat
import com.google.testing.compile.Compiler
import com.google.testing.compile.JavaFileObjects
import java.io.IOException
import javax.tools.StandardLocation
import javax.tools.StandardLocation.SOURCE_OUTPUT
import org.junit.Assert.assertNotNull
import org.junit.Assert.fail

@@ -35,16 +34,25 @@ class PolicyProcessorTest {
    private val mCompiler = Compiler.javac().withProcessors(PolicyProcessor())

    private companion object {
        const val POLICIES_JSON_LOCATION = "android/processor/devicepolicy/policies.json"
        const val RESOURCE_ROOT = "test/resources/android/processor/devicepolicy/test"

        const val POLICY_IDENTIFIER = "android/processor/devicepolicy/test/PolicyIdentifier"
        const val POLICY_IDENTIFIER = "$RESOURCE_ROOT/PolicyIdentifier"
        const val POLICY_IDENTIFIER_JAVA = "$POLICY_IDENTIFIER.java"
        const val POLICY_IDENTIFIER_JSON = "$POLICY_IDENTIFIER.json"

        const val OTHER_CLASS_JAVA = "android/processor/devicepolicy/test/OtherClass.java"
        const val POLICY_IDENTIFIER_INVALID_TYPE_JAVA = "android/processor/devicepolicy/test/invalidtype/PolicyIdentifier.java"
        const val POLICY_IDENTIFIER_MISSING_METADATA_JAVA = "android/processor/devicepolicy/test/missingmetadata/PolicyIdentifier.java"
        const val OTHER_CLASS_JAVA = "$RESOURCE_ROOT/OtherClass.java"
        const val POLICY_IDENTIFIER_INVALID_TYPE_JAVA = "$RESOURCE_ROOT/invalidtype/PolicyIdentifier.java"
        const val POLICY_IDENTIFIER_MISSING_METADATA_JAVA = "$RESOURCE_ROOT/missingmetadata/PolicyIdentifier.java"

        /**
         * Comes from the actual IntDef.java in the source, located in a different folder.
         */
        const val INT_DEF_JAVA = "android/annotation/IntDef.java"

        /**
         * Build path for the output.
         */
        const val POLICIES_JSON_LOCATION = "android/processor/devicepolicy/policies.json"

        fun loadTextResource(path: String): String {
            try {
@@ -63,11 +71,14 @@ class PolicyProcessorTest {
        val expectedOutput = loadTextResource(POLICY_IDENTIFIER_JSON)

        val compilation: Compilation =
            mCompiler.compile(JavaFileObjects.forResource(POLICY_IDENTIFIER_JAVA))
            mCompiler.compile(
                JavaFileObjects.forResource(POLICY_IDENTIFIER_JAVA),
                JavaFileObjects.forResource(INT_DEF_JAVA)
            )

        assertThat(compilation).succeeded()
        assertThat(compilation).generatedFile(
            StandardLocation.SOURCE_OUTPUT, POLICIES_JSON_LOCATION
        ).hasContents(ByteSource.wrap(expectedOutput.toByteArray()))
        assertThat(compilation).generatedFile(SOURCE_OUTPUT,
            POLICIES_JSON_LOCATION).contentsAsUtf8String().isEqualTo(expectedOutput)
    }

    @Test
@@ -113,7 +124,7 @@ class PolicyProcessorTest {
            assertThat(compilation).succeeded()
        }

        checkCompileSucceeds(OTHER_CLASS_JAVA, POLICY_IDENTIFIER_JAVA)
        checkCompileSucceeds(OTHER_CLASS_JAVA, POLICY_IDENTIFIER_JAVA, INT_DEF_JAVA)
        checkCompileSucceeds(POLICY_IDENTIFIER_INVALID_TYPE_JAVA)
        checkCompileSucceeds(POLICY_IDENTIFIER_MISSING_METADATA_JAVA)
    }