| Index: tools/code_coverage/example.croc
|
| ===================================================================
|
| --- tools/code_coverage/example.croc (revision 0)
|
| +++ tools/code_coverage/example.croc (revision 0)
|
| @@ -0,0 +1,222 @@
|
| +# -*- python -*-
|
| +
|
| +# Copyright 2009, Google Inc.
|
| +# All rights reserved.
|
| +#
|
| +# Redistribution and use in source and binary forms, with or without
|
| +# modification, are permitted provided that the following conditions are
|
| +# met:
|
| +#
|
| +# * Redistributions of source code must retain the above copyright
|
| +# notice, this list of conditions and the following disclaimer.
|
| +# * Redistributions in binary form must reproduce the above
|
| +# copyright notice, this list of conditions and the following disclaimer
|
| +# in the documentation and/or other materials provided with the
|
| +# distribution.
|
| +# * Neither the name of Google Inc. nor the names of its
|
| +# contributors may be used to endorse or promote products derived from
|
| +# this software without specific prior written permission.
|
| +#
|
| +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| +
|
| +# Example configuration file for Croc
|
| +
|
| +# Basic formatting rules:
|
| +# * It looks like JSON.
|
| +# * It's really python.
|
| +# * Dictionaries are wrapped in {}. Order does not matter. Entries are of
|
| +# the form:
|
| +# 'key':value,
|
| +# Note the trailing comma, which will help save you from python's built-in
|
| +# string concatenation.
|
| +# * Lists are wrapped in []. Order does matter. Entries should be followed
|
| +# with a trailing comma, which will help save you from python's built-in
|
| +# string concatenation.
|
| +# * Comments start with # and extend to end of line.
|
| +# * Strings are wrapped in ''. Backslashes must be escaped ('foo\\bar', not
|
| +# 'foo\bar') - this is particularly important in rule regular expressions.
|
| +
|
| +
|
| +# What follows is the main configuration dictionary.
|
| +{
|
| + # List of root directories, applied in order.
|
| + #
|
| + # Typically, coverage data files contain absolute paths to the sources.
|
| + # What you care about is usually a relative path from the top of your source
|
| + # tree (referred to here as a 'source root') to the sources.
|
| + #
|
| + # Roots may also be specified on the command line via the --root option.
|
| + # Roots specified by --root are applied before those specified in config
|
| + # files.
|
| + 'roots' : [
|
| + # Each entry is a dict.
|
| + # * It must contain a 'root' entry, which is the start of a path.
|
| + # * Root entries may be absolute paths
|
| + # * Root entries starting with './' or '../' are relative paths, and
|
| + # are taken relative to the current directory where you run croc.
|
| + # * Root entries may start with previously defined altnames.
|
| + # * Use '/' as a path separator, even on Windows.
|
| + # * It may contain a 'altname' entry. If the root matches the start of
|
| + # a filename, that start is replaced with the 'altname', or with '_'
|
| + # if no default is specified.
|
| + # * Multiple root entries may share the same altname. This is commonly
|
| + # used when combining LCOV files from different platforms into one
|
| + # coverage report, when each platform checks out source code into a
|
| + # different source tree.
|
| + {'root' : 'c:/P4/EarthHammer'},
|
| + {'root' : 'd:/pulse/recipes/330137642/base'},
|
| + {'root' : '/Volumes/BuildData/PulseData/data/recipes/330137640/base'},
|
| + {'root' : '/usr/local/google/builder/.pulse-agent/data/recipes/330137641/base'},
|
| +
|
| + # Sub-paths we specifically care about and want to call out. Note that
|
| + # these are relative to the default '_' altname.
|
| + {
|
| + 'root' : '_/googleclient/third_party/software_construction_toolkit/files',
|
| + 'altname' : 'SCT',
|
| + },
|
| + {
|
| + 'root' : '_/googleclient/tools/hammer',
|
| + 'altname' : 'HAMMER',
|
| + },
|
| + ],
|
| +
|
| + # List of rules, applied in order.
|
| + 'rules' : [
|
| + # Each rule is a dict.
|
| + # * It must contaihn a 'regexp' entry. Filenames which match this
|
| + # regular expression (after applying mappings from 'roots') are
|
| + # affected by the rule.
|
| + #
|
| + # * Other entries in the dict are attributes to apply to matching files.
|
| + #
|
| + # Allowed attributes:
|
| + #
|
| + # 'include' : If 1, the file will be included in coverage reports. If 0,
|
| + # it won't be included in coverage reports.
|
| + #
|
| + # 'group' : Name of the group the file belongs to. The most common
|
| + # group names are 'source' and 'test'. Files must belong to
|
| + # a group to be included in coverage reports.
|
| + #
|
| + # 'language' : Programming language for the file. The most common
|
| + # languages are 'C', 'C++', 'python', 'ObjC', 'ObjC++'.
|
| + # Files must have a language to be included in coverage
|
| + # reports.
|
| + #
|
| + # 'add_if_missing' : If 1, and the file was not referenced by any LCOV
|
| + # files, it will be be scanned for executable lines
|
| + # and added to the coverage report. If 0, if the
|
| + # file is not referenced by any LCOV files, it will
|
| + # simply be ignored and not present in coverage
|
| + # reports.
|
| +
|
| + # Files/paths to include
|
| + {
|
| + 'regexp' : '^(SCT|HAMMER)/',
|
| + 'include' : 1,
|
| + 'add_if_missing': 1,
|
| + },
|
| + {
|
| + 'regexp' : '.*/(\\.svn|\\.hg)/',
|
| + 'include' : 0,
|
| + },
|
| +
|
| + # Groups
|
| + {
|
| + 'regexp' : '',
|
| + 'group' : 'source',
|
| + },
|
| + {
|
| + 'regexp' : '.*_(test|test_mac|unittest)\\.',
|
| + 'group' : 'test',
|
| + },
|
| +
|
| + # Languages
|
| + {
|
| + 'regexp' : '.*\\.py$',
|
| + 'language' : 'python',
|
| + },
|
| + ],
|
| +
|
| + # List of paths to add source from.
|
| + #
|
| + # Each entry is a path. It may be a local path, or one relative to a root
|
| + # altname (see 'roots' above).
|
| + #
|
| + # If more than one root's altname matches the start of this path, all matches
|
| + # will be attempted; matches where the candidate directory doesn't exist will
|
| + # be ignored. For example, if you're combining data from multiple platforms'
|
| + # LCOV files, you probably defined at least one root per LCOV, but only have
|
| + # one copy of the source on your local platform. That's fine; Croc will use
|
| + # the source it can find and not worry about the source it can't.
|
| + #
|
| + # Source files must be added via 'add_files' to generate line-by-line HTML
|
| + # output (via the --html option) and/or to scan for missing executable lines
|
| + # (if 'add_if_missing' is 1).
|
| + 'add_files' : [
|
| + 'SCT',
|
| + 'HAMMER',
|
| + ],
|
| +
|
| + # Statistics to print.
|
| + #
|
| + 'print_stats' : [
|
| + # Each entry is a dict.
|
| + #
|
| + # It must have a 'stat' entry, which is the statistic to print. This may
|
| + # be one of the following stats:
|
| + #
|
| + # * files_executable
|
| + # * files_instrumented
|
| + # * files_covered
|
| + # * lines_executable
|
| + # * lines_instrumented
|
| + # * lines_covered
|
| + #
|
| + # or an expression using those stats.
|
| + #
|
| + # It may have a 'format' entry, which is a python formatting string (very
|
| + # printf-like) for the statistic.
|
| + #
|
| + # It may have a 'group' entry. If this is specified, only files from the
|
| + # matching group will be included in the statistic. If not specified, the
|
| + # group defaults to 'all', which means all groups.
|
| + {
|
| + 'stat' : 'files_executable',
|
| + 'format' : '*RESULT FilesKnown: files_executable= %d files',
|
| + },
|
| + {
|
| + 'stat' : 'files_instrumented',
|
| + 'format' : '*RESULT FilesInstrumented: files_instrumented= %d files',
|
| + },
|
| + {
|
| + 'stat' : '100.0 * files_instrumented / files_executable',
|
| + 'format' : '*RESULT FilesInstrumentedPercent: files_instrumented_percent= %g',
|
| + },
|
| + {
|
| + 'stat' : 'lines_instrumented',
|
| + 'format' : '*RESULT LinesInstrumented: lines_instrumented= %d lines',
|
| + },
|
| + {
|
| + 'stat' : 'lines_covered',
|
| + 'format' : '*RESULT LinesCoveredSource: lines_covered_source= %d lines',
|
| + 'group' : 'source',
|
| + },
|
| + {
|
| + 'stat' : 'lines_covered',
|
| + 'format' : '*RESULT LinesCoveredTest: lines_covered_test= %d lines',
|
| + 'group' : 'test',
|
| + },
|
| + ],
|
| +
|
| +}
|
|
|