aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/yaml/snakeyaml/issues/issue318/ContextClassLoaderTest.java
diff options
context:
space:
mode:
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.java189
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);
+ }
}