watcher/test/tree.js
2024-04-18 21:12:37 +02:00

113 lines
2.7 KiB
JavaScript

/* IMPORT */
import fs from 'node:fs';
import path, { dirname } from 'node:path';
import process from 'node:process';
/* MAIN */
class Tree {
static ROOT = path.join ( process.cwd (), 'test', '__TREES__' );
static BLUEPRINT = [
'home/a/file1',
'home/a/file2',
'home/b/file1',
'home/b/file2',
'home/e/sub/file1',
'home/e/file1',
'home/e/file2',
'home/shallow/1/2/file1',
'home/shallow/1/2/file2',
'home/deep/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/file1',
'home/deep/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/file2',
'home/empty/'
];
constructor ( id ) {
this.root = path.join ( Tree.ROOT, String ( id ) );
}
build () {
Tree.BLUEPRINT.forEach ( path => {
if ( path.endsWith ( '/' ) ) {
fs.mkdirSync ( this.path ( path ), { recursive: true } );
} else {
fs.mkdirSync ( dirname ( this.path ( path ) ), { recursive: true } );
fs.writeFileSync ( this.path ( path ), '' );
}
});
}
copy ( path1, path2, delay = 0 ) {
setTimeout ( () => {
fs.cpSync ( this.path ( path1 ), this.path ( path2 ), { recursive: true } );
}, delay );
}
modify ( path, delay = 0 ) {
setTimeout ( () => {
fs.appendFileSync ( this.path ( path ), 'content' );
}, delay );
}
newDir ( path, delay = 0 ) {
setTimeout ( () => {
fs.mkdirSync ( this.path ( path ), { recursive: true } );
}, delay );
}
newDirs ( path, count ) {
return Array ( count ).fill ().map ( ( _, nr ) => {
const id = 'newdir_' + nr;
const dpath = this.path ( path, id );
fs.mkdirSync ( dpath, { recursive: true } );
return dpath;
});
}
newFile ( path, delay = 0 ) {
setTimeout ( () => {
fs.mkdirSync ( dirname ( this.path ( path ) ), { recursive: true } );
fs.writeFileSync ( this.path ( path ), '' );
}, delay );
}
newFiles ( path, count ) {
return Array ( count ).fill ().map ( ( _, nr ) => {
const id = 'newfile_' + nr;
const fpath = this.path ( path, id );
fs.mkdirSync ( dirname ( fpath ), { recursive: true } );
fs.writeFileSync ( fpath, '' );
return fpath;
});
}
path ( ...paths ) {
if ( paths[0].startsWith ( 'home' ) ) {
return path.join ( this.root, ...paths ).replace ( /\/$/, '' );
} else {
return path.join ( ...paths ).replace ( /\/$/, '' );
}
}
remove ( path, delay = 0 ) {
setTimeout ( () => {
fs.rmSync ( this.path ( path ), { recursive: true } );
}, delay );
}
rename ( path1, path2, delay = 0 ) {
setTimeout ( () => {
fs.renameSync ( this.path ( path1 ), this.path ( path2 ) );
}, delay );
}
}
/* EXPORT */
export default Tree;