1*ef39d40dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*ef39d40dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ef39d40dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ef39d40dSAndrew Rist * distributed with this work for additional information 6*ef39d40dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ef39d40dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ef39d40dSAndrew Rist * "License"); you may not use this file except in compliance 9*ef39d40dSAndrew Rist * with the License. You may obtain a copy of the License at 10*ef39d40dSAndrew Rist * 11*ef39d40dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*ef39d40dSAndrew Rist * 13*ef39d40dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ef39d40dSAndrew Rist * software distributed under the License is distributed on an 15*ef39d40dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ef39d40dSAndrew Rist * KIND, either express or implied. See the License for the 17*ef39d40dSAndrew Rist * specific language governing permissions and limitations 18*ef39d40dSAndrew Rist * under the License. 19*ef39d40dSAndrew Rist * 20*ef39d40dSAndrew Rist *************************************************************/ 21*ef39d40dSAndrew Rist 22*ef39d40dSAndrew Rist 23cdf0e10cSrcweir package helper; 24cdf0e10cSrcweir 25cdf0e10cSrcweir import complexlib.ComplexTestCase; 26cdf0e10cSrcweir import util.DynamicClassLoader; 27cdf0e10cSrcweir import share.DescEntry; 28cdf0e10cSrcweir import share.DescGetter; 29cdf0e10cSrcweir import share.ComplexTest; 30cdf0e10cSrcweir import java.util.Vector; 31cdf0e10cSrcweir import share.LogWriter; 32cdf0e10cSrcweir 33cdf0e10cSrcweir /** 34cdf0e10cSrcweir * 35cdf0e10cSrcweir */ 36cdf0e10cSrcweir public class ComplexDescGetter extends DescGetter 37cdf0e10cSrcweir { 38cdf0e10cSrcweir 39cdf0e10cSrcweir ComplexTest testClass; 40cdf0e10cSrcweir 41cdf0e10cSrcweir /** Creates new ComplexDescGetter */ ComplexDescGetter()42cdf0e10cSrcweir public ComplexDescGetter() 43cdf0e10cSrcweir { 44cdf0e10cSrcweir testClass = null; 45cdf0e10cSrcweir } 46cdf0e10cSrcweir getDescriptionFor(String entry, String DescPath, boolean debug)47cdf0e10cSrcweir public DescEntry[] getDescriptionFor(String entry, String DescPath, 48cdf0e10cSrcweir boolean debug) 49cdf0e10cSrcweir { 50cdf0e10cSrcweir // read scenario file 51cdf0e10cSrcweir if (entry.startsWith("-sce")) 52cdf0e10cSrcweir { 53cdf0e10cSrcweir DescEntry[] entries = getScenario(entry.substring(5), null, debug); 54cdf0e10cSrcweir return entries; 55cdf0e10cSrcweir } 56cdf0e10cSrcweir // one single job 57cdf0e10cSrcweir else if (entry.startsWith("-o")) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir DescEntry dEntry = getDescriptionForSingleJob(entry.substring(3), null, debug); 60cdf0e10cSrcweir if (dEntry != null) 61cdf0e10cSrcweir { 62cdf0e10cSrcweir return new DescEntry[] 63cdf0e10cSrcweir { 64cdf0e10cSrcweir dEntry 65cdf0e10cSrcweir }; 66cdf0e10cSrcweir } 67cdf0e10cSrcweir } 68cdf0e10cSrcweir System.out.println("Could not get a testjob with parameter '" + entry + "'"); 69cdf0e10cSrcweir // no job available 70cdf0e10cSrcweir return null; 71cdf0e10cSrcweir } 72cdf0e10cSrcweir getDescriptionForSingleJob(String className, String descPath, boolean debug)73cdf0e10cSrcweir protected DescEntry getDescriptionForSingleJob(String className, String descPath, boolean debug) 74cdf0e10cSrcweir { 75cdf0e10cSrcweir DynamicClassLoader dcl = new DynamicClassLoader(); 76cdf0e10cSrcweir String methodNames[] = null; 77cdf0e10cSrcweir 78cdf0e10cSrcweir if (debug) 79cdf0e10cSrcweir { 80cdf0e10cSrcweir System.out.println("Searching Class: " + className); 81cdf0e10cSrcweir } 82cdf0e10cSrcweir 83cdf0e10cSrcweir int index = className.indexOf("::"); 84cdf0e10cSrcweir if (index != -1) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir // case1: method() 87cdf0e10cSrcweir // case2: method(param1,param2) 88cdf0e10cSrcweir // case3: method1(param1,param2),method2(param1,param2) 89cdf0e10cSrcweir String method = className.substring(index + 2); 90cdf0e10cSrcweir className = className.substring(0, index); 91cdf0e10cSrcweir Vector methods = new Vector(); 92cdf0e10cSrcweir 93cdf0e10cSrcweir String[] split = method.split("(?<=\\)),(?=\\w+)"); 94cdf0e10cSrcweir 95cdf0e10cSrcweir for (int i = 0; i < split.length; i++) 96cdf0e10cSrcweir { 97cdf0e10cSrcweir String meth = split[i]; 98cdf0e10cSrcweir 99cdf0e10cSrcweir if (meth.endsWith("()")) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir meth = meth.substring(0, meth.length() - 2); 102cdf0e10cSrcweir } 103cdf0e10cSrcweir 104cdf0e10cSrcweir methods.add(meth); 105cdf0e10cSrcweir } 106cdf0e10cSrcweir 107cdf0e10cSrcweir methodNames = new String[methods.size()]; 108cdf0e10cSrcweir methodNames = (String[]) methods.toArray(methodNames); 109cdf0e10cSrcweir } 110cdf0e10cSrcweir 111cdf0e10cSrcweir // create an instance 112cdf0e10cSrcweir try 113cdf0e10cSrcweir { 114cdf0e10cSrcweir testClass = (ComplexTestCase) dcl.getInstance(className); 115cdf0e10cSrcweir } 116cdf0e10cSrcweir catch (java.lang.IllegalArgumentException e) 117cdf0e10cSrcweir { 118cdf0e10cSrcweir System.out.println("Error while getting description for test '" + className + "' as a Complex test."); 119cdf0e10cSrcweir return null; 120cdf0e10cSrcweir } 121cdf0e10cSrcweir catch (java.lang.ClassCastException e) 122cdf0e10cSrcweir { 123cdf0e10cSrcweir System.out.println("The given class '" + className + "' is not a Complex test."); 124cdf0e10cSrcweir return null; 125cdf0e10cSrcweir } 126cdf0e10cSrcweir 127cdf0e10cSrcweir 128cdf0e10cSrcweir if (debug) 129cdf0e10cSrcweir { 130cdf0e10cSrcweir System.out.println("Got test: " + ((Object) testClass).toString()); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir String testObjectName = className; 134cdf0e10cSrcweir String[] testMethodNames = null; 135cdf0e10cSrcweir 136cdf0e10cSrcweir if (testMethodNames == null) 137cdf0e10cSrcweir { 138cdf0e10cSrcweir testMethodNames = testClass.getTestMethodNames(); 139cdf0e10cSrcweir } 140cdf0e10cSrcweir if (methodNames != null) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir testMethodNames = methodNames; 143cdf0e10cSrcweir } 144cdf0e10cSrcweir 145cdf0e10cSrcweir DescEntry dEntry = createTestDesc(testObjectName, className, testMethodNames, null); 146cdf0e10cSrcweir 147cdf0e10cSrcweir return dEntry; 148cdf0e10cSrcweir } 149cdf0e10cSrcweir 150cdf0e10cSrcweir /** 151cdf0e10cSrcweir * Creates a description exntry for the given parameter 152cdf0e10cSrcweir * @param testObjectName the name of the object 153cdf0e10cSrcweir * @param className the class name of the class to load 154cdf0e10cSrcweir * @param testMethodNames list of all methods to test 155cdf0e10cSrcweir * @param log 156cdf0e10cSrcweir * @return filled description entry 157cdf0e10cSrcweir */ createTestDesc(String testObjectName, String className, String[] testMethodNames, LogWriter log)158cdf0e10cSrcweir public DescEntry createTestDesc(String testObjectName, String className, String[] testMethodNames, LogWriter log) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir 161cdf0e10cSrcweir DescEntry dEntry = new DescEntry(); 162cdf0e10cSrcweir 163cdf0e10cSrcweir dEntry.entryName = testObjectName; 164cdf0e10cSrcweir dEntry.longName = className; 165cdf0e10cSrcweir dEntry.isOptional = false; 166cdf0e10cSrcweir dEntry.EntryType = "unit"; 167cdf0e10cSrcweir dEntry.isToTest = true; 168cdf0e10cSrcweir dEntry.Logger = log; 169cdf0e10cSrcweir dEntry.SubEntryCount = testMethodNames.length; 170cdf0e10cSrcweir dEntry.SubEntries = new DescEntry[dEntry.SubEntryCount]; 171cdf0e10cSrcweir for (int i = 0; i < dEntry.SubEntryCount; i++) 172cdf0e10cSrcweir { 173cdf0e10cSrcweir DescEntry aEntry = new DescEntry(); 174cdf0e10cSrcweir aEntry.entryName = testMethodNames[i]; 175cdf0e10cSrcweir aEntry.longName = testObjectName + "::" + aEntry.entryName; 176cdf0e10cSrcweir aEntry.isOptional = false; 177cdf0e10cSrcweir aEntry.EntryType = "method"; 178cdf0e10cSrcweir aEntry.isToTest = true; 179cdf0e10cSrcweir dEntry.SubEntries[i] = aEntry; 180cdf0e10cSrcweir dEntry.Logger = log; 181cdf0e10cSrcweir } 182cdf0e10cSrcweir 183cdf0e10cSrcweir return dEntry; 184cdf0e10cSrcweir } 185cdf0e10cSrcweir createScenario(String descPath, String job, boolean debug)186cdf0e10cSrcweir protected String[] createScenario(String descPath, String job, boolean debug) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir return new String[] {}; 189cdf0e10cSrcweir } 190cdf0e10cSrcweir } 191