Skip to content

Commit 448723c

Browse files
authored
Merge pull request #4 from hankei6km/csb-yhio9
Support multiple files
2 parents ec816c2 + b246443 commit 448723c

File tree

7 files changed

+25
-12
lines changed

7 files changed

+25
-12
lines changed

src/cli.test.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@ describe('cli()', () => {
1111
stderr.on('data', errData);
1212
expect(
1313
await cli({
14-
filename: 'test/assets/test.txt',
14+
filenames: ['test/assets/test1.txt', 'test/assets/test2.txt'],
1515
stdout,
1616
stderr
1717
})
1818
).toEqual(0);
19-
expect(outData.mock.calls.length).toEqual(1);
19+
expect(outData.mock.calls.length).toEqual(2);
2020
expect(outData.mock.calls[0][0].toString('utf8')).toEqual(
21-
'test/assets/test.txt: 15 chars\n'
21+
'test/assets/test1.txt: 15 chars\n'
22+
);
23+
expect(outData.mock.calls[1][0].toString('utf8')).toEqual(
24+
'test/assets/test2.txt: 17 chars\n'
2225
);
2326
expect(errData.mock.calls.length).toEqual(0);
2427
});
@@ -31,12 +34,15 @@ describe('cli()', () => {
3134
stderr.on('data', errData);
3235
expect(
3336
await cli({
34-
filename: 'test/assets/fail.txt',
37+
filenames: ['test/assets/test1.txt', 'test/assets/fail.txt'],
3538
stdout,
3639
stderr
3740
})
3841
).toEqual(1);
39-
expect(outData.mock.calls.length).toEqual(0);
42+
expect(outData.mock.calls.length).toEqual(1);
43+
expect(outData.mock.calls[0][0].toString('utf8')).toEqual(
44+
'test/assets/test1.txt: 15 chars\n'
45+
);
4046
expect(errData.mock.calls.length).toEqual(2);
4147
expect(errData.mock.calls[0][0].toString('utf8')).toEqual(
4248
"Error: ENOENT: no such file or directory, open 'test/assets/fail.txt'"

src/cli.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@ import { Writable } from 'stream';
22
import countChars from './count';
33

44
type Opts = {
5-
filename: string;
5+
filenames: string[];
66
stdout: Writable;
77
stderr: Writable;
88
};
9-
const cli = async ({ filename, stdout, stderr }: Opts): Promise<number> => {
9+
const cli = async ({ filenames, stdout, stderr }: Opts): Promise<number> => {
1010
try {
11-
const count = await countChars(filename);
12-
stdout.write(`${filename}: ${count} chars\n`);
11+
const len = filenames.length;
12+
for (let i = 0; i < len; i++) {
13+
const filename = filenames[i];
14+
const count = await countChars(filename);
15+
stdout.write(`${filename}: ${count} chars\n`);
16+
}
1317
} catch (err) {
1418
stderr.write(err.toString());
1519
stderr.write('\n');

src/count.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import countChars from './count';
22

33
describe('countChars()', () => {
44
it('should return count of content', async () => {
5-
expect(await countChars('test/assets/test.txt')).toEqual(15);
5+
expect(await countChars('test/assets/test1.txt')).toEqual(15);
66
});
77
it('should reject when file not found', async () => {
88
await expect(countChars('test/assets/fail.txt')).rejects.toThrow('ENOENT:');

src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const argv = yargs(hideBin(process.argv))
1212
(async () => {
1313
process.exit(
1414
await cli({
15-
filename: argv._[0] as string,
15+
filenames: argv._ as string[],
1616
stdout: process.stdout,
1717
stderr: process.stderr
1818
})

test/assets/test2.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
12345678
2+
abcdefg

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"outDir": "dist"
1212
},
1313
"exclude": [
14-
"node_modules"
14+
"node_modules",
15+
"src/**/*.test.ts"
1516
],
1617
"include": [
1718
"src/**/*.ts",

0 commit comments

Comments
 (0)