Test improvements: - Capture titles for all macOS windows, not just the frontmost. - Incorporate missing application log files. - Improve log clarity with enriched context. - Improve application termination on macOS by reducing grace period. - Ensure complete application termination on macOS. - Validate Vue application loading through an initial log. - Support ignoring environment-specific `stderr` errors. - Do not fail the test if working directory cannot be deleted. - Use retry pattern when installing dependencies due to network errors. Refactorings: - Migrate the test code to TypeScript. - Replace deprecated `rmdir` with `rm` for error-resistant directory removal. - Improve sanity checking by shifting from App.vue to Vue bootstrapper. - Centralize environment variable management with `EnvironmentVariables` construct. - Rename infrastructure/Environment to RuntimeEnvironment for clarity. - Isolate WindowVariables and SystemOperations from RuntimeEnvironment. - Inject logging via preloader. - Correct mislabeled RuntimeSanity tests. Configuration: - Introduce `npm run check:desktop` for simplified execution. - Omit `console.log` override due to `nodeIntegration` restrictions and reveal logging functionality using context-bridging.
42 lines
1.8 KiB
TypeScript
42 lines
1.8 KiB
TypeScript
import type { CollectionData } from '@/application/collections/';
|
|
import { IApplication } from '@/domain/IApplication';
|
|
import { IProjectInformation } from '@/domain/IProjectInformation';
|
|
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
|
import WindowsData from '@/application/collections/windows.yaml';
|
|
import MacOsData from '@/application/collections/macos.yaml';
|
|
import LinuxData from '@/application/collections/linux.yaml';
|
|
import { parseProjectInformation } from '@/application/Parser/ProjectInformationParser';
|
|
import { Application } from '@/domain/Application';
|
|
import { IAppMetadata } from '@/infrastructure/EnvironmentVariables/IAppMetadata';
|
|
import { EnvironmentVariablesFactory } from '@/infrastructure/EnvironmentVariables/EnvironmentVariablesFactory';
|
|
import { parseCategoryCollection } from './CategoryCollectionParser';
|
|
|
|
export function parseApplication(
|
|
categoryParser = parseCategoryCollection,
|
|
informationParser = parseProjectInformation,
|
|
metadata: IAppMetadata = EnvironmentVariablesFactory.Current.instance,
|
|
collectionsData = PreParsedCollections,
|
|
): IApplication {
|
|
validateCollectionsData(collectionsData);
|
|
const information = informationParser(metadata);
|
|
const collections = collectionsData.map((collection) => categoryParser(collection, information));
|
|
const app = new Application(information, collections);
|
|
return app;
|
|
}
|
|
|
|
export type CategoryCollectionParserType
|
|
= (file: CollectionData, info: IProjectInformation) => ICategoryCollection;
|
|
|
|
const PreParsedCollections: readonly CollectionData [] = [
|
|
WindowsData, MacOsData, LinuxData,
|
|
];
|
|
|
|
function validateCollectionsData(collections: readonly CollectionData[]) {
|
|
if (!collections?.length) {
|
|
throw new Error('missing collections');
|
|
}
|
|
if (collections.some((collection) => !collection)) {
|
|
throw new Error('missing collection provided');
|
|
}
|
|
}
|