signal-desktop/ts/test-node/license_comments_test.ts
2022-11-22 17:46:21 -05:00

62 lines
1.9 KiB
TypeScript

// Copyright 2020-2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
// This file is meant to be run frequently, so it doesn't check the license year. See the
// imported `license_comments` file for a job that does this, to be run on CI.
import { assert } from 'chai';
import {
forEachRelevantFile,
getExtension,
readFirstLines,
} from '../util/lint/license_comments';
describe('license comments', () => {
it('includes a license comment at the top of every relevant file', async function test() {
await forEachRelevantFile(async file => {
let firstLine: string;
let secondLine: string;
if (getExtension(file) === '.sh') {
const firstThreeLines = await readFirstLines(file, 3);
[, firstLine, secondLine] = firstThreeLines;
} else {
[firstLine, secondLine] = await readFirstLines(file, 2);
}
if (!firstLine || !secondLine) {
throw new Error(`file ${file}: was missing a first or second line!`);
}
const { groups = {} } =
firstLine.match(
/Copyright (?<startYearWithDash>\d{4}-)?(?<endYearString>\d{4}) Signal Messenger, LLC/
) || {};
const { startYearWithDash, endYearString } = groups;
const endYear = Number(endYearString);
// We added these comments in 2020.
assert.isAtLeast(
endYear,
2020,
`First line of ${file} is missing correct license header comment`
);
if (startYearWithDash) {
const startYear = Number(startYearWithDash.slice(0, -1));
assert.isBelow(
startYear,
endYear,
`Starting license year of ${file} is not below the ending year`
);
}
assert.include(
secondLine,
'SPDX-License-Identifier: AGPL-3.0-only',
`Second line of ${file} is missing correct license header comment`
);
});
});
});