113 lines
2.7 KiB
JavaScript
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;
|