1 /*
2 This project provide access to non public fields
3 and methods as help for writing tests.
4 Copyright (C) 2007 Christof Lehmann
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 */
20 package net.sf.testextensions;
21
22 import java.lang.reflect.AccessibleObject;
23
24 /**
25 * The interface declares methodes for manipulating the SecurityManger.
26 * @author forge-cl
27 */
28 abstract class AccessibilityManipulator {
29 /**
30 * The method <code>befor</code> must be called before accessing a non
31 * public field.
32 */
33 public abstract void before();
34
35 /**
36 * The method <code>after</code> must be called after accessing a non
37 * public field.
38 *
39 */
40 public abstract void after();
41
42 /**
43 * The method <code>selectManipulator</code> generate a
44 * AccessibilityManipulator, which suites to the member.
45 *
46 * @param forMember
47 * The member for the AccessibilityManipulator
48 * @return the required AccessibilityManipulator
49 */
50 public static AccessibilityManipulator selectManipulator(
51 final AccessibleObject forMember) {
52 AccessibilityManipulator manipulator;
53 if (forMember.isAccessible()) {
54 manipulator = new AccessibilityManipulator() {
55 public void after() {
56 }
57
58 public void before() {
59 }
60 };
61 } else {
62 manipulator = new AccessibilityManipulator() {
63 public void after() {
64 forMember.setAccessible(false);
65 }
66
67 public void before() {
68 forMember.setAccessible(true);
69 }
70
71 };
72 }
73 return manipulator;
74 }
75 }