001: /**
002: *
003: */package org.mozilla.javascript.tests;
004:
005: import junit.framework.TestCase;
006:
007: import org.mozilla.javascript.Context;
008: import org.mozilla.javascript.ContextAction;
009: import org.mozilla.javascript.ContextFactory;
010: import org.mozilla.javascript.NativeJavaObject;
011: import org.mozilla.javascript.Script;
012: import org.mozilla.javascript.tools.shell.Global;
013: import org.mozilla.javascript.tools.shell.ShellContextFactory;
014:
015: /**
016: * @author donnamalayeri
017: */
018: public class JavaAcessibilityTest extends TestCase {
019:
020: protected final Global global = new Global();
021: String importClass = "importClass(Packages.org.mozilla.javascript.tests.PrivateAccessClass)\n";
022:
023: public JavaAcessibilityTest() {
024: global.init(contextFactory);
025: }
026:
027: private ContextFactory contextFactory = new ShellContextFactory() {
028: protected boolean hasFeature(Context cx, int featureIndex) {
029: if (featureIndex == Context.FEATURE_ENHANCED_JAVA_ACCESS)
030: return true;
031: return super .hasFeature(cx, featureIndex);
032: }
033: };
034:
035: public void testAccessingFields() {
036: Object result = runScript(importClass
037: + "PrivateAccessClass.staticPackagePrivateInt");
038: assertEquals(new Integer(0), result);
039:
040: result = runScript(importClass
041: + "PrivateAccessClass.staticPrivateInt");
042: assertEquals(new Integer(1), result);
043:
044: result = runScript(importClass
045: + "PrivateAccessClass.staticProtectedInt");
046: assertEquals(new Integer(2), result);
047:
048: result = runScript(importClass
049: + "new PrivateAccessClass().packagePrivateString");
050: assertEquals("package private", ((NativeJavaObject) result)
051: .unwrap());
052:
053: result = runScript(importClass
054: + "new PrivateAccessClass().privateString");
055: assertEquals("private", ((NativeJavaObject) result).unwrap());
056:
057: result = runScript(importClass
058: + "new PrivateAccessClass().protectedString");
059: assertEquals("protected", ((NativeJavaObject) result).unwrap());
060:
061: result = runScript(importClass
062: + "new PrivateAccessClass.PrivateNestedClass().packagePrivateInt");
063: assertEquals(new Integer(0), result);
064:
065: result = runScript(importClass
066: + "new PrivateAccessClass.PrivateNestedClass().privateInt");
067: assertEquals(new Integer(1), result);
068:
069: result = runScript(importClass
070: + "new PrivateAccessClass.PrivateNestedClass().protectedInt");
071: assertEquals(new Integer(2), result);
072: }
073:
074: public void testAccessingMethods() {
075: Object result = runScript(importClass
076: + "PrivateAccessClass.staticPackagePrivateMethod()");
077: assertEquals(new Integer(0), result);
078:
079: result = runScript(importClass
080: + "PrivateAccessClass.staticPrivateMethod()");
081: assertEquals(new Integer(1), result);
082:
083: result = runScript(importClass
084: + "PrivateAccessClass.staticProtectedMethod()");
085: assertEquals(new Integer(2), result);
086:
087: result = runScript(importClass
088: + "new PrivateAccessClass().packagePrivateMethod()");
089: assertEquals(new Integer(3), result);
090:
091: result = runScript(importClass
092: + "new PrivateAccessClass().privateMethod()");
093: assertEquals(new Integer(4), result);
094:
095: result = runScript(importClass
096: + "new PrivateAccessClass().protectedMethod()");
097: assertEquals(new Integer(5), result);
098: }
099:
100: public void testAccessingConstructors() {
101: runScript(importClass + "new PrivateAccessClass(\"foo\")");
102: runScript(importClass + "new PrivateAccessClass(5)");
103: runScript(importClass + "new PrivateAccessClass(5, \"foo\")");
104: }
105:
106: private Object runScript(final String scriptSourceText) {
107: return this .contextFactory.call(new ContextAction() {
108: public Object run(Context context) {
109: Script script = context.compileString(scriptSourceText,
110: "", 1, null);
111: return script.exec(context, global);
112: }
113: });
114: }
115: }
|