diff --git a/test/setup.js b/test/setup.js index 1f71dd85..f88f8c5b 100644 --- a/test/setup.js +++ b/test/setup.js @@ -27,7 +27,8 @@ function createApp (t) { path: path.join(__dirname, '..', 'node_modules', '.bin', 'electron' + (process.platform === 'win32' ? '.cmd' : '')), args: ['-r', path.join(__dirname, 'mocks.js'), path.join(__dirname, '..')], - env: {NODE_ENV: 'test'} + env: {NODE_ENV: 'test'}, + waitTimeout: 10e3 }) } @@ -101,6 +102,7 @@ function compareIgnoringTransparency (bufActual, bufExpected) { // Otherwise, compare pixel by pixel let sumSquareDiff = 0 + let numDiff = 0 const pngA = PNG.sync.read(bufActual) const pngE = PNG.sync.read(bufExpected) if (pngA.width !== pngE.width || pngA.height !== pngE.height) return false @@ -119,14 +121,16 @@ function compareIgnoringTransparency (bufActual, bufExpected) { // Add pixel diff to running sum // This is necessary on Windows, where rendering apparently isn't quite deterministic // and a few pixels in the screenshot will sometimes be off by 1. (Visually identical.) + numDiff++ sumSquareDiff += (da[i] - de[i]) * (da[i] - de[i]) sumSquareDiff += (da[i + 1] - de[i + 1]) * (da[i + 1] - de[i + 1]) sumSquareDiff += (da[i + 2] - de[i + 2]) * (da[i + 2] - de[i + 2]) } } + const rms = Math.sqrt(sumSquareDiff / (numDiff + 1)) const l2Distance = Math.round(Math.sqrt(sumSquareDiff)) - console.log('screenshot diff l2 distance: ' + l2Distance) - return l2Distance < 2000 + console.log('screenshot diff l2 distance: ' + l2Distance + ', rms: ' + rms) + return l2Distance < 4000 && rms < 100 } // Resets the test directory, containing config.json, torrents, downloads, etc diff --git a/test/test-add-torrent.js b/test/test-add-torrent.js index 4450d9dc..2fb2e8d1 100644 --- a/test/test-add-torrent.js +++ b/test/test-add-torrent.js @@ -45,11 +45,11 @@ test('create-torrent', function (t) { .then(() => app.client.waitUntilTextExists('.torrent-list', 'Big Buck Bunny')) // Click the + button, open a non-torrent file to seed .then(() => app.client.click('.icon.add')) - .then(() => app.client.waitUntilTextExists('.create-torrent', 'Create')) + .then(() => app.client.waitUntilTextExists('h1', 'Create')) .then(() => setup.screenshotCreateOrCompare(app, t, 'create-torrent-simple')) // Click to show advanced settings .then(() => app.client.click('.show-more .control')) - .then(() => app.client.waitUntilTextExists('.create-torrent', 'Comment')) + .then(() => app.client.waitUntilTextExists('.create-torrent-advanced', 'Comment')) .then(() => setup.screenshotCreateOrCompare(app, t, 'create-torrent-advanced')) // Click OK to create the torrent .then(() => app.client.click('.control.create-torrent')) diff --git a/test/test-audio.js b/test/test-audio.js index 9dc0d8da..84f8d668 100644 --- a/test/test-audio.js +++ b/test/test-audio.js @@ -22,7 +22,6 @@ test('audio-streaming', function (t) { // Click next .then(() => app.client.click('.skip-next')) .then(() => app.client.waitUntilTextExists('.player', 'David Byrne')) - .then(() => setup.wait(5e3)) .then(() => app.client.moveToObject('.letterbox')) .then(() => app.webContents.executeJavaScript('dispatch("playPause")')) .then(() => app.webContents.executeJavaScript('dispatch("skipTo", 2)')) @@ -31,8 +30,7 @@ test('audio-streaming', function (t) { .then(() => app.webContents.executeJavaScript('dispatch("skipTo", 206)')) .then(() => app.webContents.executeJavaScript('dispatch("playPause")')) // Play past the end of the song, then pause after the start of the next song by Zap Mama - .then(() => app.client.waitUntilTextExists('.player', 'Zap Mama'), 15e3) - .then(() => setup.wait(5e3)) + .then(() => app.client.waitUntilTextExists('.player', 'Zap Mama', 15e3)) .then(() => app.webContents.executeJavaScript('dispatch("playPause")')) .then(() => app.webContents.executeJavaScript('dispatch("skipTo", 2)')) .then(() => setup.screenshotCreateOrCompare(app, t, 'play-torrent-wired-3')) diff --git a/test/test-torrent-list.js b/test/test-torrent-list.js index 18236853..4cafff07 100644 --- a/test/test-torrent-list.js +++ b/test/test-torrent-list.js @@ -35,7 +35,7 @@ test('torrent-list: start, stop, and delete torrents', function (t) { .then(() => setup.screenshotCreateOrCompare(app, t, 'torrent-list-hover')) // Click download on the first torrent, start downloading .then(() => app.client.click('.icon.download')) - .then(() => app.client.waitUntilTextExists('.torrent-list', '276MB')) + .then(() => app.client.waitUntilTextExists('.torrent-list', '276 MB')) .then(() => setup.screenshotCreateOrCompare(app, t, 'torrent-list-start-download')) // Click download on the first torrent again, stop downloading .then(() => app.client.click('.icon.download')) @@ -73,7 +73,7 @@ test('torrent-list: expand torrent, unselect file', function (t) { .then(() => setup.screenshotCreateOrCompare(app, t, 'torrent-list-cosmos-expand-deselect')) // Start the torrent .then(() => app.client.click('#torrent-cosmos .icon.download')) - .then(() => app.client.waitUntilTextExists('.torrent-list', 'peers')) + .then(() => app.client.waitUntilTextExists('.torrent-list', '0%')) .then(() => setup.screenshotCreateOrCompare(app, t, 'torrent-list-cosmos-expand-start')) // Make sure that it creates all files EXCEPT the deslected one .then(() => setup.compareDownloadFolder(t, 'CosmosLaundromatFirstCycle', [