1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang.reflect;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Annotation;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.ElementType;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Inherited;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Retention;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.RetentionPolicy;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Target;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.AccessibleObject;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Modifier;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class AccessibleObjectTest extends junit.framework.TestCase {
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public class TestClass {
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object aField;
35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @InheritedRuntime
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void annotatedMethod(){}
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
39f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public class SubTestClass extends TestClass{
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @AnnotationRuntime0
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @AnnotationRuntime1
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @AnnotationClass0
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @AnnotationSource0
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void annotatedMethod(){}
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.RUNTIME)
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( {ElementType.METHOD})
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface AnnotationRuntime0 {
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.RUNTIME)
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( { ElementType.METHOD})
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface AnnotationRuntime1 {
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.CLASS)
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( { ElementType.METHOD})
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface AnnotationClass0 {
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.SOURCE)
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( {ElementType.METHOD})
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface AnnotationSource0 {
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Inherited
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.RUNTIME)
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( {ElementType.METHOD})
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface InheritedRuntime {
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //used for constructor test
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static class MyAccessibleObject extends AccessibleObject{
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyAccessibleObject() {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super();
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
81f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
83229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.AccessibleObject#AccessibleObject()
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Constructor() {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(new MyAccessibleObject());
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
90229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.AccessibleObject#isAccessible()
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_isAccessible() {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.AccessibleObject.isAccessible()
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AccessibleObject ao = TestClass.class.getField("aField");
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ao.setAccessible(true);
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned false to isAccessible", ao.isAccessible());
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ao.setAccessible(false);
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned true to isAccessible", !ao.isAccessible());
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
107229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.AccessibleObject#setAccessible(java.lang.reflect.AccessibleObject[],
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        boolean)
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setAccessible$Ljava_lang_reflect_AccessibleObjectZ() {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AccessibleObject ao = TestClass.class.getField("aField");
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AccessibleObject[] aoa = new AccessibleObject[] { ao };
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AccessibleObject.setAccessible(aoa, true);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned false to isAccessible", ao.isAccessible());
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AccessibleObject.setAccessible(aoa, false);
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned true to isAccessible", !ao.isAccessible());
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
122f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
124229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.AccessibleObject#setAccessible(boolean)
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setAccessible() throws Exception {
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AccessibleObject ao = TestClass.class.getField("aField");
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ao.setAccessible(true);
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned false to isAccessible", ao.isAccessible());
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ao.setAccessible(false);
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("Returned true to isAccessible", ao.isAccessible());
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
133f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getAnnotation() throws Exception{
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AccessibleObject ao = SubTestClass.class.getMethod("annotatedMethod");
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //test error case
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean npeThrown = false;
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          ao.getAnnotation(null);
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          fail("NPE expected");
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            npeThrown = true;
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("NPE expected", npeThrown);
145f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //test inherited on method has no effect
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InheritedRuntime ir = ao.getAnnotation(InheritedRuntime.class);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Inherited Annotations should have no effect", ir);
149f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //test ordinary runtime annotation
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AnnotationRuntime0 rt0 = ao.getAnnotation(AnnotationRuntime0.class);
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("AnnotationRuntime0 instance expected", rt0);
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
154f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     public void test_getAnnotations() throws Exception {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AccessibleObject ao = SubTestClass.class.getMethod("annotatedMethod");
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Annotation[] annotations = ao.getAnnotations();
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, annotations.length);
159f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Class<?>> ignoreOrder = new HashSet<Class<?>>();
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(annotations[0].annotationType());
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(annotations[1].annotationType());
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
164f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue("Missing @AnnotationRuntime0",
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ignoreOrder.contains(AnnotationRuntime0.class));
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Missing @AnnotationRuntime1",
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ignoreOrder.contains(AnnotationRuntime1.class));
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
169f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     public void test_getDeclaredAnnotations() throws Exception {
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AccessibleObject ao = SubTestClass.class.getMethod("annotatedMethod");
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Annotation[] annotations = ao.getDeclaredAnnotations();
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, annotations.length);
174f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Class<?>> ignoreOrder = new HashSet<Class<?>>();
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(annotations[0].annotationType());
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(annotations[1].annotationType());
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
179f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue("Missing @AnnotationRuntime0",
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ignoreOrder.contains(AnnotationRuntime0.class));
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Missing @AnnotationRuntime1",
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ignoreOrder.contains(AnnotationRuntime1.class));
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
184f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_isAnnotationPresent() throws Exception {
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AccessibleObject ao = SubTestClass.class.getMethod("annotatedMethod");
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Missing @AnnotationRuntime0",
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ao.isAnnotationPresent(AnnotationRuntime0.class));
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("AnnotationSource0 should not be visible at runtime",
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ao.isAnnotationPresent(AnnotationSource0.class));
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean npeThrown = false;
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          ao.isAnnotationPresent(null);
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          fail("NPE expected");
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            npeThrown = true;
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("NPE expected", npeThrown);
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
201f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method is called after a test is executed.
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
216