/******************************************************************************* * Copyright (c) 2002, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.debug.tests.eval.generator; import java.io.File; import java.io.FileWriter; import java.io.Writer; import org.eclipse.debug.internal.core.IInternalDebugCoreConstants; public class TypeHierarchyTestsGenerator extends TestGenerator { static int IAA= 0; static int IAB= 1; static int IAC= 2; static int AA= 3; static int AB= 4; static int AC= 5; static int IBB= 6; static int IBC= 7; static int BB= 8; static int BC= 9; static int ICC= 10; static int CC= 11; static int N_A= 12; static int N_B= 13; static int N_C= 14; static int SUPER_A= 15; static int SUPER_B= 16; static int M1= 0; static int M2= 1; static int S2= 2; static int M3= 3; static int M4= 4; static int S4= 5; static int M5= 6; static int M6= 7; static int S6= 8; static String[] qualifiers= new String[] { "iaa", "iab", "iac", "aa", "ab", "ac", "ibb", "ibc", "bb", "bc", "icc", "cc", "new A()", "new B()", "new C()" ,"super" , "super"}; static String[] methods= new String[] {"m1", "m2", "s2", "m3", "m4", "s4", "m5", "m6", "s6"}; static int[] staticLevel= new int[] { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 0, 1, 2, 0, 1}; static int[] instanceLevel= new int[] { 0, 1, 2, 0, 1, 2, 1, 2, 1, 2, 2, 2, 0, 1, 2, 0, 1}; static int[][] values= new int[][] { { 1, 2, 9}, { 11, 22, 99, 33, 44, 88}, { 111, 222, 999, 333, 444, 888, 555, 666, 777} }; public static void main(String[] args) throws Exception { gen_main(); gen_aa_testA(); gen_ab_testA(); gen_ac_testA(); gen_bb_testA(); gen_bb_testB(); gen_bc_testA(); gen_bc_testB(); gen_cc_testA(); gen_cc_testB(); gen_cc_testC(); System.out.println("done"); } public static void gen_main() throws Exception { StringBuffer code= new StringBuffer(); createTestQualifier(IAA, M1, code); createTestQualifier(IAB, M1, code); createTestQualifier(IAC, M1, code); createTestQualifier(AA, M1, code); createTestQualifier(AA, M2, code); createTestQualifier(AA, S2, code); createTestQualifier(AB, M1, code); createTestQualifier(AB, M2, code); createTestQualifier(AB, S2, code); createTestQualifier(AC, M1, code); createTestQualifier(AC, M2, code); createTestQualifier(AC, S2, code); createTestQualifier(IBB, M1, code); createTestQualifier(IBB, M3, code); createTestQualifier(IBC, M1, code); createTestQualifier(IBC, M3, code); createTestQualifier(BB, M1, code); createTestQualifier(BB, M2, code); createTestQualifier(BB, S2, code); createTestQualifier(BB, M3, code); createTestQualifier(BB, M4, code); createTestQualifier(BB, S4, code); createTestQualifier(BC, M1, code); createTestQualifier(BC, M2, code); createTestQualifier(BC, S2, code); createTestQualifier(BC, M3, code); createTestQualifier(BC, M4, code); createTestQualifier(BC, S4, code); createTestQualifier(ICC, M1, code); createTestQualifier(ICC, M3, code); createTestQualifier(ICC, M5, code); createTestQualifier(CC, M1, code); createTestQualifier(CC, M2, code); createTestQualifier(CC, S2, code); createTestQualifier(CC, M3, code); createTestQualifier(CC, M4, code); createTestQualifier(CC, S4, code); createTestQualifier(CC, M5, code); createTestQualifier(CC, M6, code); createTestQualifier(CC, S6, code); createTestQualifier(N_A, M1, code); createTestQualifier(N_A, M2, code); createTestQualifier(N_A, S2, code); createTestQualifier(N_B, M1, code); createTestQualifier(N_B, M2, code); createTestQualifier(N_B, S2, code); createTestQualifier(N_B, M3, code); createTestQualifier(N_B, M4, code); createTestQualifier(N_B, S4, code); createTestQualifier(N_C, M1, code); createTestQualifier(N_C, M2, code); createTestQualifier(N_C, S2, code); createTestQualifier(N_C, M3, code); createTestQualifier(N_C, M4, code); createTestQualifier(N_C, S4, code); createTestQualifier(N_C, M5, code); createTestQualifier(N_C, M6, code); createTestQualifier(N_C, S6, code); createJavaFile(code, 146, 1, 1); } public static void gen_aa_testA() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestA(code, AA); createJavaFile(code, 32, 2, 1); } public static void gen_ab_testA() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestA(code, AB); createJavaFile(code, 32, 2, 2); } public static void gen_ac_testA() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestA(code, AC); createJavaFile(code, 32, 2, 3); } public static void gen_bb_testA() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestA(code, BB); createJavaFile(code, 32, 2, 4); } public static void gen_bc_testA() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestA(code, BC); createJavaFile(code, 32, 2, 5); } public static void gen_cc_testA() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestA(code, CC); createJavaFile(code, 32, 2, 6); } public static void gen_bb_testB() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestB(code, BB); createJavaFile(code, 68, 2, 1); } public static void gen_bc_testB() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestB(code, BC); createJavaFile(code, 68, 2, 2); } public static void gen_cc_testB() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestB(code, CC); createJavaFile(code, 68, 2, 3); } public static void gen_cc_testC() throws Exception { StringBuffer code= new StringBuffer(); createTest_TestC(code, CC); createJavaFile(code, 119, 2, 1); } //------------- public static void createTest_TestA(StringBuffer code, int qualifier) { createTest(instanceLevel[qualifier], M1, code); createTest(instanceLevel[qualifier], M2, code); createTest(0, S2, code); } public static void createTest_TestB(StringBuffer code, int qualifier) { createTest(instanceLevel[qualifier], M1, code); createTest(instanceLevel[qualifier], M2, code); createTest(1, S2, code); createTest(instanceLevel[qualifier], M3, code); createTest(instanceLevel[qualifier], M4, code); createTest(1, S4, code); createTestQualifier(SUPER_A, M1, code); createTestQualifier(SUPER_A, M2, code); } public static void createTest_TestC(StringBuffer code, int qualifier) { createTest(instanceLevel[qualifier], M1, code); createTest(instanceLevel[qualifier], M2, code); createTest(2, S2, code); createTest(instanceLevel[qualifier], M3, code); createTest(instanceLevel[qualifier], M4, code); createTest(2, S4, code); createTest(instanceLevel[qualifier], M5, code); createTest(instanceLevel[qualifier], M6, code); createTest(2, S6, code); createTestQualifier(SUPER_B, M1, code); createTestQualifier(SUPER_B, M2, code); createTestQualifier(SUPER_B, M3, code); createTestQualifier(SUPER_B, M4, code); } //------------- public static void createTest(int level, int method, StringBuffer code) { String strMethod= methods[method]; code.append("\tpublic void testEvalNestedTypeTest_" + strMethod + "() throws Throwable {\n"); tryBlockBegin(code); genCodeEval("\"" + strMethod + "()\"", true, code); genCodeReturnTypeCheck(strMethod, "int", true, code); genCodeReturnValueCheckPrimitiveType(strMethod, "int", "Int", IInternalDebugCoreConstants.EMPTY_STRING + values[level][method], true, code); tryBlockEnd(code); code.append("\t}\n\n"); } public static void createTestQualifier(int qualifier, int method, StringBuffer code) { String strQualifier= qualifiers[qualifier]; String nameQualifier= strQualifier.replace('(', '_').replace(')', '_').replace(' ', '_'); String strMethod= methods[method]; int[] level= ((method + 1) % 3 == 0) ? staticLevel : instanceLevel; code.append("\tpublic void testEvalNestedTypeTest_" + nameQualifier + "_" + strMethod + "() throws Throwable {\n"); tryBlockBegin(code); genCodeEval("\"" + strQualifier + "." + strMethod + "()\"", true, code); genCodeReturnTypeCheck(strQualifier + "." + strMethod, "int", true, code); genCodeReturnValueCheckPrimitiveType(strQualifier + "." + strMethod, "int", "Int", IInternalDebugCoreConstants.EMPTY_STRING + values[level[qualifier]][method], true, code); tryBlockEnd(code); code.append("\t}\n\n"); } //------------ public static void createJavaFile(StringBuffer tests, int lineNumber, int numberFrames, int hitCount) throws Exception { StringBuffer code= new StringBuffer(); code.append("/*******************************************************************************\n"); code.append(" * Copyright (c) 2002, 2003 IBM Corporation and others.\n"); code.append(" * All rights reserved. This program and the accompanying materials \n"); code.append(" * are made available under the terms of the Eclipse Public License v1.0\n"); code.append(" * which accompanies this distribution, and is available at\n"); code.append(" * http://www.eclipse.org/legal/epl-v10.html\n"); code.append(" * \n"); code.append(" * Contributors:\n"); code.append(" * IBM Corporation - initial API and implementation\n"); code.append(" *******************************************************************************/\n"); code.append("package org.eclipse.jdt.debug.tests.eval;\n\n"); code.append("import org.eclipse.debug.core.model.IValue;\n"); code.append("import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;\n\n"); code.append("public class TypeHierarchy_" + lineNumber + "_" + hitCount + " extends Tests {\n"); code.append("\t/**\n"); code.append("\t * Constructor for TypeHierarchy.\n"); code.append("\t * @param name\n"); code.append("\t */\n"); code.append("\tpublic TypeHierarchy_" + lineNumber + "_" + hitCount + "(String name) {\n"); code.append("\t\tsuper(name);\n"); code.append("\t}\n\n"); code.append("\tpublic void init() throws Exception {\n"); code.append("\t\tinitializeFrame(\"EvalTypeHierarchyTests\", " + lineNumber + ", " + numberFrames + ", " + hitCount + ");\n"); code.append("\t}\n\n"); code.append("\tprotected void end() throws Exception {\n"); code.append("\t\tdestroyFrame();\n"); code.append("\t}\n\n"); code.append(tests.toString()); code.append("}\n"); try (Writer file = new FileWriter(new File("TypeHierarchy_" + lineNumber + "_" + hitCount + ".java").getAbsoluteFile())) { file.write(code.toString()); } } }