blob: 94c3c4f2824ba0b01770ff006dd8fbe1aa505d1b [file] [log] [blame]
/**
* Copyright 2006-2017 the original author or authors.
*
* 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
*
* 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.objenesis.tck;
import static org.junit.Assert.*;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
/**
* @author Joe Walnes
*/
public class CandidateLoaderTest {
private StringBuilder recordedEvents;
private CandidateLoader candidateLoader;
@Before
public void setUp() throws Exception {
recordedEvents = new StringBuilder();
TCK tck = new TCK() {
@Override
public void registerCandidate(Class<?> candidateClass, String description) {
recordedEvents.append("registerCandidate('").append(candidateClass).append("', '")
.append(description).append("')\n");
}
};
CandidateLoader.ErrorHandler errorHandler = new CandidateLoader.ErrorHandler() {
public void classNotFound(String name) {
recordedEvents.append("classNotFound('").append(name).append("')\n");
}
};
candidateLoader = new CandidateLoader(tck, getClass().getClassLoader(), errorHandler);
}
@Test
public void testReadsClassesAndDescriptionsFromPropertiesFile() throws IOException {
String input = "" + "org.objenesis.tck.CandidateLoaderTest$A = A candidate\n" + "\n"
+ "# a comment and some whitespace\n" + "\n"
+ "org.objenesis.tck.CandidateLoaderTest$B = B candidate\n"
+ "org.objenesis.tck.CandidateLoaderTest$C = C candidate\n";
candidateLoader.loadFrom(new ByteArrayInputStream(input.getBytes()));
assertEquals(""
+ "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$A', 'A candidate')\n"
+ "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$B', 'B candidate')\n"
+ "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$C', 'C candidate')\n",
recordedEvents.toString());
}
@Test
public void testReportsMissingClassesToErrorHandler() throws IOException {
String input = "" + "org.objenesis.tck.CandidateLoaderTest$A = A candidate\n"
+ "org.objenesis.tck.CandidateLoaderTest$NonExistant = Dodgy candidate\n"
+ "org.objenesis.tck.CandidateLoaderTest$C = C candidate\n";
candidateLoader.loadFrom(new ByteArrayInputStream(input.getBytes()));
assertEquals(""
+ "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$A', 'A candidate')\n"
+ "classNotFound('org.objenesis.tck.CandidateLoaderTest$NonExistant')\n"
+ "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$C', 'C candidate')\n",
recordedEvents.toString());
}
@Test
public void testLoadsFromResourceInClassPath() throws IOException {
// See CandidateLoaderTest-sample.properties.
candidateLoader.loadFromResource(getClass(), "CandidateLoaderTest-sample.properties");
assertEquals(""
+ "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$A', 'A candidate')\n"
+ "registerCandidate('class org.objenesis.tck.CandidateLoaderTest$B', 'B candidate')\n",
recordedEvents.toString());
}
@Test
public void testThrowsIOExceptionIfResourceNotInClassPath() throws IOException {
try {
candidateLoader.loadFromResource(getClass(), "Blatently-Bogus.properties");
fail("Expected exception");
}
catch(IOException expectedException) {
// Good!
}
}
// Sample classes.
public static class A {
}
public static class B {
}
public static class C {
}
}