[gjs] coverage: Get the list of covered files from coverage.js
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs] coverage: Get the list of covered files from coverage.js
- Date: Tue, 30 Sep 2014 20:11:09 +0000 (UTC)
commit 58abf3bd48e3ee590176574f35e2e5f201be28cd
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Mon Feb 3 14:11:52 2014 -0500
coverage: Get the list of covered files from coverage.js
gjs/coverage.cpp | 59 ++++++++++++++++++++++++++++++++----
installed-tests/js/testCoverage.js | 6 ++-
modules/coverage.js | 8 +++++
test/gjs-test-coverage.cpp | 10 ++----
4 files changed, 68 insertions(+), 15 deletions(-)
---
diff --git a/gjs/coverage.cpp b/gjs/coverage.cpp
index f3c0980..893f17b 100644
--- a/gjs/coverage.cpp
+++ b/gjs/coverage.cpp
@@ -828,8 +828,6 @@ print_statistics_for_file(GjsCoverage *coverage,
NULL);
JSContext *context = (JSContext *) gjs_context_get_native_context(priv->context);
- JSAutoCompartment compartment(context, priv->coverage_statistics);
- JSAutoRequest ar(context);
JSString *filename_jsstr = JS_NewStringCopyZ(context, filename);
jsval filename_jsval = STRING_TO_JSVAL(filename_jsstr);
@@ -889,6 +887,50 @@ print_statistics_for_file(GjsCoverage *coverage,
g_free(absolute_output_directory);
}
+static char **
+get_covered_files(GjsCoverage *coverage)
+{
+ GjsCoveragePrivate *priv = (GjsCoveragePrivate *) gjs_coverage_get_instance_private(coverage);
+ JSContext *context = (JSContext *) gjs_context_get_native_context(priv->context);
+ jsval rval;
+ JSObject *files_obj;
+
+ char **files = NULL;
+ uint32_t n_files;
+
+ if (!JS_CallFunctionName(context, priv->coverage_statistics, "getCoveredFiles", 0, NULL, &rval)) {
+ gjs_log_exception(context);
+ goto error;
+ }
+
+ if (!rval.isObject())
+ goto error;
+
+ files_obj = &rval.toObject();
+ if (!JS_GetArrayLength(context, files_obj, &n_files))
+ goto error;
+
+ files = g_new0 (char *, n_files + 1);
+ for (uint32_t i = 0; i < n_files; i++) {
+ jsval element;
+ char *file;
+ if (!JS_GetElement(context, files_obj, i, &element))
+ goto error;
+
+ if (!gjs_string_to_utf8(context, element, &file))
+ goto error;
+
+ files[i] = file;
+ }
+
+ files[n_files] = NULL;
+ return files;
+
+ error:
+ g_strfreev(files);
+ return NULL;
+}
+
void
gjs_coverage_write_statistics(GjsCoverage *coverage,
const char *output_directory)
@@ -896,6 +938,10 @@ gjs_coverage_write_statistics(GjsCoverage *coverage,
GjsCoveragePrivate *priv = (GjsCoveragePrivate *) gjs_coverage_get_instance_private(coverage);
GError *error = NULL;
+ JSContext *context = (JSContext *) gjs_context_get_native_context(priv->context);
+ JSAutoCompartment compartment(context, priv->coverage_statistics);
+ JSAutoRequest ar(context);
+
/* Create output_directory if it doesn't exist */
g_mkdir_with_parents(output_directory, 0755);
@@ -911,10 +957,11 @@ gjs_coverage_write_statistics(GjsCoverage *coverage,
NULL,
&error));
- char **file_iter = priv->covered_paths;
- while (*file_iter) {
- print_statistics_for_file(coverage, *file_iter, output_directory, ostream);
- ++file_iter;
+ char **files = get_covered_files(coverage);
+ if (files) {
+ for (char **file_iter = files; *file_iter; file_iter++)
+ print_statistics_for_file(coverage, *file_iter, output_directory, ostream);
+ g_strfreev(files);
}
g_object_unref(ostream);
diff --git a/installed-tests/js/testCoverage.js b/installed-tests/js/testCoverage.js
index 1b92a86..eed37dc 100644
--- a/installed-tests/js/testCoverage.js
+++ b/installed-tests/js/testCoverage.js
@@ -810,9 +810,12 @@ Coverage.getFileContents = function(filename) {
function testCoverageStatisticsContainerFetchesValidStatisticsForFile() {
let container = new Coverage.CoverageStatisticsContainer(MockFilenames);
- let statistics = container.fetchStatistics('filename');
+ let statistics = container.fetchStatistics('filename');
JSUnit.assertNotEquals(undefined, statistics);
+
+ let files = container.getCoveredFiles();
+ assertArrayEquals(files, ['filename'], JSUnit.assertEquals);
}
function testCoverageStatisticsContainerThrowsForNonExistingFile() {
@@ -821,7 +824,6 @@ function testCoverageStatisticsContainerThrowsForNonExistingFile() {
JSUnit.assertRaises(function() {
container.fetchStatistics('nonexistent');
});
-
}
JSUnit.gjstestRun(this, JSUnit.setUp, JSUnit.tearDown);
diff --git a/modules/coverage.js b/modules/coverage.js
index 13fa4e3..cc5f72b 100644
--- a/modules/coverage.js
+++ b/modules/coverage.js
@@ -640,6 +640,10 @@ function CoverageStatisticsContainer(files) {
return coveredFiles[filename];
}
+ this.getCoveredFiles = function() {
+ return Object.keys(coveredFiles);
+ };
+
this.fetchStatistics = function(filename) {
let statistics = ensureStatisticsFor(filename);
if (statistics === undefined)
@@ -661,6 +665,10 @@ function CoverageStatistics(files) {
* a separate compartment inside of coverage.cpp */
this.dbg = new Debugger(debuggee);
+ this.getCoveredFiles = function() {
+ return this.container.getCoveredFiles();
+ };
+
this.getNumberOfLinesFor = function(filename) {
return fetchStatistics(filename).nLines;
};
diff --git a/test/gjs-test-coverage.cpp b/test/gjs-test-coverage.cpp
index c38b0e7..462c001 100644
--- a/test/gjs-test-coverage.cpp
+++ b/test/gjs-test-coverage.cpp
@@ -1138,13 +1138,9 @@ test_no_hits_to_coverage_data_for_unexecuted(gpointer fixture_data,
fixture->output_file_directory,
NULL);
- /* More than one assert per test is bad, but we are testing interlinked concepts */
- g_assert(coverage_data_contains_value_for_key(coverage_data_contents,
- "LF:",
- "1"));
- g_assert(coverage_data_contains_value_for_key(coverage_data_contents,
- "LH:",
- "0"));
+ /* No files were executed, so the coverage data is empty. */
+ g_assert_cmpstr(coverage_data_contents, ==, "");
+
g_free(coverage_data_contents);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]