125 lines
5.4 KiB
JavaScript
125 lines
5.4 KiB
JavaScript
import Gio from 'gi://Gio';
|
|
import GLib from 'gi://GLib';
|
|
|
|
import * as Command from '../src/command.js';
|
|
import * as JUnitReporter from '../src/junitReporter.js';
|
|
import * as TapReporter from '../src/tapReporter.js';
|
|
import * as VerboseReporter from '../src/verboseReporter.js';
|
|
|
|
const {mainloop} = Command;
|
|
|
|
describe('Jasmine command', function () {
|
|
let fakeJasmine;
|
|
|
|
beforeAll(function () {
|
|
Gio._promisify(Gio._LocalFilePrototype, 'delete_async', 'delete_finish');
|
|
});
|
|
|
|
beforeEach(function () {
|
|
fakeJasmine = jasmine.createSpyObj('jasmine', ['addReporter', 'configureDefaultReporter', 'execute']);
|
|
fakeJasmine.execute.and.resolveTo();
|
|
spyOn(mainloop, 'runAsync'); // stub out system behaviour
|
|
});
|
|
|
|
describe('running specs', function () {
|
|
it('shows colors by default', function () {
|
|
Command.run(fakeJasmine, []);
|
|
expect(fakeJasmine.addReporter)
|
|
.toHaveBeenCalledWith(jasmine.objectContaining({show_colors: true}));
|
|
});
|
|
|
|
it('allows colors to be turned off', function () {
|
|
Command.run(fakeJasmine, ['--no-color']);
|
|
expect(fakeJasmine.addReporter)
|
|
.toHaveBeenCalledWith(jasmine.objectContaining({show_colors: false}));
|
|
});
|
|
|
|
it('lets later color arguments override earlier ones', function () {
|
|
Command.run(fakeJasmine, ['--color', '--no-color']);
|
|
expect(fakeJasmine.addReporter)
|
|
.toHaveBeenCalledWith(jasmine.objectContaining({show_colors: false}));
|
|
Command.run(fakeJasmine, ['--no-color', '--color']);
|
|
expect(fakeJasmine.addReporter)
|
|
.toHaveBeenCalledWith(jasmine.objectContaining({show_colors: true}));
|
|
});
|
|
|
|
it('loads the verbose reporter', function () {
|
|
Command.run(fakeJasmine, ['--verbose']);
|
|
expect(fakeJasmine.addReporter).toHaveBeenCalled();
|
|
const [reporter] = fakeJasmine.addReporter.calls.argsFor(0);
|
|
expect(reporter.constructor).toBe(VerboseReporter.VerboseReporter);
|
|
});
|
|
|
|
it('loads the TAP reporter', function () {
|
|
Command.run(fakeJasmine, ['--tap']);
|
|
expect(fakeJasmine.addReporter).toHaveBeenCalled();
|
|
const [reporter] = fakeJasmine.addReporter.calls.argsFor(0);
|
|
expect(reporter.constructor).toBe(TapReporter.TapReporter);
|
|
});
|
|
|
|
it('loads the JUnit reporter alongside the usual reporter', function () {
|
|
// Unfortunately /dev/null can't be opened as a GFile, so we need to
|
|
// write to a temporary file.
|
|
const [tmpFile, stream] = Gio.File.new_tmp('junitreportXXXXXX');
|
|
const tmpPath = tmpFile.get_path();
|
|
stream.close(null);
|
|
|
|
Command.run(fakeJasmine, ['--junit', tmpPath]);
|
|
expect(fakeJasmine.addReporter.calls.count()).toBe(2);
|
|
const reporters = fakeJasmine.addReporter.calls.allArgs().map(args => args[0].constructor);
|
|
expect(reporters).toContain(JUnitReporter.JUnitReporter);
|
|
|
|
tmpFile.delete_async(GLib.PRIORITY_DEFAULT, null).then(() => {});
|
|
});
|
|
|
|
it('creates a directory for the report if necessary', function () {
|
|
const tmpDir = GLib.dir_make_tmp('junitreportXXXXXX');
|
|
const tmpFile =
|
|
Gio.File.new_for_path(tmpDir).get_child('dir').get_child('report.xml');
|
|
const tmpPath = tmpFile.get_path();
|
|
|
|
Command.run(fakeJasmine, ['--junit', tmpPath]);
|
|
expect(tmpFile.query_exists(null)).toBeTruthy();
|
|
|
|
tmpFile.delete_async(GLib.PRIORITY_DEFAULT, null)
|
|
.then(() => tmpFile.get_parent().delete_async(GLib.PRIORITY_DEFAULT, null))
|
|
.then(() => tmpFile.get_parent().get_parent().delete_async(GLib.PRIORITY_DEFAULT, null));
|
|
});
|
|
|
|
it('uses the value of JASMINE_JUNIT_REPORTS_DIR', function () {
|
|
const oldPath = GLib.getenv('JASMINE_JUNIT_REPORTS_DIR');
|
|
const tmpDir = GLib.dir_make_tmp('junitreportXXXXXX');
|
|
GLib.setenv('JASMINE_JUNIT_REPORTS_DIR', tmpDir, true);
|
|
|
|
Command.run(fakeJasmine, ['--junit', 'report.xml']);
|
|
const reportFile =
|
|
Gio.File.new_for_path(tmpDir).get_child('report.xml');
|
|
expect(reportFile.query_exists(null)).toBeTruthy();
|
|
|
|
reportFile.delete_async(GLib.PRIORITY_DEFAULT, null)
|
|
.then(() => reportFile.get_parent().delete_async(GLib.PRIORITY_DEFAULT, null));
|
|
|
|
if (oldPath !== null)
|
|
GLib.setenv('JASMINE_JUNIT_REPORTS_DIR', oldPath, true);
|
|
else
|
|
GLib.unsetenv('JASMINE_JUNIT_REPORTS_DIR');
|
|
});
|
|
|
|
it('executes the Jasmine suite', function (done) {
|
|
expectAsync(Command.run(fakeJasmine, [])).toBeResolvedTo(0);
|
|
// fakeJasmine.execute() is started in idle
|
|
GLib.idle_add(GLib.PRIORITY_DEFAULT, function () {
|
|
expect(fakeJasmine.execute).toHaveBeenCalled();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('runs the specified specs', function (done) {
|
|
Command.run(fakeJasmine, ['spec/some/fileSpec.js', '--no-color']);
|
|
GLib.idle_add(GLib.PRIORITY_DEFAULT, function () {
|
|
expect(fakeJasmine.execute).toHaveBeenCalledWith(['spec/some/fileSpec.js']);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|