178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson/** 278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * Copyright 2006-2013 the original author or authors. 378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * 478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * Licensed under the Apache License, Version 2.0 (the "License"); 578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * you may not use this file except in compliance with the License. 678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * You may obtain a copy of the License at 778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * 878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * http://www.apache.org/licenses/LICENSE-2.0 978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * 1078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * Unless required by applicable law or agreed to in writing, software 1178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * distributed under the License is distributed on an "AS IS" BASIS, 1278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * See the License for the specific language governing permissions and 1478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * limitations under the License. 1578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson */ 1678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonpackage org.objenesis.tck; 1778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 1878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport java.io.ByteArrayOutputStream; 1978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport java.io.PrintStream; 2078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport java.io.Serializable; 2178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport java.util.Collection; 2278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 2378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport junit.framework.TestCase; 2478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 2578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport org.objenesis.ObjenesisSerializer; 2678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport org.objenesis.ObjenesisStd; 2778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 2878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson/** 2978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * Integration test for Objenesis. Should pass successfully on every supported JVM for all Objenesis 3078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * interface implementation. 3178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * 3278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * @author Henri Tremblay 3378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson */ 3478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonpublic class ObjenesisTest extends TestCase { 3578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 3678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public static class ErrorHandler implements CandidateLoader.ErrorHandler { 3778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void classNotFound(String name) { 3878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson fail("Class not found : " + name); 3978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 4078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 4178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 4278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public static class JUnitReporter implements Reporter { 4378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 4478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private String currentObjenesis; 4578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 4678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private String currentCandidate; 4778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 4878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void startTests(String platformDescription, Collection allCandidates, 4978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson Collection allInstantiators) { 5078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 5178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 5278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void startTest(String candidateDescription, String objenesisDescription) { 5378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson currentCandidate = candidateDescription; 5478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson currentObjenesis = objenesisDescription; 5578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 5678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 5778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void endObjenesis(String description) { 5878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 5978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 6078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void endTests() { 6178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 6278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 6378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void exception(Exception exception) { 6478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 6578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson PrintStream out = new PrintStream(buffer); 6678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson out.println("Exception when instantiating " + currentCandidate + " with " 6778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson + currentObjenesis + ": "); 6878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson exception.printStackTrace(out); 6978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson fail(buffer.toString()); 7078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 7178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 7278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void result(boolean instantiatedObject) { 7378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson assertTrue("Instantiating " + currentCandidate + " with " + currentObjenesis + " failed", 7478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson instantiatedObject); 7578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 7678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 7778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void endTest() { 7878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 7978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 8078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 8178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson static class MockSuperClass { 8278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private final boolean superConstructorCalled; 8378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public MockSuperClass() { 8478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson superConstructorCalled = true; 8578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 8678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public boolean isSuperConstructorCalled() { 8778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson return superConstructorCalled; 8878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 8978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 9078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 9178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson static class MockClass extends MockSuperClass implements Serializable { 9278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private static final long serialVersionUID = 1L; 9378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private final boolean constructorCalled; 9478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public MockClass() { 9578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson super(); 9678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson constructorCalled = true; 9778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 9878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public boolean isConstructorCalled() { 9978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson return constructorCalled; 10078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 10178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 10278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 10378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private TCK tck = null; 10478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 10578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private CandidateLoader candidateLoader = null; 10678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 10778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson protected void setUp() throws Exception { 10878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson super.setUp(); 10978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 11078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck = new TCK(); 11178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 11278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson candidateLoader = new CandidateLoader(tck, getClass().getClassLoader(), new ErrorHandler()); 11378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 11478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 11578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson protected void tearDown() throws Exception { 11678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson candidateLoader = null; 11778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck = null; 11878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson super.tearDown(); 11978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 12078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 12178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void testObjenesisStd() throws Exception { 12278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson candidateLoader.loadFromResource(getClass(), "candidates/candidates.properties"); 12378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck.registerObjenesisInstance(new ObjenesisStd(), "Objenesis standard"); 12478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck.runTests(new JUnitReporter()); 12578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 12678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 12778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void testObjenesisSerializer() throws Exception { 12878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson candidateLoader.loadFromResource(getClass(), "candidates/serializable-candidates.properties"); 12978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck.registerObjenesisInstance(new ObjenesisSerializer(), "Objenesis serializer"); 13078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck.runTests(new JUnitReporter()); 13178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 13278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 13378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public void testObjenesisSerializerParentConstructorCalled() throws Exception { 13478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson Object result = new ObjenesisSerializer().newInstance(MockClass.class); 13578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson assertEquals(MockClass.class, result.getClass()); 13678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson MockClass mockObject = (MockClass) result; 13778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson assertTrue(mockObject.isSuperConstructorCalled()); 13878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson assertFalse(mockObject.isConstructorCalled()); 13978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 14078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson} 141