SymphonyElectron/tests/ScreenSnippet.test.js

138 lines
3.7 KiB
JavaScript

const ScreenSnippet = require('../js/screenSnippet/ScreenSnippet.js');
const path = require('path');
const fs = require('fs');
const os = require('os');
const { isMac } = require('../js/utils/misc.js')
const snippetBase64 = require('./fixtures/snippet/snippet-base64.js');
// mock child_process used in ScreenSnippet
jest.mock('child_process', function() {
return {
execFile: mockedExecFile
}
});
/**
* mock version of execFile just creates a copy of a test jpeg file.
*/
function mockedExecFile(util, args, doneCallback) {
let outputFileName = args[args.length - 1];
copyTestFile(outputFileName, function(copyTestFile) {
doneCallback();
});
}
function copyTestFile(destFile, done) {
const testfile = path.join(__dirname ,
'fixtures/snippet/ScreenSnippet.jpeg');
let reader = fs.createReadStream(testfile);
let writer = fs.createWriteStream(destFile);
writer.on('close', function() {
done();
});
reader.pipe(writer);
}
function createTestFile(done) {
let tmpDir = os.tmpdir();
const testFileName = path.join(tmpDir,
'ScreenSnippet-' + Date.now() + '.jpeg');
copyTestFile(testFileName, function() {
done(testFileName)
});
}
describe('Tests for ScreenSnippet', function() {
describe('when reading a valid jpeg file', function() {
// skip test for windows - until feature is supported
if (isMac) {
it('should match base64 output', function(done) {
let s = new ScreenSnippet();
s.capture().then(gotImage);
function gotImage(rsp) {
expect(rsp.type).toEqual('image/jpg;base64');
expect(rsp.data).toEqual(snippetBase64);
done();
};
});
}
it('should remove output file after completed', function(done) {
createTestFile(function(testfileName) {
let s = new ScreenSnippet();
s._readResult(testfileName, resolve);
function resolve() {
// should be long enough before file
// gets removed
setTimeout(function() {
let exists = fs.existsSync(testfileName);
expect(exists).toBe(false);
done();
}, 2000);
}
});
});
});
it('should fail if output file does not exist', function(done) {
let s = new ScreenSnippet();
let nonExistentFile = 'bogus.jpeg'
s._readResult(nonExistentFile, resolve, reject);
function resolve() {
// shouldn't get here
expect(true).toBe(false);
}
function reject(err) {
expect(err).toBeTruthy();
done();
}
});
// skip test for windows - until feature is supported
if (isMac) {
it('should fail if read file fails', function(done) {
var origFsReadFile = fs.readFile;
fs.readFile = jest.fn(mockedReadFile);
function mockedReadFile(filename, callback) {
callback(new Error('failed'));
}
let s = new ScreenSnippet();
s.capture().then(resolved).catch(rejected);
function resolved(err) {
cleanup();
// shouldn't get here
expect(true).toBe(false);
}
function rejected(err) {
expect(err).toBeTruthy();
cleanup();
done();
}
function cleanup() {
fs.readFile = origFsReadFile;
}
});
}
});