-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2111 from jruby/add-testcases-to-detect-root-clas…
…sloader when jruby is not coming from the thread.currentThread.contextClassLoade...
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
- 9.0.5.0
- 9.0.4.0
- 9.0.3.0
- 9.0.1.0
- 9.0.0.0
- 9.0.0.0.rc2
- 9.0.0.0.rc1
- 9.0.0.0.pre2
- 9.0.0.0.pre1
Showing
1 changed file
with
104 additions
and
0 deletions.
There are no files selected for viewing
104 changes: 104 additions & 0 deletions
104
core/src/test/java/org/jruby/embed/ParentClassLoaderTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
package org.jruby.embed; | ||
|
||
import static org.junit.Assert.assertEquals; | ||
import static org.junit.Assert.assertNotNull; | ||
import static org.junit.Assert.fail; | ||
|
||
import java.net.URL; | ||
import java.net.URLClassLoader; | ||
|
||
import javax.script.ScriptEngine; | ||
import javax.script.ScriptEngineManager; | ||
|
||
import org.jruby.embed.jsr223.JRubyEngineFactory; | ||
import org.junit.AfterClass; | ||
import org.junit.BeforeClass; | ||
import org.junit.FixMethodOrder; | ||
import org.junit.Test; | ||
import org.junit.runners.MethodSorters; | ||
|
||
@FixMethodOrder(MethodSorters.NAME_ASCENDING) // we need the last test method to run last | ||
public class ParentClassLoaderTest { | ||
|
||
static ClassLoader cl; | ||
|
||
@BeforeClass | ||
public static void setupClassLoader() { | ||
cl = Thread.currentThread().getContextClassLoader(); | ||
// make sure we have classloader which does not find jruby | ||
ClassLoader c = new URLClassLoader( new URL[] {}, null ); | ||
try { | ||
c.loadClass( "org.jruby.embed.ScriptingContainer" ); | ||
fail( "this classloader shall not find jruby" ); | ||
} | ||
catch( ClassNotFoundException expected){} | ||
// set it as context classloader | ||
Thread.currentThread().setContextClassLoader( c ); | ||
} | ||
|
||
@AfterClass | ||
public static void restClassLoader() { | ||
Thread.currentThread().setContextClassLoader( cl ); | ||
} | ||
|
||
@Test | ||
public void test1ScriptingContainer() throws Exception { | ||
try { | ||
// we do have an instance of "jruby" loaded via some other classloader | ||
ScriptingContainer instance = new ScriptingContainer(LocalContextScope.CONCURRENT); | ||
instance.runScriptlet( "$LOAD_PATH" ).toString(); | ||
fail("should not come here"); | ||
} | ||
catch(Exception e){ | ||
//expected | ||
} | ||
} | ||
|
||
@Test | ||
public void test2JRubyEngineFactoryWithWrongPropertyNameCanFail() throws Exception { | ||
try { | ||
System.setProperty(PropertyName.CLASSLOADER.toString(), "something"); | ||
// we do have an instance of "jruby" loaded via some other classloader | ||
ScriptEngineManager m = new ScriptEngineManager(); | ||
m.registerEngineName( "jruby", new JRubyEngineFactory() ); | ||
ScriptEngine jruby = m.getEngineByName("jruby"); | ||
jruby.eval("$LOAD_PATH" ).toString(); | ||
fail("should not come here"); | ||
} | ||
catch(Exception e){ | ||
//expected | ||
} | ||
} | ||
|
||
@Test | ||
public void test3JRubyEngineFactoryWithNoneClassloaderPropertyNameCanFail() throws Exception { | ||
try { | ||
System.setProperty(PropertyName.CLASSLOADER.toString(), "none"); | ||
// we do have an instance of "jruby" loaded via some other classloader | ||
ScriptEngineManager m = new ScriptEngineManager(); | ||
m.registerEngineName( "jruby", new JRubyEngineFactory() ); | ||
ScriptEngine jruby = m.getEngineByName("jruby"); | ||
jruby.eval("$LOAD_PATH" ).toString(); | ||
fail("should not come here"); | ||
} | ||
catch(Exception e){ | ||
//expected | ||
} | ||
} | ||
|
||
@Test | ||
// this test needs to be the last since JRubyEngineFactory uses ScriptingContainer with singleton | ||
// context scope, i.e. once the classloader is setup correctly it remains as it is | ||
public void test4JRubyEngineFactory() throws Exception { | ||
System.getProperties().remove(PropertyName.CLASSLOADER.toString()); | ||
// we do have an instance of "jruby" loaded via some other classloader | ||
ScriptEngineManager m = new ScriptEngineManager(); | ||
m.registerEngineName( "jruby", new JRubyEngineFactory() ); | ||
ScriptEngine jruby = m.getEngineByName("jruby"); | ||
String result = jruby.eval("$LOAD_PATH" ).toString(); | ||
assertNotNull(result); | ||
|
||
assertEquals(jruby.eval("JRuby.runtime.jruby_class_loader.parent" ), cl ); | ||
} | ||
|
||
} |