From 777fe8325724197c05e355925296c1808997ff81 Mon Sep 17 00:00:00 2001 From: Manfred Knobloch Date: Fri, 31 May 2019 13:57:43 +0200 Subject: [PATCH] added bin dir --- bin/README.md | 23 ++++++++++ bin/singleshot.js | 70 +++++++++++++++++++++++++++++ bin/testrunner.js | 109 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 202 insertions(+) create mode 100644 bin/README.md create mode 100644 bin/singleshot.js create mode 100644 bin/testrunner.js diff --git a/bin/README.md b/bin/README.md new file mode 100644 index 0000000..77394b5 --- /dev/null +++ b/bin/README.md @@ -0,0 +1,23 @@ +Testrunner prerequisites +======================== + +npm install puppeteer + + +testrunner.js +------------- +start from iwmlib directory with node testrunner + +defined in package.json +"testrunner": "node bin/testrunner.js" + +or in vscode, defined in launch.json like +{ + "type": "node", + "request": "launch", + "name": "testrunner", + "program": "${workspaceFolder}\\bin\\testrunner.js" +} + +iterates all doctest.html files that are listed in index.html +create a screenshot of all pages \ No newline at end of file diff --git a/bin/singleshot.js b/bin/singleshot.js new file mode 100644 index 0000000..5c0f351 --- /dev/null +++ b/bin/singleshot.js @@ -0,0 +1,70 @@ +/** + * test one single page, make a screenshot and log errors to + * console + * (c) 2019 - Leibniz-Insitut für Wissensmedien + * + */ +const puppeteer = require('puppeteer'); +const fs = require("fs") +const path = require("path") +const start_dir = process.cwd() + + +// const start_file = path.join(start_dir,"lib","frames.html") +const start_file = path.join(start_dir,"lib","pixi","badge.html") + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + +const events = ["error","pageerror"] +function logPageEvent(event){ + if(event !== undefined){ + console.log(event.message) + } +} + +async function makeScreenshot(href){ + + const browser = await puppeteer.launch({ + // headless: false, + // loglevel : 0, + args : [ + '–allow-file-access-from-files', + ],}); + const page = await browser.newPage(); + + await page.setViewport({width: 1024,height : 624}) + for (var i = 0; i < events.length; i++) { + page.on(events[i],logPageEvent) + } + page.once("load",logPageEvent) + + // await Promise.all([ page.coverage.startJSCoverage() ]); + await page.goto(href) + // const jsCoverage = await Promise.all([ page.coverage.stopJSCoverage() ]); + + const fname = path.parse(href).name + + if (fname != "index"){ + image_url = href.replace(fname + ".html" ,"thumbnails/" + fname + ".png") + } + else{ + image_url = href.replace(fname + ".html" ,"thumbnail.png") + } + image_url = image_url.replace("file:///","") + console.log(image_url) + // console.log(jsCoverage) + + page.removeAllListeners() + + await page.screenshot({path: image_url}); + await browser.close(); +} + + +(async function(){ + + await makeScreenshot(start_file) + } +)() \ No newline at end of file diff --git a/bin/testrunner.js b/bin/testrunner.js new file mode 100644 index 0000000..82cbfff --- /dev/null +++ b/bin/testrunner.js @@ -0,0 +1,109 @@ +/** + * + * make screenshots and log errors to + * console + * (c) 2019 - Leibniz-Insitut für Wissensmedien + * + */ + +const puppeteer = require('puppeteer'); +const fs = require("fs") +const path = require("path") +const start_dir = process.cwd() +const start_file = path.join(start_dir,"lib","index.html") + +const start_file_uri = path.join("file:///", start_file ) + +// define events and log them +const events = ["error","pageerror"] +function logPageEvent(event){ + if (event !== undefined){ + console.log(event.toString()) + } +} + +async function makeScreenshot(href){ + + const browser = await puppeteer.launch({args: [ + '–allow-file-access-from-files', + ],}); + + const page = await browser.newPage(); + + await page.setViewport({width: 1024,height : 624}) + + // register events + for (var i = 0; i < events.length; i++) { + page.on(events[i],logPageEvent) + } + page.once("load",logPageEvent) + + await page.goto(href) + const fname = path.parse(href).name + + if (fname != "index"){ + image_url = href.replace(fname + ".html" ,"thumbnails/" + fname + ".png") + } + else{ + image_url = href.replace(fname + ".html" ,"thumbnail.png") + } + image_url = image_url.replace("file:///","") + + page.removeAllListeners() + + await page.screenshot({path: image_url}); + await browser.close(); +} + +/** + * + * collect all navigational links in all documents + * + * */ + +async function collectLinks(href,reflist) +{ + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + + + await page.goto(href) + let hrefs = await page.$$('a.wrapper') + + for (var i=0; i < hrefs.length; i++) { + let hrefValue = await hrefs[i].getProperty('href') + let linkText = await hrefValue.jsonValue(); + if (!linkText.startsWith("file:")) + { + continue; + } + if(linkText.endsWith("#")) continue; + if(linkText.endsWith("index.html")){ + await collectLinks(linkText,reflist) + } + reflist.push(linkText) + } + + await browser.close() +} + +(async function(){ + var reflist = [] + let linkText = "file:///" + start_file.replace(/\\/g,"/") + reflist.push(linkText) + await collectLinks(start_file_uri,reflist) + + // sort by path length to get depth first + reflist.sort(function(a,b){ + let al = a.split("/").length + let bl = b.split("/").length + + if (al < bl) {return 1 } + if (al > bl) {return -1 } + if (al == bl) {return 0 } + }) + for (var i=0;i