| Index: components/policy/android/junit/src/org/chromium/policy/test/annotations/PoliciesTest.java
|
| diff --git a/components/policy/android/junit/src/org/chromium/policy/test/annotations/PoliciesTest.java b/components/policy/android/junit/src/org/chromium/policy/test/annotations/PoliciesTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7bc08e44940a52287409e074914c7a8d7b0c5082
|
| --- /dev/null
|
| +++ b/components/policy/android/junit/src/org/chromium/policy/test/annotations/PoliciesTest.java
|
| @@ -0,0 +1,94 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.policy.test.annotations;
|
| +
|
| +import static org.hamcrest.CoreMatchers.is;
|
| +import static org.junit.Assert.assertThat;
|
| +
|
| +import org.chromium.policy.test.PolicyData;
|
| +import org.junit.Test;
|
| +import org.junit.runner.RunWith;
|
| +import org.junit.runners.BlockJUnit4ClassRunner;
|
| +
|
| +import java.lang.reflect.Method;
|
| +import java.util.Arrays;
|
| +import java.util.HashSet;
|
| +import java.util.Map;
|
| +import java.util.Set;
|
| +
|
| +/**
|
| + * Unit tests for the {@link Policies} annotations
|
| + */
|
| +@RunWith(BlockJUnit4ClassRunner.class)
|
| +public class PoliciesTest {
|
| + @Test
|
| + public void testGetPolicies() throws NoSuchMethodException {
|
| + Method method;
|
| +
|
| + // Simple element, one annotation, no parent
|
| + assertThat(Policies.getPolicies(SomeClass.class).keySet(), is(makeSet("Ni")));
|
| +
|
| + // Simple element, removing an annotation just has no effect
|
| + assertThat(Policies.getPolicies(SomeClassThatRemoves.class).isEmpty(), is(true));
|
| +
|
| + // Simple element, adds and removes the same element: We process additions, then removals.
|
| + assertThat(Policies.getPolicies(SomeConfusedClass.class).isEmpty(), is(true));
|
| +
|
| + // Annotations are inherited
|
| + method = SomeClass.class.getDeclaredMethod("someMethodWithoutWord");
|
| + assertThat(Policies.getPolicies(method).keySet(), is(makeSet("Ni")));
|
| +
|
| + // Annotations add up
|
| + method = SomeClass.class.getDeclaredMethod("someMethod");
|
| + assertThat(Policies.getPolicies(method).keySet(), is(makeSet("Ni", "Neee-wom")));
|
| +
|
| + // Annotations from methods are not inherited
|
| + method = SomeDerivedClass.class.getDeclaredMethod("someMethod");
|
| + assertThat(Policies.getPolicies(method).keySet(), is(makeSet("Ni")));
|
| +
|
| + // Annotations are properly deduped, we get the one closest to the examined element
|
| + method = SomeClass.class.getDeclaredMethod("someMethodThatDuplicates");
|
| + Map<String, PolicyData> policies = Policies.getPolicies(method);
|
| + assertThat(policies.size(), is(1));
|
| + assertThat(policies.get("Ni"), is(PolicyData.Str.class));
|
| +
|
| + // Annotations can be removed
|
| + method = SomeClass.class.getDeclaredMethod("someMethodThatTilRecentlyHadNi");
|
| + assertThat(Policies.getPolicies(method).keySet(),
|
| + is(makeSet("Ekke Ekke Ekke Ekke Ptangya Zoooooooom Boing Ni")));
|
| + }
|
| +
|
| + private Set<String> makeSet(String... keys) {
|
| + return new HashSet<String>(Arrays.asList(keys));
|
| + }
|
| +
|
| + @Policies.Add(@Policies.Item(key = "Ni"))
|
| + private static class SomeClass {
|
| + @SuppressWarnings("unused")
|
| + void someMethodWithoutWord() {}
|
| +
|
| + @Policies.Add(@Policies.Item(key = "Neee-wom"))
|
| + void someMethod() {}
|
| +
|
| + @Policies.Add(@Policies.Item(key = "Ni", string = "Makes it string, not undefined."))
|
| + void someMethodThatDuplicates() {}
|
| +
|
| + @Policies.Remove(@Policies.Item(key = "Ni"))
|
| + @Policies.Add(@Policies.Item(key = "Ekke Ekke Ekke Ekke Ptangya Zoooooooom Boing Ni"))
|
| + void someMethodThatTilRecentlyHadNi() {}
|
| + }
|
| +
|
| + private static class SomeDerivedClass extends SomeClass {
|
| + @Override
|
| + void someMethod() {}
|
| + }
|
| +
|
| + @Policies.Remove(@Policies.Item(key = "Ni"))
|
| + private static class SomeClassThatRemoves {}
|
| +
|
| + @Policies.Add(@Policies.Item(key = "Ni"))
|
| + @Policies.Remove(@Policies.Item(key = "Ni"))
|
| + private static class SomeConfusedClass {}
|
| +}
|
|
|