001    /**
002     * www.jcoverage.com
003     * Copyright (C)2003 jcoverage ltd.
004     *
005     * This file is part of jcoverage.
006     *
007     * jcoverage is free software; you can redistribute it and/or modify
008     * it under the terms of the GNU General Public License as published
009     * by the Free Software Foundation; either version 2 of the License,
010     * or (at your option) any later version.
011     *
012     * jcoverage is distributed in the hope that it will be useful, but
013     * WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015     * General Public License for more details.
016     *
017     * You should have received a copy of the GNU General Public License
018     * along with jcoverage; if not, write to the Free Software
019     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
020     * USA
021     *
022     */
023    package com.jcoverage.coverage;
024    
025    import java.io.Serializable;
026    import java.util.Map;
027    import java.util.Set;
028    
029    /**
030     * Instrumentation information is typically serialized to a file. An
031     * instance of this class records coverage information for a single
032     * class that has been instrumented.
033     */
034    public interface Instrumentation extends Serializable {
035      /**
036       * default file name used to write instrumentation information.
037       */
038      String FILE_NAME="jcoverage.ser";
039    
040      /**
041       * Increment the number of hits for a particular line of code.
042       * @param lineNumber the line of code to increment the number of hits.
043       */
044      void touch(int lineNumber);
045    
046      /**
047       * @return a sorted coverage mapping from source line to number of
048       * hits.
049       */
050      Map getCoverage();
051    
052      /**
053       * @return the number of hits a particular line of code has.
054       * @param lineNumber the source code line number.
055       */
056      long getCoverage(int lineNumber);
057    
058      /**
059       * Merge some existing instrumentation with this instrumentation.
060       * @param instrumentation some existing instrumentation.
061       */
062      void merge(Instrumentation instrumentation);
063    
064      /**
065       * @return the set of valid source line numbers
066       */
067      Set getSourceLineNumbers();
068    
069      /**
070       * @return the line coverage rate for the class
071       */
072      double getLineCoverageRate();
073    
074      /**
075       * @return the branch coverage rate for the class
076       */
077      double getBranchCoverageRate();
078    
079      /**
080       * @return the line coverage rate for particular method
081       */
082      double getLineCoverageRate(String methodNameAndSignature);
083    
084      /**
085       * @return the branch coverage rate for a particular method
086       */
087      double getBranchCoverageRate(String methodNameAndSignature);
088    
089      /**
090       * @return the source file name.
091       */
092      String getSourceFileName();
093    
094      /**
095       * @return the method name and signature of each method found in the
096       * class represented by this instrumentation.
097       */
098      Set getMethodNamesAndSignatures();
099    }