191 lines
7.1 KiB
JavaScript
191 lines
7.1 KiB
JavaScript
import Gio from 'gi://Gio';
|
|
import GLib from 'gi://GLib';
|
|
|
|
import * as JasmineBoot from '../src/jasmineBoot.js';
|
|
|
|
const [testFile] = GLib.filename_from_uri(import.meta.url);
|
|
const testDir = GLib.path_get_dirname(testFile);
|
|
|
|
const customMatchers = {
|
|
toMatchAllFiles() {
|
|
return {
|
|
compare(actual, expected) {
|
|
const result = {
|
|
message: `Expected ${JSON.stringify(actual)} `,
|
|
};
|
|
if (actual.length !== expected.length) {
|
|
result.pass = false;
|
|
result.message += `to match ${expected.length} ${
|
|
expected.length === 1 ? 'file' : 'files'
|
|
}, but it contained ${actual.length}`;
|
|
return result;
|
|
}
|
|
|
|
let unexpectedFile;
|
|
result.pass = actual.every(path => {
|
|
const actualFile = Gio.File.new_for_path(path);
|
|
const retval = expected.some(expectedPath => {
|
|
const expectedFile = Gio.File.new_for_path(expectedPath);
|
|
return actualFile.equal(expectedFile);
|
|
});
|
|
if (!retval)
|
|
unexpectedFile = path;
|
|
return retval;
|
|
});
|
|
if (result.pass) {
|
|
result.message += `not to match a list of files ${
|
|
expected}, but it did.`;
|
|
} else if (unexpectedFile) {
|
|
result.message += `to match a list of files ${expected
|
|
}, but it contained ${unexpectedFile}`;
|
|
} else {
|
|
result.message += `to match the list of files ${expected
|
|
}, but it did not: ${actual}`;
|
|
}
|
|
return result;
|
|
},
|
|
};
|
|
},
|
|
};
|
|
|
|
describe('Jasmine boot', function () {
|
|
let testJasmine;
|
|
|
|
beforeEach(function () {
|
|
const bootedJasmine = {
|
|
getEnv: jasmine.createSpy('getEnv').and.returnValue({
|
|
addReporter: jasmine.createSpy('addReporter'),
|
|
execute: jasmine.createSpy('execute'),
|
|
configure: jasmine.createSpy('configure'),
|
|
}),
|
|
Timer: jasmine.createSpy('Timer'),
|
|
Expectation: {
|
|
addMatchers: jasmine.createSpy('addMatchers'),
|
|
},
|
|
};
|
|
|
|
const fakeJasmineRequireObj = {
|
|
core: jasmine.createSpy('core').and.returnValue(bootedJasmine),
|
|
interface: jasmine.createSpy('interface'),
|
|
};
|
|
|
|
const fakeJasmineCore = {
|
|
getJasmineRequireObj() {
|
|
return fakeJasmineRequireObj;
|
|
},
|
|
__file__: 'fake/jasmine/path/jasmine.js',
|
|
};
|
|
|
|
testJasmine = new JasmineBoot.Jasmine({jasmineCore: fakeJasmineCore});
|
|
|
|
jasmine.addMatchers(customMatchers);
|
|
});
|
|
|
|
it('adds a nonexistent spec file', function () {
|
|
expect(testJasmine.specFiles).toEqual([]);
|
|
testJasmine.addSpecFiles([`${testDir}/non/existent/file.js`]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([
|
|
`${testDir}/non/existent/file.js`,
|
|
]);
|
|
});
|
|
|
|
it('adds a real spec file', function () {
|
|
expect(testJasmine.specFiles).toEqual([]);
|
|
testJasmine.addSpecFiles([`${testDir}/fixtures/someSpec.js`]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([
|
|
`${testDir}/fixtures/someSpec.js`,
|
|
]);
|
|
});
|
|
|
|
it('adds more than one spec file', function () {
|
|
expect(testJasmine.specFiles).toEqual([]);
|
|
testJasmine.addSpecFiles([
|
|
`${testDir}/fixtures/someSpec.js`,
|
|
`${testDir}/fixtures/otherSpec.js`,
|
|
]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([
|
|
`${testDir}/fixtures/someSpec.js`,
|
|
`${testDir}/fixtures/otherSpec.js`,
|
|
]);
|
|
});
|
|
|
|
it('adds a whole directory of spec files', function () {
|
|
expect(testJasmine.specFiles).toEqual([]);
|
|
testJasmine.addSpecFiles([`${testDir}/fixtures`]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([
|
|
`${testDir}/fixtures/include/module.js`,
|
|
`${testDir}/fixtures/include/spec.js`,
|
|
`${testDir}/fixtures/otherSpec.js`,
|
|
`${testDir}/fixtures/path1/test.js`,
|
|
`${testDir}/fixtures/path2/test.js`,
|
|
`${testDir}/fixtures/someSpec.js`,
|
|
`${testDir}/fixtures/syntaxErrorSpec.js`,
|
|
]);
|
|
expect(testJasmine.specFiles.every(path => path.indexOf('notASpec.txt') === -1)).toBe(true);
|
|
});
|
|
|
|
it('adds spec files in different directories with the same name', function () {
|
|
testJasmine.addSpecFiles([
|
|
`${testDir}/fixtures/path1`,
|
|
`${testDir}/fixtures/path2`,
|
|
]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([
|
|
`${testDir}/fixtures/path1/test.js`,
|
|
`${testDir}/fixtures/path2/test.js`,
|
|
]);
|
|
});
|
|
|
|
it('respects excluded files', function () {
|
|
testJasmine.exclusions = ['otherSpec.js', 'syntaxErrorSpec.js'];
|
|
testJasmine.addSpecFiles([`${testDir}/fixtures`]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([
|
|
`${testDir}/fixtures/include/module.js`,
|
|
`${testDir}/fixtures/include/spec.js`,
|
|
`${testDir}/fixtures/someSpec.js`,
|
|
`${testDir}/fixtures/path1/test.js`,
|
|
`${testDir}/fixtures/path2/test.js`,
|
|
]);
|
|
});
|
|
|
|
it('matches at the end of the containing path', function () {
|
|
testJasmine.exclusions = ['test/fixtures'];
|
|
testJasmine.addSpecFiles([`${testDir}/fixtures`]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([
|
|
`${testDir}/fixtures/include/module.js`,
|
|
`${testDir}/fixtures/include/spec.js`,
|
|
`${testDir}/fixtures/path1/test.js`,
|
|
`${testDir}/fixtures/path2/test.js`,
|
|
]);
|
|
});
|
|
|
|
it('can handle globs in excluded files', function () {
|
|
testJasmine.exclusions = ['*.js'];
|
|
testJasmine.addSpecFiles([`${testDir}/fixtures`]);
|
|
expect(testJasmine.specFiles).toMatchAllFiles([]);
|
|
});
|
|
|
|
it('adds the Jasmine path when adding a reporter', function () {
|
|
const fakeReporter = {};
|
|
testJasmine.addReporter(fakeReporter);
|
|
expect(fakeReporter.jasmine_core_path).toMatch('fake/jasmine/path');
|
|
});
|
|
|
|
it('imports spec files in different directories with the same name', function () {
|
|
testJasmine.addSpecFiles([
|
|
`${testDir}/fixtures/path1`,
|
|
`${testDir}/fixtures/path2`,
|
|
]);
|
|
expectAsync(testJasmine.loadSpecs()).toBeRejectedWithError(Error,
|
|
'Catch this error to ensure this file is loaded');
|
|
});
|
|
|
|
it('does not bail out altogether if one of the specs has a syntax error', function () {
|
|
testJasmine.addSpecFiles([`${testDir}/fixtures/syntaxErrorSpec.js`]);
|
|
expectAsync(testJasmine.loadSpecs()).toBeResolved();
|
|
});
|
|
|
|
it('does not bail out altogether if one of the specs does not exist', function () {
|
|
testJasmine.addSpecFiles(['non/existent/file.js']);
|
|
expectAsync(testJasmine.loadSpecs()).toBeResolved();
|
|
});
|
|
});
|