You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
import { _electron, Page } from '@playwright/test';
 | 
						|
import { readdirSync, rmdirSync } from 'fs-extra';
 | 
						|
import { dirname, join } from 'path';
 | 
						|
import { MULTI_PREFIX, NODE_ENV, openElectronAppOnly } from './open';
 | 
						|
// tslint:disable: no-console
 | 
						|
 | 
						|
const getDirectoriesOfSessionDataPath = (source: string) =>
 | 
						|
  readdirSync(source, { withFileTypes: true })
 | 
						|
    .filter(dirent => dirent.isDirectory())
 | 
						|
    .map(dirent => {
 | 
						|
      return dirent.name;
 | 
						|
    })
 | 
						|
    .filter(n => n.includes(`${NODE_ENV}-${MULTI_PREFIX}`));
 | 
						|
 | 
						|
let alreadyCleaned = false;
 | 
						|
let alreadyCleanedWaiting = false;
 | 
						|
 | 
						|
const cleanUpOtherTest = async () => {
 | 
						|
  if (alreadyCleaned || alreadyCleanedWaiting) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  alreadyCleaned = true;
 | 
						|
 | 
						|
  const electronApp = await openElectronAppOnly('start');
 | 
						|
 | 
						|
  const appPath = await electronApp.evaluate(async ({ app }) => {
 | 
						|
    return app.getPath('userData');
 | 
						|
  });
 | 
						|
  const window = await electronApp.firstWindow();
 | 
						|
  await window.close();
 | 
						|
  if (alreadyCleaned && alreadyCleanedWaiting) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  alreadyCleanedWaiting = true;
 | 
						|
 | 
						|
  if (!appPath.length) {
 | 
						|
    throw new Error('appDataPath unset');
 | 
						|
  }
 | 
						|
 | 
						|
  const parentFolderOfAllDataPath = dirname(appPath);
 | 
						|
 | 
						|
  if (!parentFolderOfAllDataPath || parentFolderOfAllDataPath.length < 20) {
 | 
						|
    throw new Error('parentFolderOfAllDataPath not found or invalid');
 | 
						|
  }
 | 
						|
  console.info('cleaning other tests leftovers...', parentFolderOfAllDataPath);
 | 
						|
 | 
						|
  const allAppDataPath = getDirectoriesOfSessionDataPath(parentFolderOfAllDataPath);
 | 
						|
  console.info('allAppDataPath', allAppDataPath);
 | 
						|
 | 
						|
  allAppDataPath.map(folder => {
 | 
						|
    if (!appPath) {
 | 
						|
      throw new Error('parentFolderOfAllDataPath unset');
 | 
						|
    }
 | 
						|
    const pathToRemove = join(parentFolderOfAllDataPath, folder);
 | 
						|
    rmdirSync(pathToRemove, { recursive: true });
 | 
						|
  });
 | 
						|
  console.info('...done');
 | 
						|
};
 | 
						|
 | 
						|
export const beforeAllClean = cleanUpOtherTest;
 | 
						|
 | 
						|
export const forceCloseAllWindows = async (windows: Array<Page>) => {
 | 
						|
  return Promise.all(windows.map(w => w.close()));
 | 
						|
};
 |