[Cmake-commits] CMake branch, next, updated. v3.0.2-2228-g70f065d

Joe Snyder joe.snyder at kitware.com
Mon Oct 27 17:27:57 EDT 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  70f065d1cbaff76b4e55b4fc6f778cc7d0b37775 (commit)
       via  06763b65cc08f24882a1ee9eecc44b427ee99b3d (commit)
      from  4a8b6430d970256653729a695b74f73cc2434fde (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=70f065d1cbaff76b4e55b4fc6f778cc7d0b37775
commit 70f065d1cbaff76b4e55b4fc6f778cc7d0b37775
Merge: 4a8b643 06763b6
Author:     Joe Snyder <joe.snyder at kitware.com>
AuthorDate: Mon Oct 27 17:27:55 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Oct 27 17:27:55 2014 -0400

    Merge topic 'add_javascript_coverage_parser' into next
    
    06763b65 CTest: Add Javascript coverage parser


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=06763b65cc08f24882a1ee9eecc44b427ee99b3d
commit 06763b65cc08f24882a1ee9eecc44b427ee99b3d
Author:     Joseph Snyder <joe.snyder at kitware.com>
AuthorDate: Thu Oct 23 17:03:30 2014 -0400
Commit:     Joseph Snyder <joe.snyder at kitware.com>
CommitDate: Mon Oct 27 17:26:58 2014 -0400

    CTest: Add Javascript coverage parser
    
    Add a coverage parser for the Blanket.js library using the JSON output of
    the mocha.js test runner.
    
    Add a test for the new parser.

diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 97f4a89..7705683 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -522,6 +522,7 @@ set(CTEST_SRCS cmCTest.cxx
   CTest/cmParseCacheCoverage.cxx
   CTest/cmParseGTMCoverage.cxx
   CTest/cmParseJacocoCoverage.cxx
+  CTest/cmParseBlanketJSCoverage.cxx
   CTest/cmParsePHPCoverage.cxx
   CTest/cmParseCoberturaCoverage.cxx
   CTest/cmParseDelphiCoverage.cxx
diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx
index 7d3c6bc..8dc22a8 100644
--- a/Source/CTest/cmCTestCoverageHandler.cxx
+++ b/Source/CTest/cmCTestCoverageHandler.cxx
@@ -16,6 +16,7 @@
 #include "cmParseCacheCoverage.h"
 #include "cmParseJacocoCoverage.h"
 #include "cmParseDelphiCoverage.h"
+#include "cmParseBlanketJSCoverage.h"
 #include "cmCTest.h"
 #include "cmake.h"
 #include "cmMakefile.h"
@@ -424,6 +425,13 @@ int cmCTestCoverageHandler::ProcessHandler()
     return error;
     }
 
+  file_count += this->HandleBlanketJSCoverage(&cont);
+  error = cont.Error;
+  if ( file_count < 0 )
+    {
+    return error;
+    }
+
     file_count += this->HandleDelphiCoverage(&cont);
   error = cont.Error;
   if ( file_count < 0 )
@@ -927,10 +935,12 @@ int cmCTestCoverageHandler::HandleDelphiCoverage(
   std::vector<std::string> files;
   g.SetRecurse(true);
 
+
   std::string BinDir
     = this->CTest->GetBinaryDir();
   std::string coverageFile = BinDir+ "/*.html";
 
+
   g.FindFiles(coverageFile);
   files=g.GetFiles();
   if (files.size() > 0)
@@ -947,6 +957,36 @@ int cmCTestCoverageHandler::HandleDelphiCoverage(
     }
   return static_cast<int>(cont->TotalCoverage.size());
 }
+
+//----------------------------------------------------------------------
+int cmCTestCoverageHandler::HandleBlanketJSCoverage(
+  cmCTestCoverageHandlerContainer* cont)
+  {
+  cmParseBlanketJSCoverage cov =
+   cmParseBlanketJSCoverage(*cont, this->CTest);
+  std::string SourceDir
+    = this->CTest->GetCTestConfiguration("SourceDirectory");
+
+  //Look for something other than output.json, still JSON extension.
+  std::string coverageFile = SourceDir+ "/*.json";
+  cmsys::Glob g;
+  std::vector<std::string> files;
+  g.FindFiles(coverageFile);
+  files=g.GetFiles();
+  if (files.size() > 0)
+    {
+    cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+      "Found BlanketJS output JSON, Performing Coverage" << std::endl);
+    cov.LoadCoverageData(files);
+    }
+  else
+    {
+    cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+       " Cannot find BlanketJS coverage files: " << coverageFile
+       << std::endl);
+    }
+  return static_cast<int>(cont->TotalCoverage.size());
+  }
 //----------------------------------------------------------------------
 int cmCTestCoverageHandler::HandleGCovCoverage(
   cmCTestCoverageHandlerContainer* cont)
diff --git a/Source/CTest/cmCTestCoverageHandler.h b/Source/CTest/cmCTestCoverageHandler.h
index 01c5d7f..4aec795 100644
--- a/Source/CTest/cmCTestCoverageHandler.h
+++ b/Source/CTest/cmCTestCoverageHandler.h
@@ -87,6 +87,9 @@ private:
   //! Handle coverage for Delphi (Pascal)
   int HandleDelphiCoverage(cmCTestCoverageHandlerContainer* cont);
 
+  //! Handle coverage for Jacoco
+  int HandleBlanketJSCoverage(cmCTestCoverageHandlerContainer* cont);
+
 //! Handle coverage using Bullseye
   int HandleBullseyeCoverage(cmCTestCoverageHandlerContainer* cont);
   int RunBullseyeSourceSummary(cmCTestCoverageHandlerContainer* cont);
diff --git a/Source/CTest/cmParseBlanketJSCoverage.cxx b/Source/CTest/cmParseBlanketJSCoverage.cxx
new file mode 100644
index 0000000..b353cf0
--- /dev/null
+++ b/Source/CTest/cmParseBlanketJSCoverage.cxx
@@ -0,0 +1,171 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2009 Kitware, Inc.
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#include "cmStandardIncludes.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "cmSystemTools.h"
+#include "cmParseBlanketJSCoverage.h"
+#include <cmsys/Directory.hxx>
+#include <cmsys/Glob.hxx>
+#include <cmsys/FStream.hxx>
+
+
+class cmParseBlanketJSCoverage::JSONParser
+  {
+  public:
+    typedef cmCTestCoverageHandlerContainer::
+        SingleFileCoverageVector
+       FileLinesType;
+    JSONParser(cmCTest* ctest, cmCTestCoverageHandlerContainer& cont)
+       : CTest(ctest), Coverage(cont)
+      {
+      }
+
+    virtual ~JSONParser()
+      {
+      }
+
+    std::string getValue(std::string line, int type)
+      {
+        size_t begIndex;
+        size_t endIndex;
+
+        endIndex = line.rfind(',');
+        begIndex = line.find_first_of(':');
+        if(type == 0)
+          {
+          //  A unique substring to remove the extra characters
+          //  around the files name in the JSON (extra " and ,)
+          std::string foundFileName =
+              line.substr(begIndex+3,endIndex-(begIndex+4));
+          return foundFileName;
+          }
+        else
+          {
+          return line.substr(begIndex,line.npos);
+          }
+      }
+    bool ParseFile(std::string file)
+      {
+      FileLinesType localCoverageVector;
+      std::string filename;
+      bool foundFile = false;
+      bool inSource  = false;
+      std::string covResult;
+      std::string line;
+
+      cmsys::ifstream in(file.c_str());
+      if(!in)
+        {
+        return false;
+        }
+      while(  cmSystemTools::GetLineFromStream(in, line))
+        {
+
+        if(line.find("filename") != line.npos)
+          {
+          if(foundFile)
+            {
+            /*
+            * Upon finding a second file name, generate a
+            * vector within the total coverage to capture the
+            * information in the local vector
+            */
+            FileLinesType& CoverageVector =
+                this->Coverage.TotalCoverage[filename.c_str()];
+            CoverageVector = localCoverageVector;
+            localCoverageVector.clear();
+            foundFile=false;
+            }
+          foundFile= true;
+          inSource = false;
+          filename = getValue(line,0).c_str();
+          }
+        else if((line.find("coverage") != line.npos) && foundFile && inSource )
+          {
+          /*
+          *  two types of "coverage" in the JSON structure
+          *
+          *  The coverage result over the file or set of files
+          *  and the coverage for each individual line
+          *
+          *  FoundFile and foundSource ensure that
+          *  only the value of the line coverage is captured
+          */
+          std::string result = getValue(line,1).c_str();
+          result = result.substr(2,result.npos);
+
+          if(result == "\"\"")
+            {
+            // Empty quotation marks indicate that the
+            // line is not executable
+            localCoverageVector.push_back(-1);
+            }
+          else
+            {
+            // Else, it contains the number of time executed
+            localCoverageVector.push_back(atoi(result.c_str()));
+            }
+          }
+        else if(line.find("source") != line.npos)
+          {
+          inSource=true;
+          }
+        }
+
+      // On exit, capture end of last file covered.
+      FileLinesType& CoverageVector =
+          this->Coverage.TotalCoverage[filename.c_str()];
+      CoverageVector = localCoverageVector;
+      foundFile=false;
+      localCoverageVector.clear();
+      return true;
+      }
+  private:
+    cmCTest* CTest;
+    cmCTestCoverageHandlerContainer& Coverage;
+  };
+
+cmParseBlanketJSCoverage::cmParseBlanketJSCoverage(
+  cmCTestCoverageHandlerContainer& cont,  cmCTest* ctest)
+  :Coverage(cont), CTest(ctest)
+  {
+  }
+
+bool cmParseBlanketJSCoverage::LoadCoverageData(std::vector<std::string> files)
+  {
+  size_t i=0;
+  std::string path;
+      cmCTestLog(this->CTest,HANDLER_VERBOSE_OUTPUT,
+       "Found " << files.size() <<" Files" << std::endl);
+  for(i=0;i<files.size();i++)
+    {
+    cmCTestLog(this->CTest,HANDLER_VERBOSE_OUTPUT,
+       "Reading JSON File " << files[i]  << std::endl);
+
+    if(!this->ReadJSONFile(files[i]))
+      {
+      return false;
+      }
+    }
+  return true;
+  }
+
+bool cmParseBlanketJSCoverage::ReadJSONFile(std::string file)
+  {
+  cmParseBlanketJSCoverage::JSONParser parser
+     (this->CTest,this->Coverage);
+  cmCTestLog(this->CTest,HANDLER_VERBOSE_OUTPUT,
+       "Parsing " << file << std::endl);
+  parser.ParseFile(file);
+  return true;
+  }
diff --git a/Source/CTest/cmParseBlanketJSCoverage.h b/Source/CTest/cmParseBlanketJSCoverage.h
new file mode 100644
index 0000000..a254263
--- /dev/null
+++ b/Source/CTest/cmParseBlanketJSCoverage.h
@@ -0,0 +1,48 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2009 Kitware, Inc.
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+
+#ifndef cmParseBlanketJSCoverage_h
+#define cmParseBlanketJSCoverage_h
+
+#include "cmStandardIncludes.h"
+#include "cmCTestCoverageHandler.h"
+
+
+/** \class cmParseBlanketJSCoverage
+ * \brief Parse BlanketJS coverage information
+ *
+ * This class is used to parse BlanketJS(Pascal) coverage information
+ * generated by the Blanket.js library when used in conjunction with the
+ * test runner mocha.js, which is used to write out the JSON format.
+ *
+ *  Blanket.js:
+ *  http://blanketjs.org/
+ *
+ *  Mocha.js
+ *  http://visionmedia.github.io/mocha/
+ */
+class cmParseBlanketJSCoverage
+  {
+  public:
+    cmParseBlanketJSCoverage(cmCTestCoverageHandlerContainer& cont,
+         cmCTest* ctest);
+    bool LoadCoverageData(std::vector<std::string> files);
+    //  Read the JSON output
+    bool ReadJSONFile(std::string file);
+
+  protected:
+
+    class JSONParser;
+    cmCTestCoverageHandlerContainer& Coverage;
+    cmCTest* CTest;
+  };
+#endif
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index e1e90a1..586f983 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -2339,6 +2339,25 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
       "Process file.*CoverageTest.java.*Total LOC:.*17.*Percentage Coverage: 76.47*"
       ENVIRONMENT COVFILE=)
 
+  # Adding a test case for Javascript Coverage
+  configure_file(
+     "${CMake_SOURCE_DIR}/Tests/JavascriptCoverage/DartConfiguration.tcl.in"
+     "${CMake_BINARY_DIR}/Testing/JavascriptCoverage/DartConfiguration.tcl")
+  configure_file(
+     "${CMake_SOURCE_DIR}/Tests/JavascriptCoverage/output.json.in"
+     "${CMake_BINARY_DIR}/Testing/JavascriptCoverage/output.json")
+  file(COPY "${CMake_SOURCE_DIR}/Tests/JavascriptCoverage/"
+    DESTINATION "${CMake_BINARY_DIR}/Testing/JavascriptCoverage"
+    FILES_MATCHING PATTERN "*.js")
+  add_test(NAME CTestJavascriptCoverage
+    COMMAND cmake -E chdir
+    ${CMake_BINARY_DIR}/Testing/JavascriptCoverage
+    $<TARGET_FILE:ctest> -T Coverage --debug)
+  set_tests_properties(CTestJavascriptCoverage PROPERTIES
+      PASS_REGULAR_EXPRESSION
+      "Process file.*test3.js.*Total LOC:.*49.*Percentage Coverage: 79.59*"
+      ENVIRONMENT COVFILE=)
+
   # test coverage for Delphi-code-Coverage
   configure_file(
      "${CMake_SOURCE_DIR}/Tests/DelphiCoverage/DartConfiguration.tcl.in"
diff --git a/Tests/JavascriptCoverage/DartConfiguration.tcl.in b/Tests/JavascriptCoverage/DartConfiguration.tcl.in
new file mode 100644
index 0000000..f94d988
--- /dev/null
+++ b/Tests/JavascriptCoverage/DartConfiguration.tcl.in
@@ -0,0 +1,8 @@
+# This file is configured by CMake automatically as DartConfiguration.tcl
+# If you choose not to use CMake, this file may be hand configured, by
+# filling in the required variables.
+
+
+# Configuration directories and files
+SourceDirectory: ${CMake_BINARY_DIR}/Testing/JavascriptCoverage
+BuildDirectory: ${CMake_BINARY_DIR}/Testing/JavascriptCoverage
diff --git a/Tests/JavascriptCoverage/output.json.in b/Tests/JavascriptCoverage/output.json.in
new file mode 100644
index 0000000..717cffe
--- /dev/null
+++ b/Tests/JavascriptCoverage/output.json.in
@@ -0,0 +1,448 @@
+{
+  "instrumentation": "node-jscoverage",
+  "sloc": 29,
+  "hits": 28,
+  "misses": 1,
+  "coverage": 96.55172413793103,
+  "files": [
+    {
+      "filename": "${CMake_BINARY_DIR}/Testing/JavascriptCoverage/test.js",
+      "coverage": 96.55172413793103,
+      "hits": 28,
+      "misses": 1,
+      "sloc": 29,
+      "source": {
+        "1": {
+          "source": "var assert = require(\"assert\")",
+          "coverage": 1
+        },
+        "2": {
+          "source": "var test  = {",
+          "coverage": 1
+        },
+        "3": {
+          "source": "  version: \"1.0.0\"",
+          "coverage": ""
+        },
+        "4": {
+          "source": "}",
+          "coverage": ""
+        },
+        "5": {
+          "source": "function covTest(p1,p2) {",
+          "coverage": 1
+        },
+        "6": {
+          "source": "  if (p1 > 3) {",
+          "coverage": 2
+        },
+        "7": {
+          "source": "    return 1;",
+          "coverage": 1
+        },
+        "8": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "9": {
+          "source": "  else {",
+          "coverage": ""
+        },
+        "10": {
+          "source": "    return p1 + p2;",
+          "coverage": 1
+        },
+        "11": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "12": {
+          "source": "}",
+          "coverage": ""
+        },
+        "13": {
+          "source": "",
+          "coverage": ""
+        },
+        "14": {
+          "source": "function covTest2(p1,p2) {",
+          "coverage": 1
+        },
+        "15": {
+          "source": "  return 0;",
+          "coverage": 0
+        },
+        "16": {
+          "source": "}",
+          "coverage": ""
+        },
+        "17": {
+          "source": "",
+          "coverage": ""
+        },
+        "18": {
+          "source": "function covTest3(p1) {",
+          "coverage": 1
+        },
+        "19": {
+          "source": "  for(i=0;i < p1;i++){",
+          "coverage": 1
+        },
+        "20": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "21": {
+          "source": "  return i;",
+          "coverage": 1
+        },
+        "22": {
+          "source": "}",
+          "coverage": ""
+        },
+        "23": {
+          "source": "function covTest4(p1) {",
+          "coverage": 1
+        },
+        "24": {
+          "source": "  i=0;",
+          "coverage": 1
+        },
+        "25": {
+          "source": "  while(i < p1){",
+          "coverage": 1
+        },
+        "26": {
+          "source": "  i++;",
+          "coverage": 5
+        },
+        "27": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "28": {
+          "source": "  return i;",
+          "coverage": 1
+        },
+        "29": {
+          "source": "}",
+          "coverage": ""
+        },
+        "30": {
+          "source": "",
+          "coverage": ""
+        },
+        "31": {
+          "source": "describe('Array', function(){",
+          "coverage": 1
+        },
+        "32": {
+          "source": "  describe('CovTest', function(){",
+          "coverage": 1
+        },
+        "33": {
+          "source": "    it('should return when the value is not present', function(){",
+          "coverage": 1
+        },
+        "34": {
+          "source": "      assert.equal(4,covTest(2,2));",
+          "coverage": 1
+        },
+        "35": {
+          "source": "    })",
+          "coverage": ""
+        },
+        "36": {
+          "source": "  })",
+          "coverage": ""
+        },
+        "37": {
+          "source": "  ",
+          "coverage": ""
+        },
+        "38": {
+          "source": "  describe('CovTest>3', function(){",
+          "coverage": 1
+        },
+        "39": {
+          "source": "    it('should return when the value is not present', function(){",
+          "coverage": 1
+        },
+        "40": {
+          "source": "      assert.equal(1,covTest(4,2));",
+          "coverage": 1
+        },
+        "41": {
+          "source": "    })",
+          "coverage": ""
+        },
+        "42": {
+          "source": "  })",
+          "coverage": ""
+        },
+        "43": {
+          "source": "  describe('covTest4', function(){",
+          "coverage": 1
+        },
+        "44": {
+          "source": "    it('should return when the value is not present', function(){",
+          "coverage": 1
+        },
+        "45": {
+          "source": "      assert.equal(5,covTest4(5));",
+          "coverage": 1
+        },
+        "46": {
+          "source": "    })",
+          "coverage": ""
+        },
+        "47": {
+          "source": "  })",
+          "coverage": ""
+        },
+        "48": {
+          "source": "  describe('covTest3', function(){",
+          "coverage": 1
+        },
+        "49": {
+          "source": "    it('should return when the value is not present', function(){",
+          "coverage": 1
+        },
+        "50": {
+          "source": "      assert.equal(5,covTest3(5));",
+          "coverage": 1
+        },
+        "51": {
+          "source": "    })",
+          "coverage": ""
+        },
+        "52": {
+          "source": "  })",
+          "coverage": ""
+        },
+        "53": {
+          "source": "})",
+          "coverage": ""
+        },
+        "54": {
+          "source": "",
+          "coverage": ""
+        }
+      }
+      "filename": "${CMake_BINARY_DIR}/Testing/JavascriptCoverage/test3.js",
+      "coverage": 55.00000000000001,
+      "hits": 11,
+      "misses": 9,
+      "sloc": 20,
+      "source": {
+        "1": {
+          "source": "var assert = require(\"assert\")",
+          "coverage": 1
+        },
+        "2": {
+          "source": "var test  = {",
+          "coverage": 1
+        },
+        "3": {
+          "source": "  version: \"1.0.0\"",
+          "coverage": ""
+        },
+        "4": {
+          "source": "}",
+          "coverage": ""
+        },
+        "5": {
+          "source": "function covTest(p1,p2) {",
+          "coverage": 1
+        },
+        "6": {
+          "source": "  if (p1 > 3) {",
+          "coverage": 0
+        },
+        "7": {
+          "source": "    return 1;",
+          "coverage": 0
+        },
+        "8": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "9": {
+          "source": "  else {",
+          "coverage": ""
+        },
+        "10": {
+          "source": "    return p1 + p2;",
+          "coverage": 0
+        },
+        "11": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "12": {
+          "source": "}",
+          "coverage": ""
+        },
+        "13": {
+          "source": "",
+          "coverage": ""
+        },
+        "14": {
+          "source": "function covTest2(p1,p2) {",
+          "coverage": 1
+        },
+        "15": {
+          "source": "  return 0;",
+          "coverage": 1
+        },
+        "16": {
+          "source": "}",
+          "coverage": ""
+        },
+        "17": {
+          "source": "",
+          "coverage": ""
+        },
+        "18": {
+          "source": "function covTest3(p1) {",
+          "coverage": 1
+        },
+        "19": {
+          "source": "  for(i=0;i < p1;i++){",
+          "coverage": 0
+        },
+        "20": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "21": {
+          "source": "  return i;",
+          "coverage": 0
+        },
+        "22": {
+          "source": "}",
+          "coverage": ""
+        },
+        "23": {
+          "source": "function covTest4(p1) {",
+          "coverage": 1
+        },
+        "24": {
+          "source": "  i=0;",
+          "coverage": 0
+        },
+        "25": {
+          "source": "  while(i < p1){",
+          "coverage": 0
+        },
+        "26": {
+          "source": "  i++;",
+          "coverage": 0
+        },
+        "27": {
+          "source": "  }",
+          "coverage": ""
+        },
+        "28": {
+          "source": "  return i;",
+          "coverage": 0
+        },
+        "29": {
+          "source": "}",
+          "coverage": ""
+        },
+        "30": {
+          "source": "",
+          "coverage": ""
+        },
+        "31": {
+          "source": "describe('Array', function(){",
+          "coverage": 1
+        },
+        "32": {
+          "source": "  describe('CovTest2', function(){",
+          "coverage": 1
+        },
+        "33": {
+          "source": "    it('should return when the value is not present', function(){",
+          "coverage": 1
+        },
+        "34": {
+          "source": "      assert.equal(0,covTest2(2,2));",
+          "coverage": 1
+        },
+        "35": {
+          "source": "    })",
+          "coverage": ""
+        },
+        "36": {
+          "source": "  })",
+          "coverage": ""
+        },
+        "37": {
+          "source": "})",
+          "coverage": ""
+        },
+        "38": {
+          "source": "",
+          "coverage": ""
+        }
+      }
+    }
+  ],
+  "stats": {
+    "suites": 5,
+    "tests": 4,
+    "passes": 4,
+    "pending": 0,
+    "failures": 0,
+    "start": "2014-10-23T17:56:02.339Z",
+    "end": "2014-10-23T17:56:02.344Z",
+    "duration": 5
+  },
+  "tests": [
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array CovTest should return when the value is not present",
+      "duration": 0
+    },
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array CovTest>3 should return when the value is not present",
+      "duration": 0
+    },
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array covTest4 should return when the value is not present",
+      "duration": 0
+    },
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array covTest3 should return when the value is not present",
+      "duration": 0
+    }
+  ],
+  "failures": [],
+  "passes": [
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array CovTest should return when the value is not present",
+      "duration": 0
+    },
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array CovTest>3 should return when the value is not present",
+      "duration": 0
+    },
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array covTest4 should return when the value is not present",
+      "duration": 0
+    },
+    {
+      "title": "should return when the value is not present",
+      "fullTitle": "Array covTest3 should return when the value is not present",
+      "duration": 0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Tests/JavascriptCoverage/test.js b/Tests/JavascriptCoverage/test.js
new file mode 100644
index 0000000..273e921c
--- /dev/null
+++ b/Tests/JavascriptCoverage/test.js
@@ -0,0 +1,53 @@
+var assert = require("assert")
+var test  = {
+  version: "1.0.0"
+}
+function covTest(p1,p2) {
+  if (p1 > 3) {
+    return 1;
+  }
+  else {
+    return p1 + p2;
+  }
+}
+
+function covTest2(p1,p2) {
+  return 0;
+}
+
+function covTest3(p1) {
+  for(i=0;i < p1;i++){
+  }
+  return i;
+}
+function covTest4(p1) {
+  i=0;
+  while(i < p1){
+  i++;
+  }
+  return i;
+}
+
+describe('Array', function(){
+  describe('CovTest', function(){
+    it('should return when the value is not present', function(){
+      assert.equal(4,covTest(2,2));
+    })
+  })
+
+  describe('CovTest>3', function(){
+    it('should return when the value is not present', function(){
+      assert.equal(1,covTest(4,2));
+    })
+  })
+  describe('covTest4', function(){
+    it('should return when the value is not present', function(){
+      assert.equal(5,covTest4(5));
+    })
+  })
+  describe('covTest3', function(){
+    it('should return when the value is not present', function(){
+      assert.equal(5,covTest3(5));
+    })
+  })
+})
diff --git a/Tests/JavascriptCoverage/test3.js b/Tests/JavascriptCoverage/test3.js
new file mode 100644
index 0000000..a1e31bc
--- /dev/null
+++ b/Tests/JavascriptCoverage/test3.js
@@ -0,0 +1,37 @@
+var assert = require("assert")
+var test  = {
+  version: "1.0.0"
+}
+function covTest(p1,p2) {
+  if (p1 > 3) {
+    return 1;
+  }
+  else {
+    return p1 + p2;
+  }
+}
+
+function covTest2(p1,p2) {
+  return 0;
+}
+
+function covTest3(p1) {
+  for(i=0;i < p1;i++){
+  }
+  return i;
+}
+function covTest4(p1) {
+  i=0;
+  while(i < p1){
+  i++;
+  }
+  return i;
+}
+
+describe('Array', function(){
+  describe('CovTest2', function(){
+    it('should return when the value is not present', function(){
+      assert.equal(0,covTest2(2,2));
+    })
+  })
+})

-----------------------------------------------------------------------

Summary of changes:
 Source/CMakeLists.txt                              |    1 +
 Source/CTest/cmCTestCoverageHandler.cxx            |   40 ++
 Source/CTest/cmCTestCoverageHandler.h              |    3 +
 Source/CTest/cmParseBlanketJSCoverage.cxx          |  171 ++++++++
 Source/CTest/cmParseBlanketJSCoverage.h            |   48 +++
 Tests/CMakeLists.txt                               |   19 +
 .../DartConfiguration.tcl.in                       |    4 +-
 Tests/JavascriptCoverage/output.json.in            |  448 ++++++++++++++++++++
 Tests/JavascriptCoverage/test.js                   |   53 +++
 Tests/JavascriptCoverage/test3.js                  |   37 ++
 10 files changed, 822 insertions(+), 2 deletions(-)
 create mode 100644 Source/CTest/cmParseBlanketJSCoverage.cxx
 create mode 100644 Source/CTest/cmParseBlanketJSCoverage.h
 copy Tests/{MumpsCoverage => JavascriptCoverage}/DartConfiguration.tcl.in (63%)
 create mode 100644 Tests/JavascriptCoverage/output.json.in
 create mode 100644 Tests/JavascriptCoverage/test.js
 create mode 100644 Tests/JavascriptCoverage/test3.js


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list