diff --git a/tools/CoverageAnalyzer.py b/tools/CoverageAnalyzer.py new file mode 100644 index 0000000000000000000000000000000000000000..6e27ad57a4bdd0277355bc93743ec966974b7619 --- /dev/null +++ b/tools/CoverageAnalyzer.py @@ -0,0 +1,78 @@ +# Copyright (c) 2009 Microsoft Corporation +# +# 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 Microsoft 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. + + +#--IMPORTS--------------------------------------------------------------------- +import os +import sys + +#--GLOBALS--------------------------------------------------------------------- +CVG_DICT = {} + +#--HELPERS--------------------------------------------------------------------- +def getCoverageData(directory): + tempList = os.listdir(directory) + #Build up a list of directories under directory + dirList = [x for x in tempList if os.path.isdir(os.path.join(directory, x))] + #Build up a list of JavaScript files under the current directory + jsList = [x for xin in tempList if x.endswith(".js")] + + #If the directory contains JavaScript files we'll assume they're all test + #cases + if len(jsList)!=0: + CVG_DICT[os.path.split(directory)[1]] = len(jsList) + + #This might have just been a directory containing other dirs. Call ourself on + #it as well + for x in dirList: + getCoverageData(os.path.join(directory, x)) + + +def emitCoverageData(cvgDict): + totalTests = 0 + totalSections = 0 + keyList = cvgDict.keys() + keyList.sort(chapterCompare) + for cvgKey in keyList: + print cvgKey, ",", cvgDict[cvgKey] + totalSections+=1 + totalTests+=cvgDict[cvgKey] + print + print "Total number of tests is:", totalTests, "." + print "These tests cover", totalSections, "ECMAScript 5 sections." + + +def chapterCompare(x, y): + if ("." in x) and ("." in y): + try: + x1 = int(x[0:x.index(".")]) + y1 = int(y[0:y.index(".")]) + if x1==y1: + return chapterCompare(x[x.index(".")+1:], y[y.index(".")+1:]) + return cmp(x1, y1) + except ValueError: + pass + return cmp(x, y) + +#--MAIN------------------------------------------------------------------------ +startDir = sys.argv[1] +getCoverageData(startDir) +print "Emitting ECMAScript 5 coverage data for", startDir, "..." +emitCoverageData(CVG_DICT) \ No newline at end of file