diff options
Diffstat (limited to 'src/test/java/org/yaml/snakeyaml/issues/issue318/ContextClassLoaderTest.java')
-rw-r--r-- | src/test/java/org/yaml/snakeyaml/issues/issue318/ContextClassLoaderTest.java | 189 |
1 files changed, 100 insertions, 89 deletions
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue318/ContextClassLoaderTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue318/ContextClassLoaderTest.java index 82f29ee7..a9ae9dca 100644 --- a/src/test/java/org/yaml/snakeyaml/issues/issue318/ContextClassLoaderTest.java +++ b/src/test/java/org/yaml/snakeyaml/issues/issue318/ContextClassLoaderTest.java @@ -1,17 +1,15 @@ /** - * Copyright (c) 2008, http://www.snakeyaml.org + * Copyright (c) 2008, SnakeYAML * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. */ package org.yaml.snakeyaml.issues.issue318; @@ -27,7 +25,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.Properties; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -35,102 +32,116 @@ import org.yaml.snakeyaml.Yaml; public class ContextClassLoaderTest { - static public class DomainBean { - - private int value = 0; - - public void setValue(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + value; - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - DomainBean other = (DomainBean) obj; - if (value != other.value) - return false; - return true; - } + static public class DomainBean { + + private int value = 0; + + public void setValue(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + value; + return result; } - private URLClassLoader yamlCL; + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + DomainBean other = (DomainBean) obj; + return value == other.value; + } - @Before - public void before() throws MalformedURLException { - Properties classpath = new Properties(); - InputStream cpProperties = getClass().getResourceAsStream("classpath.properties"); - try { - classpath.load(cpProperties); - } catch (IOException e2) { - fail(e2.getLocalizedMessage()); - } + } - File runtimeClassesDir = new File(classpath.getProperty("runtime_classes_dir")); + private URLClassLoader yamlCL; - yamlCL = new URLClassLoader(new URL[] { runtimeClassesDir.toURI().toURL() }, null); + @Before + public void before() throws MalformedURLException { + Properties classpath = new Properties(); + InputStream cpProperties = getClass().getResourceAsStream("classpath.properties"); + try { + classpath.load(cpProperties); + } catch (IOException e2) { + fail(e2.getLocalizedMessage()); } - @After - public void after() { - // URLClassLoader.close is @since 1.7 - // if (yamlCL != null) { - // try { - // yamlCL.close(); - // } catch (IOException e) { - // e.printStackTrace(); - // } finally { + File runtimeClassesDir = new File(classpath.getProperty("runtime_classes_dir")); + + ClassLoader noSnakeYAMLClassLoader = + new ClassLoader(Thread.currentThread().getContextClassLoader()) { + + @Override + protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { + if (!name.startsWith("org.yaml.snakeyaml")) { + return super.loadClass(name, resolve); + } + throw new ClassNotFoundException("Can't load SnakeYaml classes by this ClassLoader"); + } + + }; + + yamlCL = + new URLClassLoader(new URL[] {runtimeClassesDir.toURI().toURL()}, noSnakeYAMLClassLoader); + } + + @After + public void after() { + if (yamlCL != null) { + try { + yamlCL.close(); + } catch (IOException e) { + e.printStackTrace(); + } finally { yamlCL = null; - // } - // } + } } + } - @Test(expected = ClassNotFoundException.class) - public void expectNoDomainClassInYamlCL() throws ClassNotFoundException { - yamlCL.loadClass(DomainBean.class.getName()); - } + @Test(expected = ClassNotFoundException.class) + public void expectNoDomainClassInYamlCL() throws ClassNotFoundException { + yamlCL.loadClass(DomainBean.class.getName()); + } - @Test - public void yamlClassInYAMLCL() throws ClassNotFoundException { - yamlCL.loadClass(Yaml.class.getName()); - } + @Test + public void yamlClassInYAMLCL() throws ClassNotFoundException { + yamlCL.loadClass(Yaml.class.getName()); + } - @Test - public void domainInDifferentConstructor() throws ClassNotFoundException, - InstantiationException, IllegalAccessException, NoSuchMethodException, - SecurityException, IllegalArgumentException, InvocationTargetException { + @Test + public void domainInDifferentConstructor() throws ClassNotFoundException, InstantiationException, + IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, + InvocationTargetException { - Class<?> yamlClass = yamlCL.loadClass(Yaml.class.getName()); + Class<?> yamlClass = yamlCL.loadClass(Yaml.class.getName()); - DomainBean bean = new DomainBean(); - bean.setValue(13); + DomainBean bean = new DomainBean(); + bean.setValue(13); - Object yaml = yamlClass.newInstance(); + Object yaml = yamlClass.newInstance(); - Method dumpMethod = yaml.getClass().getMethod("dump", new Class<?>[] { Object.class }); - String dump = dumpMethod.invoke(yaml, bean).toString(); + Method dumpMethod = yaml.getClass().getMethod("dump", Object.class); + String dump = dumpMethod.invoke(yaml, bean).toString(); - Method loadMethod = yaml.getClass().getMethod("load", new Class<?>[] { String.class }); - DomainBean object = (DomainBean) loadMethod.invoke(yaml, dump); + Method loadMethod = yaml.getClass().getMethod("load", String.class); + DomainBean object = (DomainBean) loadMethod.invoke(yaml, dump); - assertEquals(bean, object); - } + assertEquals(bean, object); + } } |