| /* 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); |
| }); |
| }); |
| }); |