blob: a7eb11fccca4d574483d8793f802f08def12b129 [file] [log] [blame]
/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */
// Tests of coverage.py HTML report chunk navigation.
/*global coverage, jQuery, $ */
// Test helpers
function selection_is(assert, sel) {
raw_selection_is(assert, sel, true);
}
function raw_selection_is(assert, sel, check_highlight) {
var beg = sel[0], end = sel[1];
assert.equal(coverage.sel_begin, beg);
assert.equal(coverage.sel_end, end);
if (check_highlight) {
assert.equal($(".linenos .highlight").length, end-beg);
}
}
// The spec is a list of "rbw" letters, indicating colors of successive lines.
// We set the show_r and show_b classes for r and b.
function build_fixture(spec) {
var i, data;
$("#fixture-template").tmpl().appendTo("#qunit-fixture");
for (i = 0; i < spec.length; i++) {
data = {number: i+1, klass: spec.substr(i, 1)};
$("#lineno-template").tmpl(data).appendTo("#qunit-fixture .linenos");
$("#text-template").tmpl(data).appendTo("#qunit-fixture .text");
}
coverage.pyfile_ready(jQuery);
}
// Tests
// Zero-chunk tests
QUnit.module("Zero-chunk navigation", {
beforeEach: function () {
build_fixture("wwww");
}
});
QUnit.test("set_sel defaults", function (assert) {
coverage.set_sel(2);
assert.equal(coverage.sel_begin, 2);
assert.equal(coverage.sel_end, 3);
});
QUnit.test("No first chunk to select", function (assert) {
coverage.to_first_chunk();
assert.expect(0);
});
// One-chunk tests
$.each([
['rrrrr', [1,6]],
['r', [1,2]],
['wwrrrr', [3,7]],
['wwrrrrww', [3,7]],
['rrrrww', [1,5]]
], function (i, params) {
// Each of these tests uses a fixture with one highlighted chunks.
var id = params[0];
var c1 = params[1];
QUnit.module("One-chunk navigation - " + id, {
beforeEach: function () {
build_fixture(id);
}
});
QUnit.test("First chunk", function (assert) {
coverage.to_first_chunk();
selection_is(assert, c1);
});
QUnit.test("Next chunk is first chunk", function (assert) {
coverage.to_next_chunk();
selection_is(assert, c1);
});
QUnit.test("There is no next chunk", function (assert) {
coverage.to_first_chunk();
coverage.to_next_chunk();
selection_is(assert, c1);
});
QUnit.test("There is no prev chunk", function (assert) {
coverage.to_first_chunk();
coverage.to_prev_chunk();
selection_is(assert, c1);
});
});
// Two-chunk tests
$.each([
['rrwwrrrr', [1,3], [5,9]],
['rb', [1,2], [2,3]],
['rbbbbbbbbbb', [1,2], [2,12]],
['rrrrrrrrrrb', [1,11], [11,12]],
['wrrwrrrrw', [2,4], [5,9]],
['rrrbbb', [1,4], [4,7]]
], function (i, params) {
// Each of these tests uses a fixture with two highlighted chunks.
var id = params[0];
var c1 = params[1];
var c2 = params[2];
QUnit.module("Two-chunk navigation - " + id, {
beforeEach: function () {
build_fixture(id);
}
});
QUnit.test("First chunk", function (assert) {
coverage.to_first_chunk();
selection_is(assert, c1);
});
QUnit.test("Next chunk is first chunk", function (assert) {
coverage.to_next_chunk();
selection_is(assert, c1);
});
QUnit.test("Move to next chunk", function (assert) {
coverage.to_first_chunk();
coverage.to_next_chunk();
selection_is(assert, c2);
});
QUnit.test("Move to first chunk", function (assert) {
coverage.to_first_chunk();
coverage.to_next_chunk();
coverage.to_first_chunk();
selection_is(assert, c1);
});
QUnit.test("Move to previous chunk", function (assert) {
coverage.to_first_chunk();
coverage.to_next_chunk();
coverage.to_prev_chunk();
selection_is(assert, c1);
});
QUnit.test("Next doesn't move after last chunk", function (assert) {
coverage.to_first_chunk();
coverage.to_next_chunk();
coverage.to_next_chunk();
selection_is(assert, c2);
});
QUnit.test("Prev doesn't move before first chunk", function (assert) {
coverage.to_first_chunk();
coverage.to_next_chunk();
coverage.to_prev_chunk();
coverage.to_prev_chunk();
selection_is(assert, c1);
});
});
QUnit.module("Miscellaneous");
QUnit.test("Jump from a line selected", function (assert) {
build_fixture("rrwwrr");
coverage.set_sel(3);
coverage.to_next_chunk();
selection_is(assert, [5,7]);
});
// Tests of select_line_or_chunk.
$.each([
// The data for each test: a spec for the fixture to build, and an array
// of the selection that will be selected by select_line_or_chunk for
// each line in the fixture.
['rrwwrr', [[1,3], [1,3], [3,4], [4,5], [5,7], [5,7]]],
['rb', [[1,2], [2,3]]],
['r', [[1,2]]],
['w', [[1,2]]],
['www', [[1,2], [2,3], [3,4]]],
['wwwrrr', [[1,2], [2,3], [3,4], [4,7], [4,7], [4,7]]],
['rrrwww', [[1,4], [1,4], [1,4], [4,5], [5,6], [6,7]]],
['rrrbbb', [[1,4], [1,4], [1,4], [4,7], [4,7], [4,7]]]
], function (i, params) {
// Each of these tests uses a fixture with two highlighted chunks.
var id = params[0];
var sels = params[1];
QUnit.module("Select line or chunk - " + id, {
beforeEach: function () {
build_fixture(id);
}
});
$.each(sels, function (i, sel) {
i++;
QUnit.test("Select line " + i, function (assert) {
coverage.select_line_or_chunk(i);
raw_selection_is(assert, sel);
});
});
});