1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/**
*
*/
package org.mozilla.javascript.tests;
import junit.framework.TestCase;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextAction;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.NativeJavaObject;
import org.mozilla.javascript.Script;
import org.mozilla.javascript.tools.shell.Global;
import org.mozilla.javascript.tools.shell.ShellContextFactory;
/**
* @author donnamalayeri
*/
public class JavaAcessibilityTest extends TestCase {
protected final Global global = new Global();
String importClass = "importClass(Packages.org.mozilla.javascript.tests.PrivateAccessClass)\n";
public JavaAcessibilityTest() {
global.init(contextFactory);
}
private ContextFactory contextFactory = new ShellContextFactory() {
protected boolean hasFeature(Context cx, int featureIndex) {
if (featureIndex == Context.FEATURE_ENHANCED_JAVA_ACCESS)
return true;
return super.hasFeature(cx, featureIndex);
}
};
public void testAccessingFields() {
Object result = runScript(importClass + "PrivateAccessClass.staticPackagePrivateInt");
assertEquals(new Integer(0), result);
result = runScript(importClass + "PrivateAccessClass.staticPrivateInt");
assertEquals(new Integer(1), result);
result = runScript(importClass + "PrivateAccessClass.staticProtectedInt");
assertEquals(new Integer(2), result);
result = runScript(importClass + "new PrivateAccessClass().packagePrivateString");
assertEquals("package private", ((NativeJavaObject) result).unwrap());
result = runScript(importClass + "new PrivateAccessClass().privateString");
assertEquals("private", ((NativeJavaObject) result).unwrap());
result = runScript(importClass + "new PrivateAccessClass().protectedString");
assertEquals("protected", ((NativeJavaObject) result).unwrap());
result = runScript(importClass + "new PrivateAccessClass.PrivateNestedClass().packagePrivateInt");
assertEquals(new Integer(0), result);
result = runScript(importClass + "new PrivateAccessClass.PrivateNestedClass().privateInt");
assertEquals(new Integer(1), result);
result = runScript(importClass + "new PrivateAccessClass.PrivateNestedClass().protectedInt");
assertEquals(new Integer(2), result);
}
public void testAccessingMethods() {
Object result = runScript(importClass + "PrivateAccessClass.staticPackagePrivateMethod()");
assertEquals(new Integer(0), result);
result = runScript(importClass + "PrivateAccessClass.staticPrivateMethod()");
assertEquals(new Integer(1), result);
result = runScript(importClass + "PrivateAccessClass.staticProtectedMethod()");
assertEquals(new Integer(2), result);
result = runScript(importClass + "new PrivateAccessClass().packagePrivateMethod()");
assertEquals(new Integer(3), result);
result = runScript(importClass + "new PrivateAccessClass().privateMethod()");
assertEquals(new Integer(4), result);
result = runScript(importClass + "new PrivateAccessClass().protectedMethod()");
assertEquals(new Integer(5), result);
}
public void testAccessingConstructors() {
runScript(importClass + "new PrivateAccessClass(\"foo\")");
runScript(importClass + "new PrivateAccessClass(5)");
runScript(importClass + "new PrivateAccessClass(5, \"foo\")");
}
private Object runScript(final String scriptSourceText) {
return this.contextFactory.call(new ContextAction() {
public Object run(Context context) {
Script script = context.compileString(scriptSourceText, "", 1, null);
return script.exec(context, global);
}
});
}
}
|