buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/listener/HlmAntUnitListener.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
 * All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
 * Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
 * Description:  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
package com.nokia.helium.ant.coverage.listener;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
import java.io.File;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import java.io.FileOutputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.io.IOException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import java.io.OutputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import java.io.OutputStreamWriter;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import java.io.PrintWriter;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import java.io.StringWriter;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import java.util.Enumeration;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import java.util.Hashtable;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import java.util.Map;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
import org.apache.ant.antunit.listener.BaseAntUnitListener;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
import org.apache.tools.ant.BuildEvent;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
import org.apache.tools.ant.BuildException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
import org.apache.tools.ant.BuildListener;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
import org.apache.tools.ant.Project;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
import org.apache.tools.ant.ProjectHelper;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
import org.apache.tools.ant.Target;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
import com.nokia.helium.ant.coverage.AntMacros;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
import com.nokia.helium.ant.coverage.AntScriptDefs;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
import com.nokia.helium.ant.coverage.AntTargets;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
import freemarker.cache.ClassTemplateLoader;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
import freemarker.template.Configuration;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
import freemarker.template.Template;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
import freemarker.template.TemplateException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
 * Helium antunit listener. This listener will collect the information of test
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
 * targets run and feeds the information into ParseTestFiles to get the tested
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
 * targets, macros and scriptdefs information.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
public class HlmAntUnitListener extends BaseAntUnitListener {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    private static final String NEW_LINE = System.getProperty("line.separator");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    private OutputStream out;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    private AntTargets antTargets;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    private AntMacros antMacro;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    private AntScriptDefs antScriptDef;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    private PrintWriter wri;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    private StringWriter inner;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    private File outputFile;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
     * Default constructor.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    public HlmAntUnitListener() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
        super(new BaseAntUnitListener.SendLogTo(SendLogTo.ANT_LOG), "txt");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
        antTargets = new AntTargets();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
        antMacro = new AntMacros();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
        antScriptDef = new AntScriptDefs();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
    /*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
     * (non-Javadoc)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
     * @see org.apache.ant.antunit.AntUnitListener#endTest(java.lang.String)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
    @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
    public void endTest(String target) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
    /*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
     * (non-Javadoc)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
     * @see
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
     * org.apache.ant.antunit.AntUnitListener#endTestSuite(org.apache.tools.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
     * ant.Project, java.lang.String)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
    @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
    public void endTestSuite(Project testProject, String buildFile) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
            StringWriter ftlWriter = new StringWriter();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
            Configuration cfg = new Configuration();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
            Template template = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
            cfg.setTemplateLoader(new ClassTemplateLoader(this.getClass(), ""));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
            template = cfg.getTemplate("ant_coverage_report.txt.ftl");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
            Map<String, Object> data = new Hashtable<String, Object>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
            data.put("target_percentage", (int)this.getTargetCoverage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
            data.put("target_testcases", antTargets.getExecutedCount());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
            data.put("total_targets", antTargets.getCount());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
            data.put("macros_percentage", (int)this.getMacroCoverage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
            data.put("macros_testcases", antMacro.getExecutedCount());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
            data.put("total_macros", antMacro.getCount());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
            data.put("scriptdefs_percentage", (int)this.getScriptDefCoverage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
            data.put("scriptdefs_testcases", antScriptDef.getExecutedCount());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
            data.put("total_scriptdefs", antScriptDef.getCount());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
            template.process(data, ftlWriter);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
            if (getOutputFile() != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
                File outputFile = getOutputFile();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
                if (!outputFile.getParentFile().exists()) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
                    outputFile.getParentFile().mkdirs();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
                OutputStreamWriter output = new OutputStreamWriter(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
                        new FileOutputStream(getOutputFile()));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
                output.append(ftlWriter.getBuffer().toString());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
                output.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
                output = new OutputStreamWriter(new FileOutputStream(outputFile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
                        .getParentFile().toString()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
                        + File.separator + "target.plot.property"));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
                output.append("YVALUE=" + (int)this.getTargetCoverage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
                output.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
                output = new OutputStreamWriter(new FileOutputStream(outputFile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
                        .getParentFile().toString()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
                        + File.separator + "macro.plot.property"));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
                output.append("YVALUE=" + (int)this.getMacroCoverage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
                output.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
                output = new OutputStreamWriter(new FileOutputStream(outputFile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
                        .getParentFile().toString()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
                        + File.separator + "scriptdef.plot.property"));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
                output.append("YVALUE="
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
                        + (int)this.getScriptDefCoverage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
                output.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
            } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
                StringBuffer sb = new StringBuffer(NEW_LINE);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
                sb.append(ftlWriter.getBuffer().toString());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
                if (out != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
                    out.write(sb.toString().getBytes());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
                    wri.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
                    out.write(inner.toString().getBytes());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
                    out.flush();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
        } catch (IOException ioe) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
            throw new BuildException(ioe.getMessage(), ioe);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
        } catch (TemplateException ftle) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
            throw new BuildException(ftle.getMessage(), ftle);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
        } finally {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
            close(out);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
    /*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
     * (non-Javadoc)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
     * @see
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
     * org.apache.ant.antunit.listener.BaseAntUnitListener#startTestSuite(org
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
     * .apache.tools.ant.Project, java.lang.String)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
    public void startTestSuite(Project testProject, String buildFile) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
        inner = new StringWriter();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
        wri = new PrintWriter(inner);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
        out = getOut(buildFile);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
        addTargets(testProject);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
        addMacros(testProject);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
        addScriptDefs(testProject);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
    /*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
     * (non-Javadoc)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
     * @see
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
     * org.apache.ant.antunit.listener.BaseAntUnitListener#startTest(java.lang
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
     * .String)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
    public void startTest(String target) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
     * @param outputFile
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
     *            the outputFile to set
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
    public void setOutputFile(File outputFile) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
        this.outputFile = outputFile;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
     * Returns the output file path.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
     * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   195
    public File getOutputFile() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
        return outputFile;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   197
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
     * To add Ant targets.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
     * @param project
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
    @SuppressWarnings("unchecked")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
    private void addTargets(Project project) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
        Hashtable<String, Target> projectTargets = project.getTargets();
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   207
        Enumeration<String> targetEnum = projectTargets.keys();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   208
        while (targetEnum.hasMoreElements()) {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   209
            String key = targetEnum.nextElement();            
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
            if (!isAntUnitTestTarget(key) && key.length() > 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
                antTargets.add((Target) projectTargets.get(key));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   213
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   217
     * To add Ant macros.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
     * @param project
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
    @SuppressWarnings("unchecked")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
    private void addMacros(Project project) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
        Hashtable<String, Class> projectMacros = project.getTaskDefinitions();
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   224
        Enumeration<String> macrosEnum = projectMacros.keys();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   225
        while (macrosEnum.hasMoreElements()) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   226
            String key = macrosEnum.nextElement();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
            Class newTask = projectMacros.get(key);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
            if (newTask.getName().equals(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
                    "org.apache.tools.ant.taskdefs.MacroInstance")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
                String macroName = ProjectHelper
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
                        .extractNameFromComponentName(key);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
                if (macroName != null && !macroName.contains("assert")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
                    antMacro.add(macroName);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
     * To add Ant scriptdefs.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
     * @param project
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
    @SuppressWarnings("unchecked")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
    private void addScriptDefs(Project project) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
        Hashtable<String, Class> projectMacros = project.getTaskDefinitions();
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   247
        Enumeration<String> scriptDefsEnum = projectMacros.keys();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   248
        while (scriptDefsEnum.hasMoreElements()) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   249
            String key = scriptDefsEnum.nextElement();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
            Class newTask = projectMacros.get(key);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
            if (newTask
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
                    .getName()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
                    .equals(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
                            "org.apache.tools.ant.taskdefs.optional.script.ScriptDefBase")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
                String scriptdefName = ProjectHelper
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
                        .extractNameFromComponentName(key);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
                if (scriptdefName != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
                    antScriptDef.add(scriptdefName);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
     * To get the Target covered percentage.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
     * @param measure
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
     * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
    private float getTargetCoverage() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
        if (antTargets.getCount() == 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
            return 100;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
        } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
            return ((float)antTargets.getExecutedCount() / (float)antTargets
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
                    .getCount()) * 100;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
     * To get Macros covered percentage.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
     * @param measure
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
     * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
    private float getMacroCoverage() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
        if (antMacro.getCount() == 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
            return 100;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
        } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
            return ((float)antMacro.getExecutedCount() / (float)antMacro.getCount()) * 100;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   293
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   294
     * To get ScriptDefs covered percentage.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   295
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   296
     * @param measure
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
     * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   298
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   299
    private float getScriptDefCoverage() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
        if (antScriptDef.getCount() == 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
            return 100;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
        } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
            return ((float)antScriptDef.getExecutedCount() / (float)antScriptDef
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
                    .getCount()) * 100;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   305
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   306
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   309
     * Listener for collecting the targets/tasks information. This listener will
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
     * collect from the targets which actually run by test projects.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   311
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   312
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   313
    private class AntListener implements BuildListener {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   314
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   315
        @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   316
        public void buildFinished(BuildEvent event) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   318
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
        @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   320
        public void buildStarted(BuildEvent event) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   323
        @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   324
        public void messageLogged(BuildEvent event) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   325
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   326
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   327
        @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   328
        public void targetFinished(BuildEvent event) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   329
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   330
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   331
        @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   332
        public void targetStarted(BuildEvent event) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   333
            String targetName = event.getTarget().getName();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   334
            if (!isAntUnitTestTarget(targetName) && targetName.length() > 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   335
                antTargets.markAsExecuted(targetName);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   336
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   337
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   338
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   339
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   340
        @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   341
        public void taskFinished(BuildEvent event) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   342
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   343
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   344
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   345
        @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   346
        public void taskStarted(BuildEvent event) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   347
            // macro and scriptdef are creating UnknownElement type of tasks
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   348
            if (event.getTask().getTaskType() != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   349
                String taskName = ProjectHelper
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   350
                        .extractNameFromComponentName(event.getTask()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   351
                                .getTaskType());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   352
                if (taskName != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   353
                    antMacro.markAsExecuted(taskName);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   354
                    antScriptDef.markAsExecuted(taskName);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   355
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   356
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   357
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   358
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   359
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   360
    /*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   361
     * (non-Javadoc)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   362
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   363
     * @see
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   364
     * org.apache.ant.antunit.listener.BaseAntUnitListener#setCurrentTestProject
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   365
     * (org.apache.tools.ant.Project)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   366
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   367
    @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   368
    public void setCurrentTestProject(Project p) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   369
        p.addBuildListener(new AntListener());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   370
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   371
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   372
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   373
     * Check is the target is a special name for AntUnit.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   374
     * @param targetName
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   375
     * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   376
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   377
    public static boolean isAntUnitTestTarget(String targetName) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   378
        if (targetName == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   379
            return false;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   380
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   381
        if ((targetName.startsWith("test") && !targetName.equals("test"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   382
            || targetName.equals("setUp") || targetName.equals("tearDown")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   383
            return true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   384
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   385
        return false;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   386
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   387
}