/************************************************************************** * Copyright (c) 2001 by Acunia N.V. All rights reserved. * * * * This software is copyrighted by and is the sole property of Acunia N.V. * * and its licensors, if any. All rights, title, ownership, or other * * interests in the software remain the property of Acunia N.V. and its * * licensors, if any. * * * * This software may only be used in accordance with the corresponding * * license agreement. Any unauthorized use, duplication, transmission, * * distribution or disclosure of this software is expressly forbidden. * * * * This Copyright notice may not be removed or modified without prior * * written consent of Acunia N.V. * * * * Acunia N.V. reserves the right to modify this software without notice. * * * * Acunia N.V. * * Vanden Tymplestraat 35 info@acunia.com * * 3000 Leuven http://www.acunia.com * * Belgium - EUROPE * **************************************************************************/ /* * @(#)AcuniaMethodSubWriter.java * */ package com.acunia.doclet; import com.sun.tools.doclets.standard.*; import java.util.*; import com.sun.tools.doclets.*; import com.sun.javadoc.*; /** * * @author Gerrit Ruelens * @author Dries Buytaert */ public class AcuniaMethodSubWriter extends MethodSubWriter { protected AcuniaMethodSubWriter(SubWriterHolderWriter writer) { super(writer); } protected void printTags(ProgramElementDoc member) { super.printTags(member); MethodDoc method = (MethodDoc)member; writer.dl(); writer.dt(); writer.boldText("doclet.result"); writer.dd(); writer.print(FailSearch(method.qualifiedName(), method.signature(), method.returnType().toString())); writer.ddEnd(); writer.dt(); writer.boldText("doclet.status"); writer.dd(); Tag t1[] = method.tags("status"); if (t1.length > 0) { writer.print(t1[0].text()); } else { writer.print("implemented"); } writer.ddEnd(); writer.dt(); writer.boldText("doclet.remark"); writer.dd(); Tag t2[] = method.tags("remark"); if (t2.length > 0) { writer.print(t2[0].text()); } else { writer.print("compliant to specification"); } writer.ddEnd(); writer.dlEnd(); } public static synchronized String FailSearch(String qn,String signature,String returnType) { List fList = AcuniaDoclet.getFailResults(); List pList = AcuniaDoclet.getPassResults(); Iterator enum = fList.iterator(); while(enum.hasNext()) { SingleResult res = (SingleResult) enum.next(); String qfn = res.getClazz() +"."+res.getMethod(); //System.out.println("*** Comparing "+qfn+" with "+qn); if (qfn.equals(qn)) { //System.out.println("*** We might have a Winner here ... "+qfn); //System.out.println("*** Comparing "+res.getReturnValue()+" with "+returnType); if (!(res.getReturnValue().equals(returnType))) { //System.out.println("wrong returntype"); continue; } List paramlist = res.getParams(); if (paramlist!=null) { Iterator e=paramlist.iterator(); String paramString1="("; String paramString2="("; String hlp=null ; while(e.hasNext()) { hlp = (String) e.next(); paramString1=paramString1+hlp; paramString2=paramString2+hlp; if (e.hasNext()) { paramString1=paramString1+", "; paramString2=paramString2+","; } } paramString1=paramString1+")"; paramString2=paramString2+")"; //System.out.println("*** Comparing "+paramString1+" with "+signature); if (!(paramString1.equals(signature) || paramString2.equals(signature))) { //System.out.println("wrong parametertypes"); continue; } } else{ //System.out.println("null paramList encountered"); if (!"()".equals(signature)) { continue; } } //System.out.println("Returning "+res.getTestMessage()); while(fList.remove(res)){}; while(pList.remove(res)){}; return "<B><FONT COLOR=\"red\">FAIL:</FONT></B> "+res.getTestMessage(); } else { continue; } } //System.out.println("method didn't fail test :"+qn+signature+returnType); return PassSearch(qn,signature, returnType); } /** * PassSearch * * Looks if the method is tested */ public static synchronized String PassSearch(String qn,String signature,String returnType) { List pList = AcuniaDoclet.getPassResults(); Iterator enum = pList.iterator(); while(enum.hasNext()) { SingleResult res = (SingleResult) enum.next(); String qfn = res.getClazz() +"."+res.getMethod(); //System.out.println("*** Comparing "+qfn+" with "+qn); if (qfn.equals(qn)) { //System.out.println("*** We might have a Winner here ... "+qfn); //System.out.println("*** Comparing "+res.getReturnValue()+" with "+returnType); if (!(res.getReturnValue().equals(returnType))) { //System.out.println("wrong returntype"); continue; } List paramlist = res.getParams(); if (paramlist!=null) { Iterator e=paramlist.iterator(); String paramString1="("; String sthlp = null; String paramString2="("; while(e.hasNext()) { sthlp = (String) e.next(); paramString1=paramString1+sthlp; paramString2=paramString2+sthlp; if (e.hasNext()) { paramString1=paramString1+", "; paramString2=paramString2+","; } } paramString1=paramString1+")"; paramString2=paramString2+")"; //System.out.println("*** Comparing "+paramString2+" with "+signature); if (!(paramString1.equals(signature)||paramString1.equals(signature))) { //System.out.println("wrong parametertypes"); continue; } } else{ //System.out.println("null paramList encountered"); if (!"()".equals(signature)) { continue; } } //System.out.println("Returning passed tests"); pList.remove(res); return "passed tests"; } else { //System.out.println("wrong method"); continue; } } //System.out.println("no tests implemented for this method"); return "no tests implemented for this method"; } }