1
0
Fork 0
gnome-shell/subprojects/jasmine-gjs/test/commandSpec.js
Daniel Baumann 1fcdbd5df9
Adding upstream version 48.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 20:26:11 +02:00

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();
});
});
});
});