emoji-picker-element/test/storage/test.js

59 lines
1.7 KiB
JavaScript

import playwright from 'playwright'
import { mkdirp, rimraf } from '../../bin/fs.js'
import getFolderSize from 'get-folder-size'
import path from 'path'
import prettyBytes from 'pretty-bytes'
import { markdownTable as table } from 'markdown-table'
import process from 'process'
const port = process.env.PORT || 3000
function printBytes (bytes) {
return `${prettyBytes(bytes)} (${bytes})`
}
function getIdbFolder (browserType, userDataDir) {
switch (browserType) {
case 'chromium':
return path.join(userDataDir, `Default/IndexedDB/http_localhost_${port}.indexeddb.leveldb`)
case 'firefox':
return path.join(userDataDir, `storage/default/http+++localhost+${port}/idb`)
case 'webkit':
return path.join(userDataDir, `databases/indexeddb/v1/http_localhost_${port}`)
}
}
async function main () {
const results = []
for (const browserType of ['chromium', 'firefox', 'webkit']) {
const userDataDir = `/tmp/emoji-picker-browser-data-${browserType}`
await rimraf(userDataDir)
await mkdirp(userDataDir)
const context = await playwright[browserType].launchPersistentContext(userDataDir, { headless: true })
const page = await context.newPage()
await page.goto(`http://localhost:${port}`)
await page.waitForSelector('.load-time')
await context.close()
const idbFolder = getIdbFolder(browserType, userDataDir)
const { size: bytes } = await getFolderSize(idbFolder)
results.push({
browserType,
bytes
})
}
console.log(table([
['Browser', 'IDB folder size'],
...results.map(({ browserType, bytes }) => (
[browserType, printBytes(bytes)]
))
]))
}
main().catch(err => {
console.error(err)
process.exit(1)
})