Skip to content

Commit 3a6bda9

Browse files
committed
Refactory fileloader test utility
1 parent c4aaf62 commit 3a6bda9

File tree

3 files changed

+66
-37
lines changed

3 files changed

+66
-37
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* (c) 2023-2025, Center for Computational Thinking and Design at Aarhus University and contributors
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
7+
import fs from 'fs';
8+
import * as path from 'path';
9+
10+
const directoriesToScan = ['./src/'];
11+
12+
export interface DirectoryContents {
13+
files: string[];
14+
folders: string[];
15+
}
16+
17+
export const readDirectory = (
18+
directory: string,
19+
ignoreList: string[],
20+
): DirectoryContents => {
21+
const files: string[] = [];
22+
const folders: string[] = [];
23+
const filesRead = fs.readdirSync(directory);
24+
filesRead.forEach(file => {
25+
if (ignoreList.includes(file)) return;
26+
if (file.endsWith('.json')) return; // Json cant have comments
27+
const fileLocation = path.join(directory, file);
28+
const stats = fs.statSync(fileLocation);
29+
if (stats.isFile()) {
30+
files.push(fileLocation);
31+
} else {
32+
folders.push(fileLocation);
33+
}
34+
});
35+
return { files: files, folders: folders };
36+
};
37+
38+
export const getFilesInDirectory = (
39+
directory: string,
40+
ignoredFiles: string[],
41+
): string[] => {
42+
const files: string[] = [];
43+
const content = readDirectory(directory, ignoredFiles);
44+
const filesFromSubFolders: string[] = [];
45+
content.folders.forEach(value => {
46+
const subFolderFlat = getFilesInDirectory(value, ignoredFiles);
47+
subFolderFlat.forEach(value => filesFromSubFolders.push(value));
48+
});
49+
filesFromSubFolders.forEach(value => files.push(value));
50+
content.files.forEach(value => files.push(value));
51+
return files;
52+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
* @vitest-environment jsdom
3+
*/
4+
/**
5+
* (c) 2023-2025, Center for Computational Thinking and Design at Aarhus University and contributors
6+
*
7+
* SPDX-License-Identifier: MIT
8+
*/
9+
10+
describe('Dependency direction test', () => {
11+
test('Files in lib should not depend on files in components', () => {});
12+
});

src/__tests__/archtest/license-identifiers.test.ts

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import fs from 'fs';
1111
import * as path from 'path';
12+
import { getFilesInDirectory } from './fileloader';
1213

1314
// Place files you wish to ignore by name in here
1415
const ignoredFiles: string[] = ['.DS_Store', 'ui.da.json', 'ui.en.json', 'README.md'];
@@ -26,42 +27,6 @@ const readFile = (fileLocation: string, expect: string) => {
2627
return fileContent.toString().toLowerCase().includes(expect.toLowerCase());
2728
};
2829

29-
type DirectoryContents = {
30-
files: string[];
31-
folders: string[];
32-
};
33-
34-
const readDirectory = (directory: string, ignoreList: string[]): DirectoryContents => {
35-
const files: string[] = [];
36-
const folders: string[] = [];
37-
const filesRead = fs.readdirSync(directory);
38-
filesRead.forEach(file => {
39-
if (ignoreList.includes(file)) return;
40-
if (file.endsWith('.json')) return; // Json cant have comments
41-
const fileLocation = path.join(directory, file);
42-
const stats = fs.statSync(fileLocation);
43-
if (stats.isFile()) {
44-
files.push(fileLocation);
45-
} else {
46-
folders.push(fileLocation);
47-
}
48-
});
49-
return { files: files, folders: folders };
50-
};
51-
52-
const flattenDirectory = (directory: string): string[] => {
53-
const files: string[] = [];
54-
const content = readDirectory(directory, ignoredFiles);
55-
const filesFromSubFolders: string[] = [];
56-
content.folders.forEach(value => {
57-
const subFolderFlat = flattenDirectory(value);
58-
subFolderFlat.forEach(value => filesFromSubFolders.push(value));
59-
});
60-
filesFromSubFolders.forEach(value => files.push(value));
61-
content.files.forEach(value => files.push(value));
62-
return files;
63-
};
64-
6530
const filesMissingIdentifier = (files: string[], expects: string[]): string[] => {
6631
const filesWithMissingIdentifier: string[] = [];
6732

@@ -82,7 +47,7 @@ describe('License identifier tests', () => {
8247
'All files should contain license identifier',
8348
() => {
8449
const flatten = directoriesToScan.reduce((acc: string[], current) => {
85-
return acc.concat(flattenDirectory(current));
50+
return acc.concat(getFilesInDirectory(current, ignoredFiles));
8651
}, []);
8752

8853
const faultyFiles = filesMissingIdentifier(flatten, [

0 commit comments

Comments
 (0)