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.IOException; 1978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport java.io.Serializable; 2078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 2178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport org.objenesis.Objenesis; 2278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport org.objenesis.ObjenesisSerializer; 2378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonimport org.objenesis.ObjenesisStd; 2478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 2578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson/** 2678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * Command line launcher for Technology Compatibility Kit (TCK). 2778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * 2878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * @author Joe Walnes 2978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * @see TCK 3078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson */ 3178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinsonpublic class Main { 3278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 3378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private static class MockSuperClass { 3478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private final boolean superConstructorCalled; 3578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 3678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public MockSuperClass() { 3778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson superConstructorCalled = true; 3878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 3978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 4078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public boolean isSuperConstructorCalled() { 4178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson return superConstructorCalled; 4278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 4378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 4478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 4578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private static class MockClass extends MockSuperClass implements Serializable { 4678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private static final long serialVersionUID = 1L; 4778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 4878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private final boolean constructorCalled; 4978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 5078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public MockClass() { 5178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson constructorCalled = true; 5278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 5378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 5478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public boolean isConstructorCalled() { 5578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson return constructorCalled; 5678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 5778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 5878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 5978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson /** 6078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * Main class of the TCK. Can also be called as a normal method from an application server. 6178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * 6278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * @param args No parameters are required 6378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson * @throws IOException When the TCK fails to read properties' files. 6478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson */ 6578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson public static void main(String[] args) throws IOException { 6678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 6778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson TextReporter reporter = new TextReporter(System.out, System.err); 6878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 6978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson runTest(new ObjenesisStd(), reporter, "Objenesis std", "candidates/candidates.properties"); 7078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson runTest(new ObjenesisSerializer(), reporter, "Objenesis serializer", 7178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson "candidates/serializable-candidates.properties"); 7278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 7378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson boolean result = runParentConstructorTest(); 7478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 7578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson reporter.printResult(result); 7678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 7778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 7878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private static boolean runParentConstructorTest() { 7978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson try { 8078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson Object result = new ObjenesisSerializer().newInstance(MockClass.class); 8178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson MockClass mockObject = (MockClass) result; 8278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson return mockObject.isSuperConstructorCalled() && !mockObject.isConstructorCalled(); 8378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 8478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson catch(Exception e) { 8578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson System.err.println("--- Not serializable parent constructor called ---"); 8678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson e.printStackTrace(System.err); 8778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson return false; 8878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 8978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 9078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 9178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson private static void runTest(Objenesis objenesis, Reporter reporter, String description, 9278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson String candidates) throws IOException { 9378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson TCK tck = new TCK(); 9478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck.registerObjenesisInstance(objenesis, description); 9578c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 9678c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson CandidateLoader candidateLoader = new CandidateLoader(tck, Main.class.getClassLoader(), 9778c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson new CandidateLoader.LoggingErrorHandler(System.err)); 9878c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 9978c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson candidateLoader.loadFromResource(Main.class, candidates); 10078c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 10178c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson tck.runTests(reporter); 10278c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson } 10378c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson 10478c496fe0fac4c89993109340aec80d1afa3141fIan Parkinson} 105