Skip to content

Commit c0f7817

Browse files
Adding unit tests in cp, mv and ls commands (#1107)
1 parent 740206e commit c0f7817

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

node/test/cp.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,34 @@ describe('cp cases', () => {
193193

194194
done();
195195
});
196+
it('Throws if no arguments are provided', (done) => {
197+
assert.throws(() => (tl as any).cp(), /ENOENT|missing/i);
198+
done();
199+
});
200+
201+
it('Throws if only source is provided', (done) => {
202+
assert.throws(() => (tl as any).cp('file1'), /ENOENT|missing/i);
203+
done();
204+
});
205+
206+
it('Recursive copy works with trailing slash', (done) => {
207+
tl.mkdirP('dirA');
208+
fs.writeFileSync(path.join('dirA', 'file.txt'), 'abc');
209+
assert.doesNotThrow(() => tl.cp('-r', 'dirA/', 'dirB'));
210+
assert.ok(fs.existsSync(path.join('dirB', 'dirA', 'file.txt')));
211+
tl.rmRF('dirA');
212+
tl.rmRF('dirB');
213+
done();
214+
});
215+
216+
it('Handles non-normalized paths', (done) => {
217+
tl.mkdirP('dirC');
218+
fs.writeFileSync(path.join('dirC', 'file.txt'), 'abc');
219+
const nonNormalized = path.join('.', 'dirC', '.', '..', 'dirC');
220+
assert.doesNotThrow(() => tl.cp('-r', nonNormalized, 'dirD'));
221+
assert.ok(fs.existsSync(path.join('dirD', 'dirC', 'file.txt')));
222+
tl.rmRF('dirC');
223+
tl.rmRF('dirD');
224+
done();
225+
});
196226
});

node/test/ls.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,4 +303,32 @@ describe('ls cases', () => {
303303
assert.ok(result.includes(path.basename(TEMP_FILE_1_JS)));
304304
done();
305305
});
306+
307+
it('Handles directory with trailing slash', (done) => {
308+
const result1 = tl.ls(TEMP_DIR_1);
309+
const result2 = tl.ls(TEMP_DIR_1 + path.sep);
310+
assert.deepStrictEqual(result1.sort(), result2.sort());
311+
done();
312+
});
313+
314+
it('Handles non-normalized paths', (done) => {
315+
const nonNormalized = path.join(TEMP_DIR_1, '.', 'temp1_subdir1', '..', 'temp1_subdir1');
316+
const result = tl.ls('-R', nonNormalized);
317+
const expected = tl.ls('-R', TEMP_SUBDIR_1);
318+
assert.deepStrictEqual(result.sort(), expected.sort());
319+
done();
320+
});
321+
322+
it('Handles multiple paths, some non-existent', (done) => {
323+
assert.throws(() => tl.ls([TEMP_FILE_1, 'doesnotexist']), /Not found ls/);
324+
done();
325+
});
326+
327+
it('Handles empty directory', (done) => {
328+
tl.mkdirP('emptydir');
329+
const result = tl.ls('emptydir');
330+
assert.strictEqual(result.length, 0);
331+
tl.rmRF('emptydir');
332+
done();
333+
});
306334
});

node/test/mv.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,21 @@ describe('mv cases', () => {
148148

149149
done();
150150
});
151+
152+
it('No-clobber (-n) prevents overwrite', (done) => {
153+
fs.writeFileSync('file1', 'a');
154+
fs.writeFileSync('file2', 'b');
155+
assert.throws(() => tl.mv('file1', 'file2', '-n'), /already exists/i);
156+
assert.equal(fs.readFileSync('file2', 'utf8'), 'b');
157+
done();
158+
});
159+
160+
it('No-clobber (-n) with directory as destination', (done) => {
161+
fs.mkdirSync('dir1');
162+
fs.writeFileSync('file1', 'a');
163+
fs.writeFileSync(path.join('dir1', 'file1'), 'b');
164+
assert.throws(() => tl.mv('file1', 'dir1', '-n'), /already exists/i);
165+
assert.equal(fs.readFileSync(path.join('dir1', 'file1'), 'utf8'), 'b');
166+
done();
167+
});
151168
});

0 commit comments

Comments
 (0)