summaryrefslogtreecommitdiff
path: root/test/gjs-test-coverage.cpp
diff options
context:
space:
mode:
authorPhilip Chimento <philip.chimento@gmail.com>2018-03-22 01:13:16 -0700
committerPhilip Chimento <philip.chimento@gmail.com>2018-03-25 21:43:28 -0700
commit235c1d9c55601d433e96d2d2be09e439193197ae (patch)
tree91099a33b16c951274a2fb9102eb8d2144ce1d75 /test/gjs-test-coverage.cpp
parent86d5d36834b96b66138dff94500a2f50e9eeb120 (diff)
downloadgjs-235c1d9c55601d433e96d2d2be09e439193197ae.tar.gz
tests: Skip coverage tests in JS_GC_ZEAL mode
See https://bugzilla.mozilla.org/show_bug.cgi?id=1447906 This works around a SpiderMonkey bug by skipping some of the coverage tests, which will fail if there are too many garbage collections. Closes #130.
Diffstat (limited to 'test/gjs-test-coverage.cpp')
-rw-r--r--test/gjs-test-coverage.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/gjs-test-coverage.cpp b/test/gjs-test-coverage.cpp
index 765e6a7b..3dbafe75 100644
--- a/test/gjs-test-coverage.cpp
+++ b/test/gjs-test-coverage.cpp
@@ -52,6 +52,20 @@ typedef struct _GjsCoverageFixture {
GFile *lcov_output;
} GjsCoverageFixture;
+// SpiderMonkey has a bug where collected coverage data is erased during a
+// garbage collection. If we're running the tests with JS_GC_ZEAL, then we get
+// a GC after every script execution, so we definitely won't have coverage.
+static bool
+skip_if_gc_zeal_mode(void)
+{
+ const char *gc_zeal = g_getenv("JS_GC_ZEAL");
+ if (gc_zeal && (strcmp(gc_zeal, "1") == 0 || strcmp(gc_zeal, "2") == 0)) {
+ g_test_skip("https://bugzilla.mozilla.org/show_bug.cgi?id=1447906");
+ return true;
+ }
+ return false;
+}
+
static void
replace_file(GFile *file,
const char *contents)
@@ -270,6 +284,9 @@ static void
test_covered_file_is_duplicated_into_output_if_resource(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *mock_resource_filename = "resource:///org/gnome/gjs/mock/test/gjs-test-coverage/loadedJSFromResource.js";
@@ -332,6 +349,9 @@ static void
test_covered_file_is_duplicated_into_output_if_path(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
eval_script(fixture->context, fixture->tmp_js_script);
@@ -371,6 +391,9 @@ static void
test_new_contents_written(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *existing_contents = "existing_contents\n";
replace_file(fixture->lcov_output, existing_contents);
@@ -391,6 +414,9 @@ static void
test_expected_source_file_name_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
char *coverage_data_contents =
@@ -512,6 +538,9 @@ static void
test_single_branch_coverage_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_basic_branch =
@@ -555,6 +584,9 @@ static void
test_multiple_branch_coverage_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_case_statements_branch =
@@ -603,6 +635,9 @@ static void
test_branches_for_multiple_case_statements_fallthrough(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_case_statements_branch =
@@ -677,6 +712,9 @@ static void
test_branch_not_hit_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_never_executed_branch =
@@ -722,6 +760,9 @@ static void
test_function_names_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_named_and_unnamed_functions =
@@ -770,6 +811,9 @@ static void
test_function_lines_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_functions =
@@ -837,6 +881,9 @@ static void
test_function_hit_counts_for_big_functions_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_executed_functions =
@@ -883,6 +930,9 @@ static void
test_function_hit_counts_for_little_functions_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_executed_functions =
@@ -925,6 +975,9 @@ static void
test_function_hit_counts_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_executed_functions =
@@ -965,6 +1018,9 @@ static void
test_total_function_coverage_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_some_executed_functions =
@@ -1022,6 +1078,9 @@ static void
test_single_line_hit_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
char *coverage_data_contents =
@@ -1046,6 +1105,9 @@ static void
test_hits_on_multiline_if_cond(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
const char *script_with_multine_if_cond =
@@ -1081,6 +1143,9 @@ static void
test_full_line_tally_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
char *coverage_data_contents =
@@ -1102,6 +1167,9 @@ static void
test_no_hits_to_coverage_data_for_unexecuted(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
char *coverage_data_contents =
@@ -1118,6 +1186,9 @@ static void
test_end_of_record_section_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageFixture *fixture = (GjsCoverageFixture *) fixture_data;
char *coverage_data_contents =
@@ -1205,6 +1276,9 @@ static void
test_multiple_source_file_records_written_to_coverage_data(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageMultpleSourcesFixutre *fixture = (GjsCoverageMultpleSourcesFixutre *) fixture_data;
char *coverage_data_contents =
@@ -1262,6 +1336,9 @@ static void
test_correct_line_coverage_data_written_for_both_source_file_sectons(gpointer fixture_data,
gconstpointer user_data)
{
+ if (skip_if_gc_zeal_mode())
+ return;
+
GjsCoverageMultpleSourcesFixutre *fixture = (GjsCoverageMultpleSourcesFixutre *) fixture_data;
char *coverage_data_contents =