Use linkedom in readability tests

This commit is contained in:
Hongbo Wu 2022-05-10 18:40:52 +08:00
parent cb7f30607a
commit ffa5dee721

View file

@ -1,6 +1,8 @@
var JSDOM = require("jsdom").JSDOM;
var chai = require("chai");
var sinon = require("sinon");
const { parseHTML } = require("linkedom");
chai.config.includeStack = true;
var expect = chai.expect;
@ -52,7 +54,7 @@ function htmlTransform(str) {
return str.replace(/\s+/g, " ");
}
function runTestsWithItems(label, domGenerationFn, source, expectedContent, expectedMetadata) {
function runTestsWithItems(label, domGenerationFn, source, expectedContent, expectedMetadata, uri) {
describe(label, function() {
this.timeout(30000);
@ -63,7 +65,7 @@ function runTestsWithItems(label, domGenerationFn, source, expectedContent, expe
var doc = domGenerationFn(source);
// Provide one class name to preserve, which we know appears in a few
// of the test documents.
var myReader = new Readability(doc, { classesToPreserve: ["caption"] });
var myReader = new Readability(doc, { classesToPreserve: ["caption"], url: uri });
result = myReader.parse();
} catch (err) {
throw reformatError(err);
@ -227,7 +229,7 @@ describe("Readability API", function() {
});
it("should run _cleanClasses with default configuration", function() {
var doc = new JSDOM(exampleSource).window.document;
var doc = parseHTML(exampleSource).document;
var parser = new Readability(doc);
parser._cleanClasses = sinon.fake();
@ -238,7 +240,7 @@ describe("Readability API", function() {
});
it("should run _cleanClasses when option keepClasses = false", function() {
var doc = new JSDOM(exampleSource).window.document;
var doc = parseHTML(exampleSource).document;
var parser = new Readability(doc, {keepClasses: false});
parser._cleanClasses = sinon.fake();
@ -249,7 +251,7 @@ describe("Readability API", function() {
});
it("shouldn't run _cleanClasses when option keepClasses = true", function() {
var doc = new JSDOM(exampleSource).window.document;
var doc = parseHTML(exampleSource).document;
var parser = new Readability(doc, {keepClasses: true});
parser._cleanClasses = sinon.fake();
@ -272,30 +274,30 @@ describe("Readability API", function() {
});
it("should not proxy image with data uri", function() {
var dom = new JSDOM("My cat: <img src=\"data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA" +
var dom = parseHTML("<html><body>My cat: <img src=\"data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA" +
"AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\"" +
" alt=\"Red dot\" />");
var expected_xhtml = "<div id=\"readability-page-1\" class=\"page\">My cat: <img src=\"data:image/png;base64," +
" alt=\"Red dot\" /></body></html>");
var expected_xhtml = "<DIV class=\"page\" id=\"readability-page-1\">My cat: <img src=\"data:image/png;base64," +
" iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0" +
"Y4OHwAAAABJRU5ErkJggg==\" alt=\"Red dot\"></div>";
var content = new Readability(dom.window.document).parse().content;
"Y4OHwAAAABJRU5ErkJggg==\" alt=\"Red dot\"></DIV>";
var content = new Readability(dom.document).parse().content;
expect(content).eql(expected_xhtml);
});
it("should handle srcset elements with density descriptors", function() {
var dom = new JSDOM('My image: <img src="https://webkit.org/demos/srcset/image-src.png" ' +
var dom = parseHTML('<html><body>My image: <img src="https://webkit.org/demos/srcset/image-src.png" ' +
'srcset="https://webkit.org/demos/srcset/image-1x.png 1x, ' +
'https://webkit.org/demos/srcset/image-2x.png 2x, ' +
'https://webkit.org/demos/srcset/image-3x.png 3x, ' +
'https://webkit.org/demos/srcset/image-4x.png 4x">'
);
var expected_xhtml = '<div id="readability-page-1" class="page">My image: ' +
'https://webkit.org/demos/srcset/image-4x.png 4x">' +
'</body></html>');
var expected_xhtml = '<DIV class="page" id="readability-page-1">My image: ' +
'<img src="https://webkit.org/demos/srcset/image-src.png" ' +
'srcset="https://webkit.org/demos/srcset/image-1x.png 1x,' +
'https://webkit.org/demos/srcset/image-2x.png 2x,' +
'https://webkit.org/demos/srcset/image-3x.png 3x,' +
'https://webkit.org/demos/srcset/image-4x.png 4x,"></div>';
var content = new Readability(dom.window.document, {
'https://webkit.org/demos/srcset/image-4x.png 4x,"></DIV>';
var content = new Readability(dom.document, {
createImageProxyUrl: function(url) {
return url;
}
@ -304,11 +306,11 @@ describe("Readability API", function() {
});
it("should remove srcset elements that are lazy loading placeholders", function() {
var dom = new JSDOM('My image: <img class="shrinkToFit jetpack-lazy-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&#038;ssl=1" alt width="900" height="380" data-recalc-dims="1" data-lazy-src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&amp;is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"></img>');
var expected_xhtml = '<div id="readability-page-1" class="page">' +
'My image: <img src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&amp;is-pending-load=1#038;ssl=1" alt="" width="900" height="380" data-recalc-dims="1" data-lazy-src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&amp;is-pending-load=1#038;ssl=1">' +
'</div>'
var content = new Readability(dom.window.document, {
var dom = parseHTML('<html><body>My image: <img class="shrinkToFit jetpack-lazy-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&#038;ssl=1" alt width="900" height="380" data-recalc-dims="1" data-lazy-src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&amp;is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"></body></html>');
var expected_xhtml = '<DIV class="page" id="readability-page-1">' +
'My image: <img src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&is-pending-load=1#038;ssl=1" alt="" width="900" height="380" data-recalc-dims="1" data-lazy-src="https://i0.wp.com/cdn-images-1.medium.com/max/2000/1*rPXwIczUJRCE54v8FfAHGw.jpeg?resize=900%2C380&is-pending-load=1#038;ssl=1">' +
'</DIV>';
var content = new Readability(dom.document, {
createImageProxyUrl: function(url) {
return url;
}
@ -324,12 +326,10 @@ describe("Test pages", function() {
var uri = "http://fakehost/test/page.html";
runTestsWithItems("jsdom", function(source) {
var doc = new JSDOM(source, {
url: uri,
}).window.document;
var doc =parseHTML(source).document;
removeCommentNodesRecursively(doc);
return doc;
}, testPage.source, testPage.expectedContent, testPage.expectedMetadata);
}, testPage.source, testPage.expectedContent, testPage.expectedMetadata, uri);
// runTestsWithItems("JSDOMParser", function(source) {
// var parser = new JSDOMParser();