let fs = require('fs') let path = require('path') let {thumbnail} = require('./utils.js') let pairs = [] let urlMap = new Map() function isFile(path) { try { return !fs.lstatSync(path).isDirectory() } catch(e) { if (e.code == 'ENOENT'){ return false } else { return false } } } function listPairs(src, dst, skipFiles=true) { let dir = fs.readdirSync(src) for(let name of dir) { let srcPath = src + name if (isFile(srcPath) && !skipFiles) { if (srcPath.endsWith('.html')) { let dstPath = dst + name.replace(/.html/, '.png') pairs.push([srcPath, dstPath]) } } else { if (srcPath.endsWith('.')) continue let indexPath = srcPath + path.sep + 'index.html' if (isFile(indexPath)) { let thumbnailPath = indexPath.replace(/index.html/, 'thumbnail.png') pairs.push([indexPath, thumbnailPath]) } } } } function capturePage(focusedWindow, dstPath) { focusedWindow.capturePage( (image) => { fs.writeFile(dstPath, thumbnail(image), (err) => { if (err) throw err; nextLoadTest(focusedWindow) }) }) } function testLoading(focusedWindow, filePath, dstPath) { let urlPath = filePath.replace(path.sep, '/') let basePath = `${__dirname}`.replace('/browser', '') let shortURL = `file://${basePath}/${urlPath}` let fullURL = `file://${__dirname}/../../${urlPath}` // console.log({basePath, shortURL, fullURL}) if (focusedWindow) { urlMap.set(shortURL, dstPath) focusedWindow.webContents.session.clearCache(() => console.log('Cache cleared')) focusedWindow.webContents.loadURL(shortURL) } } function listLibPairs() { let src = "lib" + path.sep let dst = "lib" + path.sep + 'thumbnails' + path.sep listPairs(src, dst, false) } function listAppPairs() { let src = "apps" + path.sep let dst = "apps" + path.sep listPairs(src, dst) } function listSrcPairs() { let src = "src" + path.sep let dst = "src" + path.sep listPairs(src, dst) } function nextLoadTest(focusedWindow) { if (global.errorCount > 0 && global.stopTestsOnError) { console.log("Test aborted") return } if (pairs.length > 0) { let [file, image] = pairs.pop() testLoading(focusedWindow, file, image) } else { console.log("All thumbnails created") } } function loadTests(focusedWindow) { global.errorCount = 0 focusedWindow.webContents.on('did-finish-load', (e) => { setTimeout(() => { let url = e.sender.history[e.sender.history.length-1] dstPath = urlMap.get(url) capturePage(focusedWindow, dstPath) }, 5000) }) listLibPairs() listSrcPairs() listAppPairs() nextLoadTest(focusedWindow) } module.exports = loadTests