From 9c3c3722a5622b4d102e0b5be18b7924ad8c036b Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Wed, 6 Dec 2017 12:31:09 +0000 Subject: [PATCH 01/16] implemented and tested unicode escaping/unescaping --- .eslintrc.json | 3 ++ package.json | 8 ++--- src/native2ascii.js | 31 ++++++++++++++-- src/unicode/escape.js | 26 +++++++++++++- src/unicode/unescape.js | 52 ++++++++++++++++++++++++++- test/.eslintrc.json | 6 ++++ test/fixtures/escaped/latin1.txt | Bin 0 -> 348200 bytes test/fixtures/unescaped/ascii.txt | Bin 0 -> 127 bytes test/fixtures/unescaped/latin1.txt | Bin 0 -> 255 bytes test/fixtures/unescaped/utf8.txt | Bin 0 -> 172474 bytes test/unicode/escape.spec.js | 33 ++++++++++++++++- test/unicode/index.spec.js | 13 ++++++- test/unicode/unescape.spec.js | 55 ++++++++++++++++++++++++++++- 13 files changed, 215 insertions(+), 12 deletions(-) create mode 100644 test/.eslintrc.json create mode 100644 test/fixtures/escaped/latin1.txt create mode 100644 test/fixtures/unescaped/ascii.txt create mode 100644 test/fixtures/unescaped/latin1.txt create mode 100644 test/fixtures/unescaped/utf8.txt diff --git a/.eslintrc.json b/.eslintrc.json index 3e5cf2d..f951df6 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,5 +2,8 @@ "extends": "notninja/es8", "env": { "node": true + }, + "rules": { + "no-bitwise": "off" } } diff --git a/package.json b/package.json index 701da6a..fa9b789 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,7 @@ }, "dependencies": { "commander": "^2.12.2", - "debug": "^3.1.0", - "get-stdin": "^5.0.1", - "glob": "^7.1.2", - "iconv-lite": "^0.4.19" + "get-stdin": "^5.0.1" }, "devDependencies": { "chai": "^4.1.2", @@ -42,7 +39,8 @@ }, "main": "src/native2ascii.js", "scripts": { - "pretest": "eslint \"bin/native2ascii\" \"src/**/*.js\" \"test/**/*.js\"" + "pretest": "eslint \"bin/native2ascii\" \"src/**/*.js\" \"test/**/*.js\"", + "test": "mocha -R list \"test/**/*.spec.js\"" }, "engines": { "node": ">=8" diff --git a/src/native2ascii.js b/src/native2ascii.js index 128c997..ac6557b 100644 --- a/src/native2ascii.js +++ b/src/native2ascii.js @@ -26,9 +26,36 @@ const { escape, unescape } = require('./unicode'); +const defaultEncoding = 'utf8'; + // TODO: Document -function native2ascii(str, options) { - // TODO: Complete +function native2ascii(input, options) { + if (input == null) { + return input; + } + if (!options) { + options = {}; + } + + let converter; + let inputEncoding; + let outputEncoding; + + if (options.reverse) { + converter = unescape; + inputEncoding = 'latin1'; + outputEncoding = options.encoding || defaultEncoding; + } else { + converter = escape; + inputEncoding = options.encoding || defaultEncoding; + outputEncoding = 'latin1'; + } + + // TODO: Use iconv-lite + const decodedInput = Buffer.from(input, inputEncoding).toString('utf8'); + const encodedOutput = Buffer.from(converter(decodedInput), 'utf8').toString(outputEncoding); + + return encodedOutput; } module.exports = native2ascii; diff --git a/src/unicode/escape.js b/src/unicode/escape.js index a6d76fa..04de939 100644 --- a/src/unicode/escape.js +++ b/src/unicode/escape.js @@ -24,9 +24,33 @@ // TODO: Complete +const hexDigits = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ]; + // TODO: Document function escape(str) { - // TODO: Complete + let result = ''; + + for (let i = 0, length = str.length; i < length; i++) { + const code = str.charCodeAt(i); + + if (code > 0x7f) { + result += `\\u${toHex(code)}`; + } else { + result += str.charAt(i); + } + } + + return result; +} + +// TODO: Document +function getHexDigit(n) { + return hexDigits[n & 15]; +} + +// TODO: Document +function toHex(n) { + return getHexDigit((n >> 12) & 15) + getHexDigit((n >> 8) & 15) + getHexDigit((n >> 4) & 15) + getHexDigit(n & 15); } module.exports = escape; diff --git a/src/unicode/unescape.js b/src/unicode/unescape.js index 3239e2a..a91e8d6 100644 --- a/src/unicode/unescape.js +++ b/src/unicode/unescape.js @@ -26,7 +26,57 @@ // TODO: Document function unescape(str) { - // TODO: Complete + let hadSlash = false; + let inUnicode = false; + let result = ''; + let unicode = ''; + + for (let i = 0, length = str.length; i < length; i++) { + const ch = str.charAt(i); + + if (inUnicode) { + unicode += ch; + + if (unicode.length === 4) { + const code = Number(`0x${unicode}`); + if (Number.isNaN(code)) { + throw new Error(`Unable to parse unicode: ${unicode}`); + } + + result += String.fromCharCode(code); + + hadSlash = false; + inUnicode = false; + unicode = ''; + } + + continue; + } + + if (hadSlash) { + hadSlash = false; + + if (ch === 'u') { + inUnicode = true; + } else { + result += `\\${ch}`; + } + + continue; + } else if (ch === '\\') { + hadSlash = true; + + continue; + } + + result += ch; + } + + if (hadSlash) { + result += '\\'; + } + + return result; } module.exports = unescape; diff --git a/test/.eslintrc.json b/test/.eslintrc.json new file mode 100644 index 0000000..ba3ed6c --- /dev/null +++ b/test/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": "../.eslintrc.json", + "env": { + "mocha": true + } +} diff --git a/test/fixtures/escaped/latin1.txt b/test/fixtures/escaped/latin1.txt new file mode 100644 index 0000000000000000000000000000000000000000..a2f39e9fb47c97f0cc8a9753075880927aa69a94 GIT binary patch literal 348200 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 GDc?UR8ai(P literal 0 HcmV?d00001 diff --git a/test/fixtures/unescaped/ascii.txt b/test/fixtures/unescaped/ascii.txt new file mode 100644 index 0000000000000000000000000000000000000000..b01f757b14645d95333e712169f29f8682171449 GIT binary patch literal 127 zcmZQzWMXDvWn<^yMC+6cQE@6%&_`l#-T_m6KOcR8m$^Ra4i{)Y8_`)zddH zG%_|ZH8Z!cw6eCbwX=6{baHlab#wRd^z!!c_45x13RaRG6Sz23MU0z>c zVPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3t+%eSUv{fr5jCg@%WSiHeJijgF6yk&=^? zm6n&7nVOrNot~edp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z&y}rM|!NSAD#m2|T z$;!*j&Cbuz(bCh@)z;V8+1lIO-QM5e;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0( F{r)a>eu4l1 literal 0 HcmV?d00001 diff --git a/test/fixtures/unescaped/utf8.txt b/test/fixtures/unescaped/utf8.txt new file mode 100644 index 0000000000000000000000000000000000000000..f5893932f1d2a9beb8a9c6a7eab84ac22c01bf3b GIT binary patch literal 172474 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�$hr#4E&W#2dt0#6O6C5&t3HA>JcCAU+~K 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 literal 0 HcmV?d00001 diff --git a/test/unicode/escape.spec.js b/test/unicode/escape.spec.js index feac286..0f739a3 100644 --- a/test/unicode/escape.spec.js +++ b/test/unicode/escape.spec.js @@ -22,4 +22,35 @@ 'use strict'; -// TODO: Complete +const { expect } = require('chai'); +const fs = require('fs'); +const path = require('path'); +const util = require('util'); + +const escape = require('../../src/unicode/escape'); + +const readFile = util.promisify(fs.readFile); + +describe('unicode/escape', () => { + let unescaped; + + before(async() => { + unescaped = await readFile(path.resolve(__dirname, '../fixtures/unescaped/utf8.txt'), 'utf8'); + }); + + it('should escape all non-ASCII characters', async() => { + const expected = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1.txt'), 'latin1'); + const actual = escape(unescaped); + + expect(actual).to.equal(expected); + }); + + context('when string is empty', () => { + it('should return empty string', () => { + const expected = ''; + const actual = escape(''); + + expect(actual).to.equal(expected); + }); + }); +}); diff --git a/test/unicode/index.spec.js b/test/unicode/index.spec.js index feac286..ecdd69a 100644 --- a/test/unicode/index.spec.js +++ b/test/unicode/index.spec.js @@ -22,4 +22,15 @@ 'use strict'; -// TODO: Complete +const { expect } = require('chai'); + +const escape = require('../../src/unicode/escape'); +const index = require('../../src/unicode/index'); +const unescape = require('../../src/unicode/unescape'); + +describe('unicode/index', () => { + it('should export correct functions', () => { + expect(index.escape).to.equal(escape); + expect(index.unescape).to.equal(unescape); + }); +}); diff --git a/test/unicode/unescape.spec.js b/test/unicode/unescape.spec.js index feac286..9af3b4e 100644 --- a/test/unicode/unescape.spec.js +++ b/test/unicode/unescape.spec.js @@ -22,4 +22,57 @@ 'use strict'; -// TODO: Complete +const { expect } = require('chai'); +const fs = require('fs'); +const path = require('path'); +const util = require('util'); + +const unescape = require('../../src/unicode/unescape'); + +const readFile = util.promisify(fs.readFile); + +describe('unicode/unescape', () => { + let escaped; + + before(async() => { + escaped = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1.txt'), 'latin1'); + }); + + it('should not attempt to unescape ascii characters', async() => { + const expected = await readFile(path.resolve(__dirname, '../fixtures/unescaped/ascii.txt'), 'ascii'); + const actual = unescape(expected); + + expect(actual).to.equal(expected); + }); + + it('should not attempt to unescape latin1 characters', async() => { + const expected = await readFile(path.resolve(__dirname, '../fixtures/unescaped/latin1.txt'), 'latin1'); + const actual = unescape(expected); + + expect(actual).to.equal(expected); + }); + + it('should unescape all escaped unicode values', async() => { + const expected = await readFile(path.resolve(__dirname, '../fixtures/unescaped/utf8.txt'), 'utf8'); + const actual = unescape(escaped); + + expect(actual).to.equal(expected); + }); + + context('when string is empty', () => { + it('should return empty string', () => { + const expected = ''; + const actual = unescape(''); + + expect(actual).to.equal(expected); + }); + }); + + context('when string contains invalid escaped unicode value', () => { + it('should throw an error', () => { + expect(() => { + unescape('\\u00ah'); + }).to.throw(Error, 'Unable to parse unicode: 00ah'); + }); + }); +}); From c9299954631aecb2c8c7ee46aef09ec8d176f836 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Wed, 6 Dec 2017 14:58:53 +0000 Subject: [PATCH 02/16] dropped transcoding from native2ascii API (for CLI only) and completed tests for native2ascii --- src/native2ascii.js | 22 +---- src/unicode/escape.js | 8 +- src/unicode/unescape.js | 6 +- test/fixtures/escaped/latin1-from-ascii.txt | Bin 0 -> 127 bytes test/fixtures/escaped/latin1-from-latin1.txt | Bin 0 -> 890 bytes .../{latin1.txt => latin1-from-utf8.txt} | Bin test/native2ascii.spec.js | 82 +++++++++++++++++- test/unicode/escape.spec.js | 25 ++++-- test/unicode/unescape.spec.js | 25 +++--- 9 files changed, 119 insertions(+), 49 deletions(-) create mode 100644 test/fixtures/escaped/latin1-from-ascii.txt create mode 100644 test/fixtures/escaped/latin1-from-latin1.txt rename test/fixtures/escaped/{latin1.txt => latin1-from-utf8.txt} (100%) diff --git a/src/native2ascii.js b/src/native2ascii.js index ac6557b..e52e821 100644 --- a/src/native2ascii.js +++ b/src/native2ascii.js @@ -26,8 +26,6 @@ const { escape, unescape } = require('./unicode'); -const defaultEncoding = 'utf8'; - // TODO: Document function native2ascii(input, options) { if (input == null) { @@ -37,25 +35,9 @@ function native2ascii(input, options) { options = {}; } - let converter; - let inputEncoding; - let outputEncoding; - - if (options.reverse) { - converter = unescape; - inputEncoding = 'latin1'; - outputEncoding = options.encoding || defaultEncoding; - } else { - converter = escape; - inputEncoding = options.encoding || defaultEncoding; - outputEncoding = 'latin1'; - } - - // TODO: Use iconv-lite - const decodedInput = Buffer.from(input, inputEncoding).toString('utf8'); - const encodedOutput = Buffer.from(converter(decodedInput), 'utf8').toString(outputEncoding); + const converter = options.reverse ? unescape : escape; - return encodedOutput; + return converter(input); } module.exports = native2ascii; diff --git a/src/unicode/escape.js b/src/unicode/escape.js index 04de939..640600c 100644 --- a/src/unicode/escape.js +++ b/src/unicode/escape.js @@ -27,16 +27,16 @@ const hexDigits = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ]; // TODO: Document -function escape(str) { +function escape(input) { let result = ''; - for (let i = 0, length = str.length; i < length; i++) { - const code = str.charCodeAt(i); + for (let i = 0, length = input.length; i < length; i++) { + const code = input.charCodeAt(i); if (code > 0x7f) { result += `\\u${toHex(code)}`; } else { - result += str.charAt(i); + result += input.charAt(i); } } diff --git a/src/unicode/unescape.js b/src/unicode/unescape.js index a91e8d6..9c3e46c 100644 --- a/src/unicode/unescape.js +++ b/src/unicode/unescape.js @@ -25,14 +25,14 @@ // TODO: Complete // TODO: Document -function unescape(str) { +function unescape(input) { let hadSlash = false; let inUnicode = false; let result = ''; let unicode = ''; - for (let i = 0, length = str.length; i < length; i++) { - const ch = str.charAt(i); + for (let i = 0, length = input.length; i < length; i++) { + const ch = input.charAt(i); if (inUnicode) { unicode += ch; diff --git a/test/fixtures/escaped/latin1-from-ascii.txt b/test/fixtures/escaped/latin1-from-ascii.txt new file mode 100644 index 0000000000000000000000000000000000000000..b01f757b14645d95333e712169f29f8682171449 GIT binary patch literal 127 zcmZQzWMXDvWn<^yMC+6cQE@6%&_`l#-T_m6KOcR8m$^Ra4i{)Y8_`)zddH zG%_|ZH8Z!cw6eCbwX=6{baHlab#wRd^z!!c_45x13gXK}AEyz{L8m@C(223%~FS zzwisc@C(223%~FSzwisc@+-gcE5Gt9zw#@;@+-gcE5Gt9zw#@;@f*MK8^7@zzwsNt z@f*MK8^7@zzwsNt^EJffA9x?@CSeJ z2Y>JffA9x?@+W`tCx7xMfAS}P@+W`tCx7xMfAS}P@fUyb7k}{=fAJT8@fUyb7k}{= Gf8{@das|Tx literal 0 HcmV?d00001 diff --git a/test/fixtures/escaped/latin1.txt b/test/fixtures/escaped/latin1-from-utf8.txt similarity index 100% rename from test/fixtures/escaped/latin1.txt rename to test/fixtures/escaped/latin1-from-utf8.txt diff --git a/test/native2ascii.spec.js b/test/native2ascii.spec.js index feac286..0739dfa 100644 --- a/test/native2ascii.spec.js +++ b/test/native2ascii.spec.js @@ -22,4 +22,84 @@ 'use strict'; -// TODO: Complete +const { expect } = require('chai'); +const fs = require('fs'); +const path = require('path'); +const util = require('util'); + +const native2ascii = require('../src/native2ascii'); + +const readFile = util.promisify(fs.readFile); + +describe('native2ascii', () => { + context('when input is null', () => { + it('should return null', () => { + expect(native2ascii(null)).to.equal(null); + }); + }); + + context('when input is undefined', () => { + it('should return undefined', () => { + /* eslint-disable no-undefined */ + expect(native2ascii(undefined)).to.equal(undefined); + /* eslint-enable no-undefined */ + }); + }); + + context('when no options are specified', () => { + it('should escape all non-ASCII characters within input', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt'), 'utf8'); + const expected = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt'), 'latin1'); + const actual = native2ascii(input); + + expect(actual).to.equal(expected); + }); + + context('and input is empty', () => { + it('should return an empty string', () => { + const expected = ''; + const actual = native2ascii(''); + + expect(actual).to.equal(expected); + }); + }); + }); + + context('when "reverse" option is disabled', () => { + it('should escape all non-ASCII characters within input', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt'), 'utf8'); + const expected = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt'), 'latin1'); + const actual = native2ascii(input); + + expect(actual).to.equal(expected, { reverse: false }); + }); + + context('and input is empty', () => { + it('should return an empty string', () => { + const expected = ''; + const actual = native2ascii('', { reverse: false }); + + expect(actual).to.equal(expected); + }); + }); + }); + + context('when "reverse" option is enabled', () => { + it('should unescape all escaped unicode values within input', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt'), 'latin1'); + const expected = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt'), 'utf8'); + const actual = native2ascii(input, { reverse: true }); + + expect(actual).to.equal(expected); + }); + + context('and input is empty', () => { + it('should return an empty string', () => { + const expected = ''; + const actual = native2ascii('', { reverse: true }); + + expect(actual).to.equal(expected); + }); + }); + }); +}); diff --git a/test/unicode/escape.spec.js b/test/unicode/escape.spec.js index 0f739a3..60d14a6 100644 --- a/test/unicode/escape.spec.js +++ b/test/unicode/escape.spec.js @@ -32,20 +32,31 @@ const escape = require('../../src/unicode/escape'); const readFile = util.promisify(fs.readFile); describe('unicode/escape', () => { - let unescaped; + it('should not escape any characters within ASCII character set', async() => { + const input = await readFile(path.resolve(__dirname, '../fixtures/unescaped/ascii.txt'), 'ascii'); + const expected = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1-from-ascii.txt'), 'ascii'); + const actual = escape(input); - before(async() => { - unescaped = await readFile(path.resolve(__dirname, '../fixtures/unescaped/utf8.txt'), 'utf8'); + expect(actual).to.equal(expected); + }); + + it('should only escape non-ASCII characters within ISO-8859-1 character set', async() => { + const input = await readFile(path.resolve(__dirname, '../fixtures/unescaped/latin1.txt'), 'latin1'); + const expected = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1-from-latin1.txt'), 'latin1'); + const actual = escape(input); + + expect(actual).to.equal(expected); }); - it('should escape all non-ASCII characters', async() => { - const expected = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1.txt'), 'latin1'); - const actual = escape(unescaped); + it('should only escape non-ASCII characters within UTF-8 character set', async() => { + const input = await readFile(path.resolve(__dirname, '../fixtures/unescaped/utf8.txt'), 'utf8'); + const expected = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1-from-utf8.txt'), 'latin1'); + const actual = escape(input); expect(actual).to.equal(expected); }); - context('when string is empty', () => { + context('when input is empty', () => { it('should return empty string', () => { const expected = ''; const actual = escape(''); diff --git a/test/unicode/unescape.spec.js b/test/unicode/unescape.spec.js index 9af3b4e..13e095d 100644 --- a/test/unicode/unescape.spec.js +++ b/test/unicode/unescape.spec.js @@ -32,34 +32,31 @@ const unescape = require('../../src/unicode/unescape'); const readFile = util.promisify(fs.readFile); describe('unicode/unescape', () => { - let escaped; - - before(async() => { - escaped = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1.txt'), 'latin1'); - }); - - it('should not attempt to unescape ascii characters', async() => { + it('should not unescape any characters within ASCII character set', async() => { + const input = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1-from-ascii.txt'), 'ascii'); const expected = await readFile(path.resolve(__dirname, '../fixtures/unescaped/ascii.txt'), 'ascii'); - const actual = unescape(expected); + const actual = unescape(input); expect(actual).to.equal(expected); }); - it('should not attempt to unescape latin1 characters', async() => { + it('should only unescape escaped unicode values within ISO-8859-1 character set', async() => { + const input = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1-from-latin1.txt'), 'latin1'); const expected = await readFile(path.resolve(__dirname, '../fixtures/unescaped/latin1.txt'), 'latin1'); - const actual = unescape(expected); + const actual = unescape(input); expect(actual).to.equal(expected); }); - it('should unescape all escaped unicode values', async() => { + it('should only unescape escaped unicode values within UTF-8 character set', async() => { + const input = await readFile(path.resolve(__dirname, '../fixtures/escaped/latin1-from-utf8.txt'), 'utf8'); const expected = await readFile(path.resolve(__dirname, '../fixtures/unescaped/utf8.txt'), 'utf8'); - const actual = unescape(escaped); + const actual = unescape(input); expect(actual).to.equal(expected); }); - context('when string is empty', () => { + context('when input is empty', () => { it('should return empty string', () => { const expected = ''; const actual = unescape(''); @@ -68,7 +65,7 @@ describe('unicode/unescape', () => { }); }); - context('when string contains invalid escaped unicode value', () => { + context('when input contains invalid escaped unicode value', () => { it('should throw an error', () => { expect(() => { unescape('\\u00ah'); From dcec8634c67b3540aabde898400d652c03347f54 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Wed, 6 Dec 2017 16:13:28 +0000 Subject: [PATCH 03/16] added initial cli implementation --- bin/native2ascii | 8 +-- src/cli.js | 138 ++++++++++++++++++++++++++++++++++++++++++++ src/native2ascii.js | 5 +- 3 files changed, 143 insertions(+), 8 deletions(-) diff --git a/bin/native2ascii b/bin/native2ascii index 5e002f4..fdd26ff 100755 --- a/bin/native2ascii +++ b/bin/native2ascii @@ -24,15 +24,13 @@ 'use strict'; -const CLI = require('../src/cli'); +const { parse, writeError } = require('../src/cli'); (async() => { - const cli = new CLI(); - try { - await cli.parse(process.argv); + await parse(process.argv); } catch (e) { - cli.error(`native2ascii failed: ${e.stack}`); + writeError(`native2ascii failed: ${e.stack}`); process.exit(1); } diff --git a/src/cli.js b/src/cli.js index feac286..abb6f81 100644 --- a/src/cli.js +++ b/src/cli.js @@ -23,3 +23,141 @@ 'use strict'; // TODO: Complete + +const { Command } = require('commander'); +const fs = require('fs'); +const { EOL } = require('os'); +const path = require('path'); +const util = require('util'); + +const native2ascii = require('./native2ascii'); +const { version } = require('../package.json'); + +const readFile = util.promisify(fs.readFile); +const writeFile = util.promisify(fs.writeFile); + +function getEncodings(command) { + const asciiEncoding = 'latin1'; + const nativeEncoding = command.encoding || 'utf8'; + let inputEncoding; + let outputEncoding; + + if (command.reverse) { + inputEncoding = asciiEncoding; + outputEncoding = nativeEncoding; + } else { + inputEncoding = nativeEncoding; + outputEncoding = asciiEncoding; + } + + return { inputEncoding, outputEncoding }; +} + +// TODO: Document +async function parse(argv, options) { + options = parseOptions(options); + + const command = new Command() + .version(version) + .usage('[options] [inputFile [outputFile]]') + .option('-e, --encoding ', 'specify encoding to be used by the conversion procedure') + .option('-r, --reverse', 'perform reverse operation') + .parse(argv); + const native2asciiOptions = { reverse: Boolean(command.reverse) }; + const { inputEncoding, outputEncoding } = getEncodings(command); + const [ inputFile, outputFile ] = command.args; + const input = await readInput(inputFile, inputEncoding, options); + const output = native2ascii(input, native2asciiOptions); + + await writeOutput(output, outputFile, outputEncoding, options); +} + +// TODO: Document +function parseOptions(options) { + return Object.assign({ + cwd: process.cwd(), + stderr: process.stderr, + stdin: process.stdin, + stdout: process.stdout + }, options); +} + +// TODO: Document +async function readInput(file, encoding, options) { + let buffer; + if (file) { + buffer = await readFile(path.resolve(options.cwd, file)); + } else { + buffer = await readStdin(options); + } + + return buffer.toString(encoding); +} + +// TODO: Document +function readStdin(options) { + const { stdin } = options; + const data = []; + let length = 0; + + return new Promise((resolve, reject) => { + if (stdin.isTTY) { + resolve(Buffer.alloc(0)); + } else { + stdin.on('error', (error) => { + reject(error); + }); + + stdin.on('readable', () => { + let chunk; + + while ((chunk = stdin.read()) != null) { + data.push(chunk); + length += chunk.length; + } + }); + + stdin.on('end', () => { + resolve(Buffer.concat(data, length)); + }); + } + }); +} + +// TODO: Document +function writeError(message, options) { + options = parseOptions(options); + + options.stderr.write(`${message}${EOL}`); +} + +// TODO: Document +async function writeOutput(output, file, encoding, options) { + if (file) { + await writeFile(path.resolve(options.cwd, file), output, encoding); + } else { + await writeStdout(output, encoding, options); + } +} + +// TODO: Document +function writeStdout(output, encoding, options) { + const { stdout } = options; + + return new Promise((resolve, reject) => { + stdout.on('error', (error) => { + reject(error); + }); + + stdout.on('finish', () => { + resolve(); + }); + + stdout.end(output, encoding); + }); +} + +module.exports = { + parse, + writeError +}; diff --git a/src/native2ascii.js b/src/native2ascii.js index e52e821..d48b761 100644 --- a/src/native2ascii.js +++ b/src/native2ascii.js @@ -31,9 +31,8 @@ function native2ascii(input, options) { if (input == null) { return input; } - if (!options) { - options = {}; - } + + options = Object.assign({ reverse: false }, options); const converter = options.reverse ? unescape : escape; From ac76c9083397e7e104e0bdc3cc8dbd21359a7b26 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Wed, 6 Dec 2017 16:42:01 +0000 Subject: [PATCH 04/16] started writing tests for cli --- src/cli.js | 5 +++-- test/cli.spec.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/cli.js b/src/cli.js index abb6f81..ce16863 100644 --- a/src/cli.js +++ b/src/cli.js @@ -26,7 +26,7 @@ const { Command } = require('commander'); const fs = require('fs'); -const { EOL } = require('os'); +const os = require('os'); const path = require('path'); const util = require('util'); @@ -76,6 +76,7 @@ async function parse(argv, options) { function parseOptions(options) { return Object.assign({ cwd: process.cwd(), + eol: os.EOL, stderr: process.stderr, stdin: process.stdin, stdout: process.stdout @@ -128,7 +129,7 @@ function readStdin(options) { function writeError(message, options) { options = parseOptions(options); - options.stderr.write(`${message}${EOL}`); + options.stderr.write(`${message}${options.eol}`); } // TODO: Document diff --git a/test/cli.spec.js b/test/cli.spec.js index feac286..24acc31 100644 --- a/test/cli.spec.js +++ b/test/cli.spec.js @@ -23,3 +23,58 @@ 'use strict'; // TODO: Complete + +const { expect } = require('chai'); +const fs = require('fs'); +const path = require('path'); +const { Writable } = require('stream'); +const util = require('util'); + +const cli = require('../src/cli'); + +const readFile = util.promisify(fs.readFile); + +describe('cli', () => { + class MockWritable extends Writable { + + constructor(options) { + super(options); + + this.buffer = Buffer.alloc(0); + this.length = 0; + } + + _write(chunk, encoding, callback) { + this.length += chunk.length; + this.buffer = Buffer.concat([ this.buffer, Buffer.from(chunk, encoding) ], this.length); + + callback(); + } + + } + + let options; + + beforeEach(() => { + options = { + cwd: __dirname, + eol: '\n', + stderr: new MockWritable(), + // TODO: Create MockReadable + stdin: null, + stdout: new MockWritable() + }; + }); + + describe('.parse', () => { + // TODO: Complete + }); + + describe('.writeError', () => { + it('should write message to stderr', () => { + cli.writeError('foo', options); + + expect(options.stderr.buffer.toString()).to.equal('foo\n'); + }); + }); +}); From 3675f06770b2d5f2403679a34f553a02e9c69087 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Wed, 6 Dec 2017 17:02:02 +0000 Subject: [PATCH 05/16] added istanbul and codecov for code coverage checks --- .eslintignore | 1 + .gitignore | 1 + .istanbul.yml | 6 ++++++ .npmignore | 2 ++ .travis.yml | 2 ++ codecov.yml | 1 + package.json | 6 +++++- 7 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .eslintignore create mode 100644 .istanbul.yml create mode 100644 codecov.yml diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..404abb2 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +coverage/ diff --git a/.gitignore b/.gitignore index 552f221..fa077bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +coverage/ node_modules/ *.log diff --git a/.istanbul.yml b/.istanbul.yml new file mode 100644 index 0000000..437a177 --- /dev/null +++ b/.istanbul.yml @@ -0,0 +1,6 @@ +check: + global: + branches: 100 + functions: 100 + lines: 100 + statements: 100 diff --git a/.npmignore b/.npmignore index 09cf02d..d1181e5 100644 --- a/.npmignore +++ b/.npmignore @@ -1,4 +1,6 @@ +coverage/ test/ .* AUTHORS.md +codecov.yml CONTRIBUTING.md diff --git a/.travis.yml b/.travis.yml index e85d686..76999ab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,8 @@ node_js: - "8" script: - npm test +after_script: + - npm run report-coverage notifications: slack: rooms: diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..db24720 --- /dev/null +++ b/codecov.yml @@ -0,0 +1 @@ +comment: off diff --git a/package.json b/package.json index fa9b789..74a29c7 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,10 @@ }, "devDependencies": { "chai": "^4.1.2", + "codecov": "^3.0.0", "eslint": "^4.12.1", "eslint-config-notninja": "^0.2.3", + "istanbul": "^0.4.5", "mocha": "^4.0.1" }, "bin": { @@ -39,8 +41,10 @@ }, "main": "src/native2ascii.js", "scripts": { + "report-coverage": "istanbul cover _mocha --report lcovonly -- -R list \"test/**/*.spec.js\" && codecov", "pretest": "eslint \"bin/native2ascii\" \"src/**/*.js\" \"test/**/*.js\"", - "test": "mocha -R list \"test/**/*.spec.js\"" + "test": "istanbul cover _mocha -- -R list \"test/**/*.spec.js\"", + "posttest": "istanbul check-coverage" }, "engines": { "node": ">=8" From 9ec295f4d648b40ff30b47f44cfb918aff869a58 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 00:57:26 +0000 Subject: [PATCH 06/16] added unit tests for help and version CLI options --- package.json | 3 +- src/cli.js | 7 +-- test/cli.spec.js | 114 ++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 114 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 74a29c7..102b6f2 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "eslint": "^4.12.1", "eslint-config-notninja": "^0.2.3", "istanbul": "^0.4.5", - "mocha": "^4.0.1" + "mocha": "^4.0.1", + "sinon": "^4.1.2" }, "bin": { "native2ascii": "bin/native2ascii" diff --git a/src/cli.js b/src/cli.js index ce16863..1252025 100644 --- a/src/cli.js +++ b/src/cli.js @@ -57,12 +57,13 @@ function getEncodings(command) { async function parse(argv, options) { options = parseOptions(options); - const command = new Command() - .version(version) - .usage('[options] [inputFile [outputFile]]') + const command = new Command('native2ascii') + .arguments('[inputFile] [outputFile]') .option('-e, --encoding ', 'specify encoding to be used by the conversion procedure') .option('-r, --reverse', 'perform reverse operation') + .version(version) .parse(argv); + const native2asciiOptions = { reverse: Boolean(command.reverse) }; const { inputEncoding, outputEncoding } = getEncodings(command); const [ inputFile, outputFile ] = command.args; diff --git a/test/cli.spec.js b/test/cli.spec.js index 24acc31..ff55303 100644 --- a/test/cli.spec.js +++ b/test/cli.spec.js @@ -27,26 +27,49 @@ const { expect } = require('chai'); const fs = require('fs'); const path = require('path'); -const { Writable } = require('stream'); +const sinon = require('sinon'); +const { Readable, Writable } = require('stream'); const util = require('util'); const cli = require('../src/cli'); +const { version } = require('../package.json'); const readFile = util.promisify(fs.readFile); describe('cli', () => { + class MockReadable extends Readable { + + constructor(buffer, options) { + super(options); + + this.buffer = buffer || Buffer.alloc(0); + this._bufferRead = false; + } + + _read() { + if (this._bufferRead) { + this.push(null); + } else { + this.push(this.buffer); + + this._bufferRead = true; + } + } + + } + class MockWritable extends Writable { constructor(options) { super(options); this.buffer = Buffer.alloc(0); - this.length = 0; + this._length = 0; } _write(chunk, encoding, callback) { - this.length += chunk.length; - this.buffer = Buffer.concat([ this.buffer, Buffer.from(chunk, encoding) ], this.length); + this._length += chunk.length; + this.buffer = Buffer.concat([ this.buffer, Buffer.from(chunk, encoding) ], this._length); callback(); } @@ -60,14 +83,93 @@ describe('cli', () => { cwd: __dirname, eol: '\n', stderr: new MockWritable(), - // TODO: Create MockReadable - stdin: null, + stdin: new MockReadable(), stdout: new MockWritable() }; }); describe('.parse', () => { // TODO: Complete + context('when --help option is included in argv', () => { + function cleanUp() { + if (process.exit.restore) { + process.exit.restore(); + } + if (process.stdout.write.restore) { + process.stdout.write.restore(); + } + } + + beforeEach(() => { + sinon.stub(process, 'exit'); + sinon.stub(process.stdout, 'write'); + }); + + afterEach(cleanUp); + + it('should print help information and exit', async() => { + process.exit.throws(); + + try { + await cli.parse([ null, null, '--help' ], options); + } catch (e) { + expect(process.stdout.write.callCount).to.equal(1); + expect(process.stdout.write.getCall(0).args).to.deep.equal([ + ` + Usage: native2ascii [options] [inputFile] [outputFile] + + + Options: + + -e, --encoding specify encoding to be used by the conversion procedure + -r, --reverse perform reverse operation + -V, --version output the version number + -h, --help output usage information +` + ]); + expect(process.exit.callCount).to.be.at.least(1); + expect(process.exit.getCall(0).args).to.deep.equal([ 0 ]); + } finally { + cleanUp(); + } + }); + }); + + context('when --version option is included in argv', () => { + function cleanUp() { + if (process.exit.restore) { + process.exit.restore(); + } + if (process.stdout.write.restore) { + process.stdout.write.restore(); + } + } + + beforeEach(() => { + sinon.stub(process, 'exit'); + sinon.stub(process.stdout, 'write'); + }); + + afterEach(cleanUp); + + it('should print version and exit', async() => { + process.exit.throws(); + + try { + await cli.parse([ null, null, '--version' ], options); + } catch (e) { + expect(process.stdout.write.callCount).to.equal(1); + expect(process.stdout.write.getCall(0).args).to.deep.equal([ + `${version} +` + ]); + expect(process.exit.callCount).to.be.at.least(1); + expect(process.exit.getCall(0).args).to.deep.equal([ 0 ]); + } finally { + cleanUp(); + } + }); + }); }); describe('.writeError', () => { From 1b7c3facea1cc099e89681b7d74b4e81208c5b67 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 09:17:21 +0000 Subject: [PATCH 07/16] removed code coverage, for now --- .eslintignore | 1 - .gitignore | 1 - .istanbul.yml | 6 ------ .npmignore | 2 -- .travis.yml | 2 -- codecov.yml | 1 - package.json | 6 +----- 7 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .istanbul.yml delete mode 100644 codecov.yml diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 404abb2..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/.gitignore b/.gitignore index fa077bd..552f221 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -coverage/ node_modules/ *.log diff --git a/.istanbul.yml b/.istanbul.yml deleted file mode 100644 index 437a177..0000000 --- a/.istanbul.yml +++ /dev/null @@ -1,6 +0,0 @@ -check: - global: - branches: 100 - functions: 100 - lines: 100 - statements: 100 diff --git a/.npmignore b/.npmignore index d1181e5..09cf02d 100644 --- a/.npmignore +++ b/.npmignore @@ -1,6 +1,4 @@ -coverage/ test/ .* AUTHORS.md -codecov.yml CONTRIBUTING.md diff --git a/.travis.yml b/.travis.yml index 76999ab..e85d686 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,6 @@ node_js: - "8" script: - npm test -after_script: - - npm run report-coverage notifications: slack: rooms: diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index db24720..0000000 --- a/codecov.yml +++ /dev/null @@ -1 +0,0 @@ -comment: off diff --git a/package.json b/package.json index 102b6f2..0f35cd6 100644 --- a/package.json +++ b/package.json @@ -30,10 +30,8 @@ }, "devDependencies": { "chai": "^4.1.2", - "codecov": "^3.0.0", "eslint": "^4.12.1", "eslint-config-notninja": "^0.2.3", - "istanbul": "^0.4.5", "mocha": "^4.0.1", "sinon": "^4.1.2" }, @@ -42,10 +40,8 @@ }, "main": "src/native2ascii.js", "scripts": { - "report-coverage": "istanbul cover _mocha --report lcovonly -- -R list \"test/**/*.spec.js\" && codecov", "pretest": "eslint \"bin/native2ascii\" \"src/**/*.js\" \"test/**/*.js\"", - "test": "istanbul cover _mocha -- -R list \"test/**/*.spec.js\"", - "posttest": "istanbul check-coverage" + "test": "mocha -R list \"test/**/*.spec.js\"" }, "engines": { "node": ">=8" From 5414173c0707b9b340c0bb34f45bc6812631e1a8 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 12:00:06 +0000 Subject: [PATCH 08/16] complete unit tests --- package.json | 3 +- src/cli.js | 4 + test/cli.spec.js | 239 +++++++++++++++++++++++++++++++++++++++- test/fixtures/empty.txt | 0 4 files changed, 240 insertions(+), 6 deletions(-) create mode 100644 test/fixtures/empty.txt diff --git a/package.json b/package.json index 0f35cd6..d234c6f 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "eslint": "^4.12.1", "eslint-config-notninja": "^0.2.3", "mocha": "^4.0.1", - "sinon": "^4.1.2" + "sinon": "^4.1.2", + "tmp": "0.0.33" }, "bin": { "native2ascii": "bin/native2ascii" diff --git a/src/cli.js b/src/cli.js index 1252025..85c5dc3 100644 --- a/src/cli.js +++ b/src/cli.js @@ -37,6 +37,10 @@ const readFile = util.promisify(fs.readFile); const writeFile = util.promisify(fs.writeFile); function getEncodings(command) { + if (command.encoding && !Buffer.isEncoding(command.encoding)) { + throw new Error(`Invalid encoding: ${command.encoding}`); + } + const asciiEncoding = 'latin1'; const nativeEncoding = command.encoding || 'utf8'; let inputEncoding; diff --git a/test/cli.spec.js b/test/cli.spec.js index ff55303..3d44a66 100644 --- a/test/cli.spec.js +++ b/test/cli.spec.js @@ -22,13 +22,12 @@ 'use strict'; -// TODO: Complete - const { expect } = require('chai'); const fs = require('fs'); const path = require('path'); const sinon = require('sinon'); const { Readable, Writable } = require('stream'); +const tmp = require('tmp'); const util = require('util'); const cli = require('../src/cli'); @@ -47,6 +46,10 @@ describe('cli', () => { } _read() { + if (this.buffer.length === 0) { + this._bufferRead = true; + } + if (this._bufferRead) { this.push(null); } else { @@ -89,7 +92,223 @@ describe('cli', () => { }); describe('.parse', () => { - // TODO: Complete + context('when no files are included in argv', () => { + it('should escape all non-ASCII characters read from STDIN and write to STDOUT', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt')); + const expected = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt')); + + options.stdin.buffer = input; + + await cli.parse([ null, null ], options); + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + + context('and STDIN is empty', () => { + it('should write empty buffer to STDOUT', async() => { + const expected = Buffer.alloc(0); + + await cli.parse([ null, null ], options); + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + }); + + context('and --encoding option is included in argv', () => { + it('should escape all non-ASCII characters read from STDIN and write to STDOUT', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/latin1.txt')); + const expected = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-latin1.txt')); + + options.stdin.buffer = input; + + await cli.parse([ + null, null, + '--encoding', 'latin1' + ], options); + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + + context('and value is invalid', () => { + it('should throw an error', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/latin1.txt')); + const expected = Buffer.alloc(0); + + options.stdin.buffer = input; + + try { + await cli.parse([ + null, null, + '--encoding', 'foo' + ], options); + // Should have thrown + expect.fail(); + } catch (e) { + expect(e).to.be.an('error'); + expect(e.message).to.equal('Invalid encoding: foo'); + } + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + }); + }); + + context('and --reverse option is included in argv', () => { + it('should unescape all escaped unicode values read from STDIN and write to STDOUT', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt')); + const expected = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt')); + + options.stdin.buffer = input; + + await cli.parse([ + null, null, + '--reverse' + ], options); + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + }); + + context('and both --encoding and --reverse options are included in argv', () => { + it('should unescape all escaped unicode values read from STDIN and write to STDOUT', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-latin1.txt')); + const expected = await readFile(path.resolve(__dirname, './fixtures/unescaped/latin1.txt')); + + options.stdin.buffer = input; + + await cli.parse([ + null, null, + '--encoding', 'latin1', + '--reverse' + ], options); + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + }); + }); + + context('when input and output files are included in argv', () => { + let outputFile; + let removeOutputFile; + + beforeEach((done) => { + tmp.file((error, filePath, fd, cleanUp) => { + if (error) { + done(error); + } else { + outputFile = filePath; + removeOutputFile = cleanUp; + + done(); + } + }); + }); + + afterEach(() => { + removeOutputFile(); + }); + + it('should escape all non-ASCII characters read from input file and write to output file', async() => { + await cli.parse([ + null, null, + path.resolve(__dirname, './fixtures/unescaped/utf8.txt'), + outputFile + ], options); + + const actual = await readFile(outputFile); + const expected = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt')); + + expect(actual).to.deep.equal(expected); + }); + + context('and input file is empty', () => { + it('should write empty buffer to output file', async() => { + await cli.parse([ + null, null, + path.resolve(__dirname, './fixtures/empty.txt'), + outputFile + ], options); + + const actual = await readFile(outputFile); + const expected = Buffer.alloc(0); + + expect(actual).to.deep.equal(expected); + }); + }); + + context('and --encoding option is included in argv', () => { + it('should escape all non-ASCII characters read from input file and write to output file', async() => { + await cli.parse([ + null, null, + '--encoding', 'latin1', + path.resolve(__dirname, './fixtures/unescaped/latin1.txt'), + outputFile + ], options); + + const actual = await readFile(outputFile); + const expected = await readFile(path.resolve(__dirname, './fixtures/escaped/latin1-from-latin1.txt')); + + expect(actual).to.deep.equal(expected); + }); + + context('and value is invalid', () => { + it('should throw an error', async() => { + try { + await cli.parse([ + null, null, + '--encoding', 'foo', + path.resolve(__dirname, './fixtures/unescaped/latin1.txt'), + outputFile + ], options); + // Should have thrown + expect.fail(); + } catch (e) { + expect(e).to.be.an('error'); + expect(e.message).to.equal('Invalid encoding: foo'); + } + + const actual = await readFile(outputFile); + const expected = Buffer.alloc(0); + + expect(actual).to.deep.equal(expected); + }); + }); + }); + + context('and --reverse option is included in argv', () => { + it('should unescape all escaped unicode values read from imput file and write to output file', async() => { + await cli.parse([ + null, null, + '--reverse', + path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt'), + outputFile + ], options); + + const actual = await readFile(outputFile); + const expected = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt')); + + expect(actual).to.deep.equal(expected); + }); + }); + + context('and both --encoding and --reverse options are included in argv', () => { + it('should unescape all escaped unicode values read from imput file and write to output file', async() => { + await cli.parse([ + null, null, + '--encoding', 'latin1', + '--reverse', + path.resolve(__dirname, './fixtures/escaped/latin1-from-latin1.txt'), + outputFile + ], options); + + const actual = await readFile(outputFile); + const expected = await readFile(path.resolve(__dirname, './fixtures/unescaped/latin1.txt')); + + expect(actual).to.deep.equal(expected); + }); + }); + }); + context('when --help option is included in argv', () => { function cleanUp() { if (process.exit.restore) { @@ -111,7 +330,12 @@ describe('cli', () => { process.exit.throws(); try { - await cli.parse([ null, null, '--help' ], options); + await cli.parse([ + null, null, + '--help' + ], options); + // Stubbed process.exit should have thrown + expect.fail(); } catch (e) { expect(process.stdout.write.callCount).to.equal(1); expect(process.stdout.write.getCall(0).args).to.deep.equal([ @@ -156,7 +380,12 @@ describe('cli', () => { process.exit.throws(); try { - await cli.parse([ null, null, '--version' ], options); + await cli.parse([ + null, null, + '--version' + ], options); + // Stubbed process.exit should have thrown + expect.fail(); } catch (e) { expect(process.stdout.write.callCount).to.equal(1); expect(process.stdout.write.getCall(0).args).to.deep.equal([ diff --git a/test/fixtures/empty.txt b/test/fixtures/empty.txt new file mode 100644 index 0000000..e69de29 From d714577675d9ab5e7046c639fce166da81521790 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 13:16:16 +0000 Subject: [PATCH 09/16] improved performance of unescape by ~40% --- src/unicode/escape.js | 2 - src/unicode/unescape.js | 90 +++++++++++++++++++++-------------- test/unicode/unescape.spec.js | 2 +- 3 files changed, 55 insertions(+), 39 deletions(-) diff --git a/src/unicode/escape.js b/src/unicode/escape.js index 640600c..d885fb4 100644 --- a/src/unicode/escape.js +++ b/src/unicode/escape.js @@ -22,8 +22,6 @@ 'use strict'; -// TODO: Complete - const hexDigits = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ]; // TODO: Document diff --git a/src/unicode/unescape.js b/src/unicode/unescape.js index 9c3e46c..e6c85b8 100644 --- a/src/unicode/unescape.js +++ b/src/unicode/unescape.js @@ -22,61 +22,79 @@ 'use strict'; +/* eslint complexity: "off" */ + // TODO: Complete // TODO: Document function unescape(input) { - let hadSlash = false; - let inUnicode = false; let result = ''; - let unicode = ''; for (let i = 0, length = input.length; i < length; i++) { - const ch = input.charAt(i); - - if (inUnicode) { - unicode += ch; - - if (unicode.length === 4) { - const code = Number(`0x${unicode}`); - if (Number.isNaN(code)) { - throw new Error(`Unable to parse unicode: ${unicode}`); - } - - result += String.fromCharCode(code); + let ch = input.charAt(i); - hadSlash = false; - inUnicode = false; - unicode = ''; - } - - continue; - } - - if (hadSlash) { - hadSlash = false; + if (ch === '\\') { + ch = input.charAt(++i); if (ch === 'u') { - inUnicode = true; + result += getUnicode(input, i); + i += 4; } else { result += `\\${ch}`; } + } else { + result += ch; + } + } - continue; - } else if (ch === '\\') { - hadSlash = true; + return result; +} - continue; - } +// TODO: Document +function getUnicode(input, offset) { + offset++; - result += ch; - } + let unicode = 0; - if (hadSlash) { - result += '\\'; + for (let i = offset, end = offset + 4; i < end; i++) { + const ch = input.charAt(i); + const code = ch.charCodeAt(0); + + switch (ch) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + unicode = (unicode << 4) + code - 0x30; + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + unicode = (unicode << 4) + 10 + code - 0x41; + break; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + unicode = (unicode << 4) + 10 + code - 0x61; + break; + default: + throw new Error(`Malformed character found in \\uxxxx encoding: ${ch}`); + } } - return result; + return String.fromCharCode(unicode); } module.exports = unescape; diff --git a/test/unicode/unescape.spec.js b/test/unicode/unescape.spec.js index 13e095d..2298e54 100644 --- a/test/unicode/unescape.spec.js +++ b/test/unicode/unescape.spec.js @@ -69,7 +69,7 @@ describe('unicode/unescape', () => { it('should throw an error', () => { expect(() => { unescape('\\u00ah'); - }).to.throw(Error, 'Unable to parse unicode: 00ah'); + }).to.throw(Error, 'Malformed character found in \\uxxxx encoding: h'); }); }); }); From 59c4ac9167667174dedc19be1ccb2c3fd7dc20ba Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 13:20:03 +0000 Subject: [PATCH 10/16] removed obsolete dependency --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index d234c6f..5482476 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,7 @@ "url": "https://github.com/NotNinja/node-native2ascii.git" }, "dependencies": { - "commander": "^2.12.2", - "get-stdin": "^5.0.1" + "commander": "^2.12.2" }, "devDependencies": { "chai": "^4.1.2", From db2735a3d14348d6b11508ad9ce16e6f952de304 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 14:57:43 +0000 Subject: [PATCH 11/16] added code coverage again using latest istanbul version --- .eslintignore | 1 + .gitignore | 2 + .npmignore | 2 + .nycrc | 9 +++++ .travis.yml | 2 + codecov.yml | 5 +++ package.json | 8 +++- test/cli.spec.js | 70 +++++++++++++++++++++++++++++++++-- test/unicode/unescape.spec.js | 7 ++++ 9 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 .eslintignore create mode 100644 .nycrc create mode 100644 codecov.yml diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..404abb2 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +coverage/ diff --git a/.gitignore b/.gitignore index 552f221..1dd4390 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ +.nyc_output/ +coverage/ node_modules/ *.log diff --git a/.npmignore b/.npmignore index 09cf02d..d1181e5 100644 --- a/.npmignore +++ b/.npmignore @@ -1,4 +1,6 @@ +coverage/ test/ .* AUTHORS.md +codecov.yml CONTRIBUTING.md diff --git a/.nycrc b/.nycrc new file mode 100644 index 0000000..f637097 --- /dev/null +++ b/.nycrc @@ -0,0 +1,9 @@ +{ + "check-coverage": true, + "lines": 95, + "statements": 95, + "functions": 95, + "branches": 95, + "include": [ "src/**/*.js" ], + "reporter": [ "lcov" ] +} diff --git a/.travis.yml b/.travis.yml index e85d686..ae5428d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,8 @@ node_js: - "8" script: - npm test +after_success: + - npm run coverage notifications: slack: rooms: diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..8dc7782 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,5 @@ +comment: off +coverage: + precision: 2 + range: "95...100" + round: down diff --git a/package.json b/package.json index 5482476..0218518 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,12 @@ }, "devDependencies": { "chai": "^4.1.2", + "codecov": "^3.0.0", "eslint": "^4.12.1", "eslint-config-notninja": "^0.2.3", "mocha": "^4.0.1", - "sinon": "^4.1.2", + "nyc": "^11.3.0", + "sinon": "^4.1.3", "tmp": "0.0.33" }, "bin": { @@ -40,8 +42,10 @@ }, "main": "src/native2ascii.js", "scripts": { + "coverage": "nyc report && codecov", "pretest": "eslint \"bin/native2ascii\" \"src/**/*.js\" \"test/**/*.js\"", - "test": "mocha -R list \"test/**/*.spec.js\"" + "test": "nyc mocha -R list \"test/**/*.spec.js\"", + "posttest": "nyc check-coverage" }, "engines": { "node": ">=8" diff --git a/test/cli.spec.js b/test/cli.spec.js index 3d44a66..411a230 100644 --- a/test/cli.spec.js +++ b/test/cli.spec.js @@ -38,14 +38,19 @@ const readFile = util.promisify(fs.readFile); describe('cli', () => { class MockReadable extends Readable { - constructor(buffer, options) { + constructor(options) { super(options); - this.buffer = buffer || Buffer.alloc(0); + this.buffer = Buffer.alloc(0); + this.error = null; this._bufferRead = false; } _read() { + if (this.error) { + this.emit('error', this.error); + } + if (this.buffer.length === 0) { this._bufferRead = true; } @@ -67,14 +72,19 @@ describe('cli', () => { super(options); this.buffer = Buffer.alloc(0); + this.error = null; this._length = 0; } _write(chunk, encoding, callback) { + if (this.error) { + return callback(this.error); + } + this._length += chunk.length; this.buffer = Buffer.concat([ this.buffer, Buffer.from(chunk, encoding) ], this._length); - callback(); + return callback(); } } @@ -114,6 +124,60 @@ describe('cli', () => { }); }); + context('and STDIN is TTY', () => { + it('should write empty buffer to STDOUT', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt')); + const expected = Buffer.alloc(0); + + options.stdin.buffer = input; + options.stdin.isTTY = true; + + await cli.parse([ null, null ], options); + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + }); + + context('and failed to read from STDIN', () => { + it('should throw an error', async() => { + const expected = Buffer.alloc(0); + const expectedError = new Error('foo'); + + options.stdin.error = expectedError; + + try { + await cli.parse([ null, null ], options); + // Should have thrown + expect.fail(); + } catch (e) { + expect(e).to.equal(expectedError); + } + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + }); + + context('and failed to write to STDOUT', () => { + it('should throw an error', async() => { + const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/utf8.txt')); + const expected = Buffer.alloc(0); + const expectedError = new Error('foo'); + + options.stdin.buffer = input; + options.stdout.error = expectedError; + + try { + await cli.parse([ null, null ], options); + // Should have thrown + expect.fail(); + } catch (e) { + expect(e).to.equal(expectedError); + } + + expect(options.stdout.buffer).to.deep.equal(expected); + }); + }); + context('and --encoding option is included in argv', () => { it('should escape all non-ASCII characters read from STDIN and write to STDOUT', async() => { const input = await readFile(path.resolve(__dirname, './fixtures/unescaped/latin1.txt')); diff --git a/test/unicode/unescape.spec.js b/test/unicode/unescape.spec.js index 2298e54..9fe706a 100644 --- a/test/unicode/unescape.spec.js +++ b/test/unicode/unescape.spec.js @@ -56,6 +56,13 @@ describe('unicode/unescape', () => { expect(actual).to.equal(expected); }); + it('should ignore case when unescaping escaped unicode values', () => { + const expected = '\u001a\u001b\u001c\u001d\u001e\u001f'; + const actual = unescape('\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F'); + + expect(actual).to.equal(expected); + }); + context('when input is empty', () => { it('should return empty string', () => { const expected = ''; From ad0f9fe38f9cfc6f1464aecd36159efcdf57e561 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 15:34:31 +0000 Subject: [PATCH 12/16] removed some TODO comments --- src/cli.js | 2 -- src/native2ascii.js | 2 -- src/unicode/unescape.js | 2 -- 3 files changed, 6 deletions(-) diff --git a/src/cli.js b/src/cli.js index 85c5dc3..0b8879f 100644 --- a/src/cli.js +++ b/src/cli.js @@ -22,8 +22,6 @@ 'use strict'; -// TODO: Complete - const { Command } = require('commander'); const fs = require('fs'); const os = require('os'); diff --git a/src/native2ascii.js b/src/native2ascii.js index d48b761..0b55ebe 100644 --- a/src/native2ascii.js +++ b/src/native2ascii.js @@ -22,8 +22,6 @@ 'use strict'; -// TODO: Complete - const { escape, unescape } = require('./unicode'); // TODO: Document diff --git a/src/unicode/unescape.js b/src/unicode/unescape.js index e6c85b8..7700997 100644 --- a/src/unicode/unescape.js +++ b/src/unicode/unescape.js @@ -24,8 +24,6 @@ /* eslint complexity: "off" */ -// TODO: Complete - // TODO: Document function unescape(input) { let result = ''; From 99b8c4699eb5c819b05adcdbe39a01eca2e73403 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 16:33:49 +0000 Subject: [PATCH 13/16] started adding JSDoc --- src/native2ascii.js | 27 ++++++++++++++++++++++++++- src/unicode/escape.js | 32 +++++++++++++++++++++++++------- src/unicode/unescape.js | 31 ++++++++++++++++++++++++++----- 3 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/native2ascii.js b/src/native2ascii.js index 0b55ebe..beaef4d 100644 --- a/src/native2ascii.js +++ b/src/native2ascii.js @@ -24,7 +24,24 @@ const { escape, unescape } = require('./unicode'); -// TODO: Document +/** + * Converts the specified input so that it can be encoded in ASCII by using Unicode escapes ("\uxxxx" + * notation) for all characters that are not part of the ASCII character set. + * + * This function is useful for properties files containing characters not in ISO-8859-1 character sets. + * + * A reverse conversion can be performed by enabling the reverse option. + * + * This function will throw an error when performing a reverse conversion if input contains a malformed + * Unicode escape. + * + * @param {?string} input - the string to be converted (may be null) + * @param {?native2ascii~Options} [options] - the options to be used (may be null) + * @return {?string} The converted output from input or + * null if input is null. + * @throws {Error} If the reverse option is enabled and input contains a malformed Unicode + * escape. + */ function native2ascii(input, options) { if (input == null) { return input; @@ -38,3 +55,11 @@ function native2ascii(input, options) { } module.exports = native2ascii; + +/** + * The options that can be passed to {@link native2ascii}. + * + * @typedef {Object} native2ascii~Options + * @property {?boolean} [reverse] - true to reverse the operation; otherwise false. May be + * null. + */ diff --git a/src/unicode/escape.js b/src/unicode/escape.js index d885fb4..73ea3dd 100644 --- a/src/unicode/escape.js +++ b/src/unicode/escape.js @@ -24,7 +24,12 @@ const hexDigits = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ]; -// TODO: Document +/** + * Converts all Unicode characters within the specifed input to Unicode escapes ("\uxxxx" notation). + * + * @param {string} input - the string to be converted + * @return {string} The converted output from input. + */ function escape(input) { let result = ''; @@ -41,14 +46,27 @@ function escape(input) { return result; } -// TODO: Document -function getHexDigit(n) { - return hexDigits[n & 15]; +/** + * Converts the specified character code to a hexadecimal value. + * + * @param {number} code - the character code to be converted + * @return {string} The 4-digit hexadecimal string. + */ +function toHex(code) { + return toHexDigit((code >> 12) & 15) + + toHexDigit((code >> 8) & 15) + + toHexDigit((code >> 4) & 15) + + toHexDigit(code & 15); } -// TODO: Document -function toHex(n) { - return getHexDigit((n >> 12) & 15) + getHexDigit((n >> 8) & 15) + getHexDigit((n >> 4) & 15) + getHexDigit(n & 15); +/** + * Converts the specified nibble to a hexadecimal digit. + * + * @param {number} nibble - the nibble to be converted + * @return {string} The single-digit hexadecimal string. + */ +function toHexDigit(nibble) { + return hexDigits[nibble & 15]; } module.exports = escape; diff --git a/src/unicode/unescape.js b/src/unicode/unescape.js index 7700997..348055d 100644 --- a/src/unicode/unescape.js +++ b/src/unicode/unescape.js @@ -24,7 +24,16 @@ /* eslint complexity: "off" */ -// TODO: Document +/** + * Converts all Unicode escapes ("\uxxxx" notation) within the specified input into their corresponding + * Unicode characters. + * + * This function will throw an error if input contains a malformed Unicode escape. + * + * @param {string} input - the string to be converted + * @return {string} The converted output from input. + * @throws {Error} If input contains a malformed Unicode escape. + */ function unescape(input) { let result = ''; @@ -35,7 +44,7 @@ function unescape(input) { ch = input.charAt(++i); if (ch === 'u') { - result += getUnicode(input, i); + result += getUnicode(input, i + 1); i += 4; } else { result += `\\${ch}`; @@ -48,10 +57,22 @@ function unescape(input) { return result; } -// TODO: Document +/** + * Attempts to convert the Unicode escape within input at the specified offset. + * + * offset should be the index of the first character after the "\u" prefix of the Unicode escape and will + * result in the offset being increased as it reads in the next four characters within input. + * + * This function will throw an error if the hexadecimal value corresponding to the Unicode escape at the specified + * offset is malformed. + * + * @param {string} input - the string to be converted + * @param {number} offset - the offset of the hexadecimal segment of the Unicode escape from which the Unicode character + * is to be derived relative to input + * @return {string} The Unicode character converted from the escape at offset within input. + * @throws {Error} If the Unicode escape is malformed. + */ function getUnicode(input, offset) { - offset++; - let unicode = 0; for (let i = offset, end = offset + 4; i < end; i++) { From 02cb66bd870161134e4e393c1c41817b423b38a2 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Thu, 7 Dec 2017 17:01:54 +0000 Subject: [PATCH 14/16] more JSDoc progress --- src/cli.js | 66 ++++++++++++++++++++++++++++++++++++++++++--- src/native2ascii.js | 4 +-- test/cli.spec.js | 14 +++++----- 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/src/cli.js b/src/cli.js index 0b8879f..85e3b3d 100644 --- a/src/cli.js +++ b/src/cli.js @@ -34,6 +34,17 @@ const { version } = require('../package.json'); const readFile = util.promisify(fs.readFile); const writeFile = util.promisify(fs.writeFile); +/** + * Determines the character encodings to be used to read input and write output based on the specified + * command. + * + * This function will throw an error if command.encoding is specified but is not a valid character + * encoding. + * + * @param {Command} command - the Command for the parsed arguments + * @return {cli~Encodings} The character encodings to be used. + * @throws {Error} If command.encoding is specified but is invalid. + */ function getEncodings(command) { if (command.encoding && !Buffer.isEncoding(command.encoding)) { throw new Error(`Invalid encoding: ${command.encoding}`); @@ -55,12 +66,35 @@ function getEncodings(command) { return { inputEncoding, outputEncoding }; } -// TODO: Document +/** + * Parses the command line arguments and performs the necessary operation. + * + * The primary operation is to convert a file that is encoded to any character encoding that is supported by Node.js + * (which can be controlled via the "encoding" command line option) to a file encoded in ASCII, using Unicode escapes + * ("\uxxxx" notation) for all characters that are not part of the ASCII character set. + * + * This command is useful for properties files containing characters not in ISO-8859-1 character sets. + * + * A reverse conversion can be performed by passing the "reverse" command line option. + * + * If the "outputfile" command line argument is omitted, standard output is used for output. If, in addition, the + * "inputfile" command line argument is omitted, standard input is used for input. + * + * The Node.js process may exist as a result if calling this function, depending on how argv are parsed. + * + * Optionally, options can be specified for additional control, however, this is primarily intended for + * testing purposes only. + * + * @param {string[]} argv - the command line arguments to be parsed + * @param {?cli~parseOptions} [options] - the options to be used (may be null) + * @return {Promise.} A Promise that is resolved once the conversion operation has completed, + * if needed. + */ async function parse(argv, options) { options = parseOptions(options); const command = new Command('native2ascii') - .arguments('[inputFile] [outputFile]') + .arguments('[inputfile] [outputfile]') .option('-e, --encoding ', 'specify encoding to be used by the conversion procedure') .option('-r, --reverse', 'perform reverse operation') .version(version) @@ -75,7 +109,14 @@ async function parse(argv, options) { await writeOutput(output, outputFile, outputEncoding, options); } -// TODO: Document +/** + * Parses the specified options, using default values where needed. + * + * This function does not modify options but, instead, returns a new object based on it. + * + * @param {?cli~parseOptions} options - the options to be parsed (may be null) + * @return {cli~parseOptions} The parsed options. + */ function parseOptions(options) { return Object.assign({ cwd: process.cwd(), @@ -165,3 +206,22 @@ module.exports = { parse, writeError }; + +/** + * Contains the character encodings to be used when reading input and writing output. + * + * @typedef {Object} cli~Encodings + * @property {string} inputEncoding - The character encoding to be used when reading input. + * @property {string} outputEncoding - The character encoding to be used when writing output. + */ + +/** + * The options that can be passed to {@link parse}. + * + * @typedef {Object} cli~parseOptions + * @property {string} [cwd=process.cwd()] - The current working directory to be used. + * @property {string} [eol=os.EOL] - The end-of-line character to be used. + * @property {Writable} [stderr=process.stderr] - The stream to which standard errors may be written. + * @property {Readable} [stdin=process.stdin] - The stream from which standard input may be read. + * @property {Writable} [stdout=process.stdout] - The stream to which standard output may be written. + */ diff --git a/src/native2ascii.js b/src/native2ascii.js index beaef4d..f1eb652 100644 --- a/src/native2ascii.js +++ b/src/native2ascii.js @@ -36,7 +36,7 @@ const { escape, unescape } = require('./unicode'); * Unicode escape. * * @param {?string} input - the string to be converted (may be null) - * @param {?native2ascii~Options} [options] - the options to be used (may be null) + * @param {?native2ascii~native2asciiOptions} [options] - the options to be used (may be null) * @return {?string} The converted output from input or * null if input is null. * @throws {Error} If the reverse option is enabled and input contains a malformed Unicode @@ -59,7 +59,7 @@ module.exports = native2ascii; /** * The options that can be passed to {@link native2ascii}. * - * @typedef {Object} native2ascii~Options + * @typedef {Object} native2ascii~native2asciiOptions * @property {?boolean} [reverse] - true to reverse the operation; otherwise false. May be * null. */ diff --git a/test/cli.spec.js b/test/cli.spec.js index 411a230..8e40535 100644 --- a/test/cli.spec.js +++ b/test/cli.spec.js @@ -275,7 +275,7 @@ describe('cli', () => { it('should escape all non-ASCII characters read from input file and write to output file', async() => { await cli.parse([ null, null, - path.resolve(__dirname, './fixtures/unescaped/utf8.txt'), + './fixtures/unescaped/utf8.txt', outputFile ], options); @@ -289,7 +289,7 @@ describe('cli', () => { it('should write empty buffer to output file', async() => { await cli.parse([ null, null, - path.resolve(__dirname, './fixtures/empty.txt'), + './fixtures/empty.txt', outputFile ], options); @@ -305,7 +305,7 @@ describe('cli', () => { await cli.parse([ null, null, '--encoding', 'latin1', - path.resolve(__dirname, './fixtures/unescaped/latin1.txt'), + './fixtures/unescaped/latin1.txt', outputFile ], options); @@ -321,7 +321,7 @@ describe('cli', () => { await cli.parse([ null, null, '--encoding', 'foo', - path.resolve(__dirname, './fixtures/unescaped/latin1.txt'), + './fixtures/unescaped/latin1.txt', outputFile ], options); // Should have thrown @@ -344,7 +344,7 @@ describe('cli', () => { await cli.parse([ null, null, '--reverse', - path.resolve(__dirname, './fixtures/escaped/latin1-from-utf8.txt'), + './fixtures/escaped/latin1-from-utf8.txt', outputFile ], options); @@ -361,7 +361,7 @@ describe('cli', () => { null, null, '--encoding', 'latin1', '--reverse', - path.resolve(__dirname, './fixtures/escaped/latin1-from-latin1.txt'), + './fixtures/escaped/latin1-from-latin1.txt', outputFile ], options); @@ -404,7 +404,7 @@ describe('cli', () => { expect(process.stdout.write.callCount).to.equal(1); expect(process.stdout.write.getCall(0).args).to.deep.equal([ ` - Usage: native2ascii [options] [inputFile] [outputFile] + Usage: native2ascii [options] [inputfile] [outputfile] Options: From 61d06c14cd2e2a8ce768c5c0eb2dc28489d6f337 Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Fri, 8 Dec 2017 10:32:14 +0000 Subject: [PATCH 15/16] finished JSDoc --- src/cli.js | 58 ++++++++++++++++++++++++++++++++++++++------- src/native2ascii.js | 4 ++-- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/src/cli.js b/src/cli.js index 85e3b3d..e024e18 100644 --- a/src/cli.js +++ b/src/cli.js @@ -86,7 +86,7 @@ function getEncodings(command) { * testing purposes only. * * @param {string[]} argv - the command line arguments to be parsed - * @param {?cli~parseOptions} [options] - the options to be used (may be null) + * @param {?cli~Options} [options] - the options to be used (may be null) * @return {Promise.} A Promise that is resolved once the conversion operation has completed, * if needed. */ @@ -114,8 +114,8 @@ async function parse(argv, options) { * * This function does not modify options but, instead, returns a new object based on it. * - * @param {?cli~parseOptions} options - the options to be parsed (may be null) - * @return {cli~parseOptions} The parsed options. + * @param {?cli~Options} options - the options to be parsed (may be null) + * @return {cli~Options} The parsed options. */ function parseOptions(options) { return Object.assign({ @@ -127,7 +127,17 @@ function parseOptions(options) { }, options); } -// TODO: Document +/** + * Reads the input to be converted as a string using the character encoding provided. + * + * If file is specified, its contents are read as the input. Otherwise, the input is read directly from + * STDIN. + * + * @param {?string} file - the input file to be read (may be null) + * @param {string} encoding - the character encoding to be used to read the input + * @param {cli~Options} options - the options to be used + * @return {Promise.} A Promise that is resolved with the input to be converted. + */ async function readInput(file, encoding, options) { let buffer; if (file) { @@ -139,7 +149,12 @@ async function readInput(file, encoding, options) { return buffer.toString(encoding); } -// TODO: Document +/** + * Reads the input from STDIN. + * + * @param {cli~Options} options - the options to be used + * @return {Promise.} A Promise that is resolved with the input read from STDIN. + */ function readStdin(options) { const { stdin } = options; const data = []; @@ -169,14 +184,31 @@ function readStdin(options) { }); } -// TODO: Document +/** + * Writes the specified message to STDERR. + * + * @param {string} message - the error message to be written + * @param {?cli~Options} [options] - the options to be used (may be null) + * @return {void} + */ function writeError(message, options) { options = parseOptions(options); options.stderr.write(`${message}${options.eol}`); } -// TODO: Document +/** + * Writes the specified output as a string using the character encoding provided. + * + * If file is specified, output will be written to it. Otherwise, output is + * written directly to STDOUT. + * + * @param {string} output - the output to be written + * @param {?string} file - the file to which output should be written (may be null) + * @param {string} encoding - the character encoding to be used to write output + * @param {cli~Options} options - the options to be used + * @return {Promise.} A Promise that is resolved once output has be written. + */ async function writeOutput(output, file, encoding, options) { if (file) { await writeFile(path.resolve(options.cwd, file), output, encoding); @@ -185,7 +217,15 @@ async function writeOutput(output, file, encoding, options) { } } -// TODO: Document +/** + * Writes the specified output to STDOUT using the character encoding provided. + * + * @param {string} output - the output to be written to STDOUT + * @param {string} encoding - the character encoding to be used to write output + * @param {cli~Options} options - the options to be used + * @return {Promise.} A Promise that is resolved once output has be written to + * STDOUT. + */ function writeStdout(output, encoding, options) { const { stdout } = options; @@ -218,7 +258,7 @@ module.exports = { /** * The options that can be passed to {@link parse}. * - * @typedef {Object} cli~parseOptions + * @typedef {Object} cli~Options * @property {string} [cwd=process.cwd()] - The current working directory to be used. * @property {string} [eol=os.EOL] - The end-of-line character to be used. * @property {Writable} [stderr=process.stderr] - The stream to which standard errors may be written. diff --git a/src/native2ascii.js b/src/native2ascii.js index f1eb652..beaef4d 100644 --- a/src/native2ascii.js +++ b/src/native2ascii.js @@ -36,7 +36,7 @@ const { escape, unescape } = require('./unicode'); * Unicode escape. * * @param {?string} input - the string to be converted (may be null) - * @param {?native2ascii~native2asciiOptions} [options] - the options to be used (may be null) + * @param {?native2ascii~Options} [options] - the options to be used (may be null) * @return {?string} The converted output from input or * null if input is null. * @throws {Error} If the reverse option is enabled and input contains a malformed Unicode @@ -59,7 +59,7 @@ module.exports = native2ascii; /** * The options that can be passed to {@link native2ascii}. * - * @typedef {Object} native2ascii~native2asciiOptions + * @typedef {Object} native2ascii~Options * @property {?boolean} [reverse] - true to reverse the operation; otherwise false. May be * null. */ From f56d922f0eae451148921c30371d36a2066a199a Mon Sep 17 00:00:00 2001 From: Alasdair Mercer Date: Fri, 8 Dec 2017 11:00:47 +0000 Subject: [PATCH 16/16] completed readme --- README.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0fb212b..147bc14 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Java's Native-to-ASCII Converter. [![Build Status](https://img.shields.io/travis/NotNinja/node-native2ascii/develop.svg?style=flat-square)](https://travis-ci.org/NotNinja/node-native2ascii) +[![Coverage](https://img.shields.io/codecov/c/github/NotNinja/node-native2ascii/develop.svg?style=flat-square)](https://codecov.io/gh/NotNinja/node-native2ascii) [![Dependency Status](https://img.shields.io/david/NotNinja/node-native2ascii.svg?style=flat-square)](https://david-dm.org/NotNinja/node-native2ascii) [![Dev Dependency Status](https://img.shields.io/david/dev/NotNinja/node-native2ascii.svg?style=flat-square)](https://david-dm.org/NotNinja/node-native2ascii?type=dev) [![License](https://img.shields.io/npm/l/node-native2ascii.svg?style=flat-square)](https://github.com/NotNinja/node-native2ascii/blob/master/LICENSE.md) @@ -42,11 +43,85 @@ $ npm install --global node-native2ascii ## CLI -TODO: Document CLI + Usage: native2ascii [options] [inputfile] [outputfile] + + + Options: + + -e, --encoding specify encoding to be used by the conversion procedure + -r, --reverse perform reverse operation + -V, --version output the version number + -h, --help output usage information + +Converts a file that is encoded to any character encoding that is +[supported by Node.js](https://nodejs.org/dist/latest-v8.x/docs/api/buffer.html#buffer_buffers_and_character_encodings) +(which can be controlled via the `encoding` command line option and defaults to `utf8`) to a file encoded in ASCII, +using Unicode escapes ("\uxxxx" notation) for all characters that are not part of the ASCII character set. + +This command is useful for properties files containing characters not in ISO-8859-1 character sets. + +A reverse conversion can be performed by passing the `reverse` command line option. + +If the `outputfile` command line argument is omitted, standard output is used for output. If, in addition, the +`inputfile` command line argument is omitted, standard input is used for input. + +### Examples + +Converts a UTF-8 encoded file into an file encoding in ASCII, Unicode escaping characters not in the ASCII character +set: + +``` bash +# Using file command line arguments: +$ native2ascii utf8.properties ascii.properties +# Using STDIN and STDOUT: +$ cat utf8.properties | native2ascii > ascii.properties +``` + +Converts a ASCII encoded file into a file encoded in UTF-8, unescaping any Unicode escapes: + +``` bash +# Using file command line arguments: +$ native2ascii --reverse ascii.properties utf8.properties +# Using STDIN and STDOUT: +$ cat ascii.properties | native2ascii --reverse > utf8.properties +``` ## API -TODO: Document API + native2ascii(input[, options]) + +Converts the specified `input` so that it can be encoded in ASCII by using Unicode escapes ("\uxxxx" notation) for all +characters that are not part of the ASCII character set. + +This function is useful for properties files containing characters not in ISO-8859-1 character sets. + +A reverse conversion can be performed by enabling the `reverse` option. + +### Options + +| Option | Description | Default | +| --------- | -------------------------------- | ------- | +| `reverse` | Whether to reverse the operation | `false` | + +### Examples + +Unicode escape characters not in the ASCII character set so that they can be safely written encoded into ASCII: + +``` javascript +const native2ascii = require('native2ascii'); + +native2ascii('I ♥ native2ascii!'); +//=> "I \u2665 native2ascii!" +``` + +These can be later unescaped by reversing the operation: + +``` javascript +const native2ascii = require('native2ascii'); + +native2ascii('I \u2665 native2ascii!', { reverse: true }); +//=> "I ♥ native2ascii!" +``` ## Bugs