VIVO-1408 Allow the use of a #-terminated prefix on JAVA class URIs

This commit is contained in:
Jim Blake 2018-01-08 11:19:53 -05:00
parent 8fbfc6d4ff
commit 7f8b16bc1b
5 changed files with 253 additions and 72 deletions

View file

@ -0,0 +1,111 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.utils.configuration;
import static edu.cornell.mannlib.vitro.testing.ModelUtilitiesTestHelper.typeStatement;
import static edu.cornell.mannlib.vitro.webapp.utils.configuration.ConfigurationBeanLoader.toPossibleJavaUris;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import org.junit.Test;
/**
* Assure that we can use "namespaces" for Java URIs. The namespace must end
* with a '#'.
*/
public class ConfigurationBeanLoader_NamespacesTest
extends ConfigurationBeanLoaderTestBase {
// ----------------------------------------------------------------------
// toPossibleJavaUris()
// ----------------------------------------------------------------------
@Test
public void possibleForJavaLangString() {
Set<String> expected = new HashSet<>();
expected.add("java:java.lang.String");
expected.add("java:java#lang.String");
expected.add("java:java.lang#String");
assertEquals(expected, toPossibleJavaUris(String.class));
}
// ----------------------------------------------------------------------
// loadAll()
// ----------------------------------------------------------------------
@Test
public void loadAllForJavaUtilRandom()
throws ConfigurationBeanLoaderException {
model.add(typeStatement("http://noPound", "java:java.util.Random"));
model.add(typeStatement("http://firstPound", "java:java#util.Random"));
model.add(typeStatement("http://secondPound", "java:java.util#Random"));
model.add(typeStatement("http://notARandom", "java:java.util.Set"));
Set<Random> instances = loader.loadAll(Random.class);
assertEquals(3, instances.size());
}
@Test
public void loadAlForCustomInnerClass()
throws ConfigurationBeanLoaderException {
Set<String> typeUris = toPossibleJavaUris(ExampleClassForLoadAll.class);
for (String typeUri : typeUris) {
model.add(typeStatement("http://testUri" + model.size(), typeUri));
}
Set<ExampleClassForLoadAll> instances = loader
.loadAll(ExampleClassForLoadAll.class);
assertEquals(typeUris.size(), instances.size());
}
public static class ExampleClassForLoadAll {
// Nothing of interest
}
// ----------------------------------------------------------------------
// loadInstance()
// ----------------------------------------------------------------------
@Test
public void loadInstanceVariationsForJavaUtilRandom()
throws ConfigurationBeanLoaderException {
model.add(typeStatement("http://noPound", "java:java.util.Random"));
model.add(typeStatement("http://firstPound", "java:java#util.Random"));
model.add(typeStatement("http://secondPound", "java:java.util#Random"));
model.add(typeStatement("http://notARandom", "java:java.util.Set"));
assertNotNull(loader.loadInstance("http://noPound", Random.class));
assertNotNull(loader.loadInstance("http://firstPound", Random.class));
assertNotNull(loader.loadInstance("http://secondPound", Random.class));
try {
loader.loadInstance("http://notARandom", Random.class);
fail("Should not be a Random");
} catch (Exception e) {
// Expected it
}
}
@Test
public void loadInstanceVariationsForCustomInnerClass()
throws ConfigurationBeanLoaderException {
Set<String> typeUris = toPossibleJavaUris(
ExampleClassForLoadInstance.class);
for (String typeUri : typeUris) {
model.add(typeStatement("http://testUri" + model.size(), typeUri));
}
for (int i = 0; i < model.size(); i++) {
String instanceUri = "http://testUri" + i;
assertNotNull("No instance for " + instanceUri, loader.loadInstance(
instanceUri, ExampleClassForLoadInstance.class));
}
}
public static class ExampleClassForLoadInstance {
// Nothing of interest
}
}

View file

@ -15,8 +15,8 @@ import edu.cornell.mannlib.vitro.webapp.utils.configuration.WrappedInstance.Vali
/**
* Test the @Validation annotation.
*/
public class ConfigurationBeanLoader_ValidationTest extends
ConfigurationBeanLoaderTestBase {
public class ConfigurationBeanLoader_ValidationTest
extends ConfigurationBeanLoaderTestBase {
// --------------------------------------------
@Test
@ -25,8 +25,7 @@ public class ConfigurationBeanLoader_ValidationTest extends
model.add(typeStatement(GENERIC_INSTANCE_URI,
toJavaUri(ValidationMethodWithParameter.class)));
expectSimpleFailure(
ValidationMethodWithParameter.class,
expectSimpleFailure(ValidationMethodWithParameter.class,
throwable(ConfigurationBeanLoaderException.class,
"Failed to load"),
throwable(InstanceWrapperException.class,
@ -49,11 +48,11 @@ public class ConfigurationBeanLoader_ValidationTest extends
model.add(typeStatement(GENERIC_INSTANCE_URI,
toJavaUri(ValidationMethodShouldReturnVoid.class)));
expectSimpleFailure(
ValidationMethodShouldReturnVoid.class,
expectSimpleFailure(ValidationMethodShouldReturnVoid.class,
throwable(ConfigurationBeanLoaderException.class,
"Failed to load"),
throwable(InstanceWrapperException.class, "should return void"));
throwable(InstanceWrapperException.class,
"should return void"));
}
public static class ValidationMethodShouldReturnVoid {
@ -71,8 +70,7 @@ public class ConfigurationBeanLoader_ValidationTest extends
model.add(typeStatement(GENERIC_INSTANCE_URI,
toJavaUri(ValidationMethodIsPrivate.class)));
expectSimpleFailure(
ValidationMethodIsPrivate.class,
expectSimpleFailure(ValidationMethodIsPrivate.class,
throwable(ConfigurationBeanLoaderException.class,
"Failed to load"),
throwable(ValidationFailedException.class,
@ -94,8 +92,7 @@ public class ConfigurationBeanLoader_ValidationTest extends
model.add(typeStatement(GENERIC_INSTANCE_URI,
toJavaUri(ValidationThrowsException.class)));
expectSimpleFailure(
ValidationThrowsException.class,
expectSimpleFailure(ValidationThrowsException.class,
throwable(ConfigurationBeanLoaderException.class,
"Failed to load"),
throwable(ValidationFailedException.class,
@ -144,8 +141,7 @@ public class ConfigurationBeanLoader_ValidationTest extends
model.add(typeStatement(GENERIC_INSTANCE_URI,
toJavaUri(ValidationOverValidationSubclass.class)));
expectSimpleFailure(
ValidationOverValidationSubclass.class,
expectSimpleFailure(ValidationOverValidationSubclass.class,
throwable(ConfigurationBeanLoaderException.class,
"Failed to load"),
throwable(InstanceWrapperException.class,
@ -158,8 +154,7 @@ public class ConfigurationBeanLoader_ValidationTest extends
model.add(typeStatement(GENERIC_INSTANCE_URI,
toJavaUri(PlainOverValidationSubclass.class)));
expectSimpleFailure(
PlainOverValidationSubclass.class,
expectSimpleFailure(PlainOverValidationSubclass.class,
throwable(ConfigurationBeanLoaderException.class,
"Failed to load"),
throwable(InstanceWrapperException.class,
@ -182,8 +177,8 @@ public class ConfigurationBeanLoader_ValidationTest extends
// Just want to see that the superclass validation is run.
}
public static class AdditionalValidationSubclass extends
ValidationSuperclass {
public static class AdditionalValidationSubclass
extends ValidationSuperclass {
public boolean validatorSubHasRun = false;
@Validation
@ -195,8 +190,8 @@ public class ConfigurationBeanLoader_ValidationTest extends
}
}
public static class ValidationOverValidationSubclass extends
EmptyValidationSubclass {
public static class ValidationOverValidationSubclass
extends EmptyValidationSubclass {
@Override
@Validation
public void validatorSuper() {
@ -204,8 +199,8 @@ public class ConfigurationBeanLoader_ValidationTest extends
}
}
public static class PlainOverValidationSubclass extends
ValidationSuperclass {
public static class PlainOverValidationSubclass
extends ValidationSuperclass {
@Override
public void validatorSuper() {
// Should fail