Skip to content

Commit d6f4b06

Browse files
committed
Merge branch 'html-escaping'
Refs #88
2 parents 1cfc323 + faa6af5 commit d6f4b06

File tree

6 files changed

+33
-23
lines changed

6 files changed

+33
-23
lines changed

lib/pmdtester/builders/pmd_report_builder.rb

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def build_pmd(into_dir:)
6868
' -Dmaven.javadoc.skip=true' \
6969
' -Dmaven.source.skip=true' \
7070
' -Dcheckstyle.skip=true' \
71+
' -Dpmd.skip=true' \
7172
' -T1C'
7273
Cmd.execute(package_cmd)
7374
end

pmdtester.gemspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
1111
s.metadata = { "bug_tracker_uri" => "https://github.com/pmd/pmd-regression-tester/issues", "homepage_uri" => "https://pmd.github.io", "source_code_uri" => "https://github.com/pmd/pmd-regression-tester" } if s.respond_to? :metadata=
1212
s.require_paths = ["lib".freeze]
1313
s.authors = ["Andreas Dangel".freeze, "Binguo Bao".freeze, "Cl\u00E9ment Fournier".freeze]
14-
s.date = "2021-01-15"
14+
s.date = "2021-03-29"
1515
s.description = "A regression testing tool ensure that new problems and unexpected behaviors will not be introduced to PMD project after fixing an issue , and new rules can work as expected.".freeze
1616
s.email = ["[email protected]".freeze, "[email protected]".freeze, "[email protected]".freeze]
1717
s.executables = ["pmdtester".freeze]
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
2121
s.licenses = ["BSD-2-Clause".freeze]
2222
s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
2323
s.required_ruby_version = Gem::Requirement.new(">= 2.7".freeze)
24-
s.rubygems_version = "3.1.4".freeze
24+
s.rubygems_version = "3.1.2".freeze
2525
s.summary = "A regression testing tool ensure that new problems and unexpected behaviors will not be introduced to PMD project after fixing an issue , and new rules can work as expected.".freeze
2626

2727
if s.respond_to? :specification_version then

resources/css/pmd-tester.css

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ body, td, select, input, li{
88
code {
99
font-family: Courier, monospace;
1010
font-size: 13pt;
11+
white-space: pre;
1112
}
1213
code.highlight {
1314
background-color: yellow;

resources/js/code-snippets.js

+26-19
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Simple module to fetch code snippets via ajax.
33
* Only supports github hosted code repos.
4-
*
4+
*
55
* Usage:
66
* var el = document.createElement('p');
77
* var url = 'https://github.com/checkstyle/checkstyle/tree/checkstyle-8.0/src/it/resources/com/google/checkstyle/test/chapter4formatting/rule4822variabledistance/InputVariableDeclarationUsageDistanceCheck.java'
@@ -11,53 +11,60 @@
1111
*/
1212
(function() {
1313
const contextLines = 3;
14+
const nbsp = "\u00a0";
1415

16+
// returns text, not html
1517
function formatLineNumber(number) {
16-
var prefix = "";
18+
let prefix;
1719
if (number < 10) {
18-
prefix = "&nbsp;&nbsp;&nbsp;";
20+
prefix = nbsp.repeat(3);
1921
} else if (number < 100) {
20-
prefix = "&nbsp;&nbsp;";
22+
prefix = nbsp.repeat(2);
2123
} else if (number < 1000) {
22-
prefix = "&nbsp;";
24+
prefix = nbsp;
2325
}
2426
return prefix + number;
2527
}
2628

27-
function fetchSnippet(el, url, line, weburl) {
29+
function fetchSnippet(document, container, url, line, weburl) {
2830
var weburl, requestUrl, oReq;
2931

3032
requestUrl = url.replace(/github.com/, "raw.githubusercontent.com");
3133
requestUrl = requestUrl.replace(/(tree|blob)\//, "");
3234

3335
oReq = new XMLHttpRequest();
3436
oReq.addEventListener("load", function() {
35-
var html, lines, start, deleteCount;
37+
let lines, start, deleteCount;
38+
39+
// we'll append stuff in the loop below
40+
container.innerHTML = '<p><a href="' + weburl + '" target="_blank" rel="noopener noreferrer">' + weburl + '</a></p>';
3641

37-
html = '<p><a href="' + weburl + '" target="_blank" rel="noopener noreferrer">' + weburl + '</a></p>';
3842
lines = this.responseText.split(/\r\n|\n/);
3943
start = line - contextLines;
4044
if (start > 0) {
41-
lines.splice(0, start);
45+
lines.splice(0, start); // remove lines before
4246
}
4347
deleteCount = lines.length - (2 * contextLines) + 1;
44-
lines.splice(2 * contextLines - 1, deleteCount);
45-
46-
lines.forEach(element => {
48+
lines.splice(2 * contextLines - 1, deleteCount); // delete lines after
49+
50+
// now we have just the lines which will be displayed
51+
lines.forEach(line => {
4752
start++;
48-
if (start == line) {
49-
html += "<code class=\"highlight\">";
50-
} else {
51-
html += "<code>";
53+
let lineElt = document.createElement("code");
54+
if (start === line) {
55+
lineElt.classList.add("highlight");
5256
}
53-
html += formatLineNumber(start) + "&nbsp;" + element + "</code><br>";
57+
// createTextNode escapes special chars
58+
lineElt.appendChild(document.createTextNode(formatLineNumber(start) + nbsp + line));
59+
lineElt.appendChild(document.createElement("br"));
60+
61+
container.appendChild(lineElt); // append to the container
5462
});
55-
el.innerHTML = html;
5663
});
5764
oReq.open("GET", requestUrl);
5865
oReq.send();
5966

60-
el.innerHTML = "<tt>fetching...</tt>";
67+
container.innerHTML = "<samp>fetching...</samp>";
6168
}
6269

6370
window.pmd_code_snippets = {

resources/js/project-report.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ $(document).ready(function () {
2323
function renderCodeSnippet(violation) {
2424
var node = document.createElement('p');
2525
var url = project.source_link_base + '/' + project.file_index[violation.f];
26-
window.pmd_code_snippets.fetch(node, url, violation.l, makeCodeLink(violation));
26+
window.pmd_code_snippets.fetch(document, node, url, violation.l, makeCodeLink(violation));
2727
return node;
2828
}
2929

test/test_pmd_report_builder.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ def test_build_normal
7272
# PMD binary does not exist yet this time...
7373
record_expectations('sha1abc', 'sha1abc', false)
7474
PmdTester::Cmd.stubs(:execute).with('./mvnw clean package -Dmaven.test.skip=true' \
75-
' -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Dcheckstyle.skip=true -T1C').once
75+
' -Dmaven.javadoc.skip=true -Dmaven.source.skip=true' \
76+
' -Dcheckstyle.skip=true -Dpmd.skip=true -T1C').once
7677
PmdTester::Cmd.stubs(:execute).with("unzip -qo pmd-dist/target/pmd-bin-#{@pmd_version}.zip" \
7778
' -d pmd-dist/target/exploded').once
7879
PmdTester::Cmd.stubs(:execute).with("mv pmd-dist/target/exploded/pmd-bin-#{@pmd_version}" \

0 commit comments

Comments
 (0)