From 7feb8ee6b993101f4f749f5d2b43b19000f72a28 Mon Sep 17 00:00:00 2001 From: Zibi Braniecki Date: Thu, 18 May 2017 10:47:05 -0700 Subject: [PATCH 1/3] Add Headers parsing function --- fluent-langneg/src/headers.js | 8 +++++ fluent-langneg/test/headers_test.js | 45 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 fluent-langneg/src/headers.js create mode 100644 fluent-langneg/test/headers_test.js diff --git a/fluent-langneg/src/headers.js b/fluent-langneg/src/headers.js new file mode 100644 index 000000000..6d5b35dc4 --- /dev/null +++ b/fluent-langneg/src/headers.js @@ -0,0 +1,8 @@ + +export default function parseAcceptedLanguagesHeaderIntoArray(string = '') { + if (typeof string !== 'string') throw new TypeError('Argument must be a string'); + const tokens = string.split(',').map(t => t.trim()); + return tokens.filter(t => t !== '').map(t => { + return t.split(';')[0]; + }); +} diff --git a/fluent-langneg/test/headers_test.js b/fluent-langneg/test/headers_test.js new file mode 100644 index 000000000..b043f0222 --- /dev/null +++ b/fluent-langneg/test/headers_test.js @@ -0,0 +1,45 @@ +import assert from 'assert'; +import parseHeaderIntoArray from '../src/headers'; + +suite('parse headers', () => { + test('without quality values', () => { + assert.deepStrictEqual( + parseHeaderIntoArray('en-US, fr, pl'), [ + 'en-US', + 'fr', + 'pl' + ] + ); + assert.deepStrictEqual( + parseHeaderIntoArray('sr-Latn'), [ + 'sr-Latn' + ] + ); + }); + + test('with quality values', () => { + assert.deepStrictEqual( + parseHeaderIntoArray('fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'), [ + 'fr-CH', + 'fr', + 'en', + 'de', + '*' + ] + ); + }); + + test('edge cases', () => { + const args = [ + null, + NaN, + Infinity, + [], + {} + ]; + + args.forEach(arg => { + assert.throws(parseHeaderIntoArray.bind(null, arg), TypeError); + }); + }); +}); From 4fb0ff1e0d1596d32b9d7ecce5b9517b1c7012e1 Mon Sep 17 00:00:00 2001 From: Zibi Braniecki Date: Thu, 18 May 2017 13:33:27 -0700 Subject: [PATCH 2/3] Apply feedback --- fluent-langneg/src/accepted_languages.js | 10 ++++++++++ fluent-langneg/src/headers.js | 8 -------- fluent-langneg/src/index.js | 1 + fluent-langneg/test/headers_test.js | 10 +++++----- 4 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 fluent-langneg/src/accepted_languages.js delete mode 100644 fluent-langneg/src/headers.js diff --git a/fluent-langneg/src/accepted_languages.js b/fluent-langneg/src/accepted_languages.js new file mode 100644 index 000000000..b361a6caf --- /dev/null +++ b/fluent-langneg/src/accepted_languages.js @@ -0,0 +1,10 @@ + +export default function aceptedLanguages(string = '') { + if (typeof string !== 'string') { + throw new TypeError('Argument must be a string'); + } + const tokens = string.split(',').map(t => t.trim()); + return tokens.filter(t => t !== '').map(t => { + return t.split(';')[0]; + }); +} diff --git a/fluent-langneg/src/headers.js b/fluent-langneg/src/headers.js deleted file mode 100644 index 6d5b35dc4..000000000 --- a/fluent-langneg/src/headers.js +++ /dev/null @@ -1,8 +0,0 @@ - -export default function parseAcceptedLanguagesHeaderIntoArray(string = '') { - if (typeof string !== 'string') throw new TypeError('Argument must be a string'); - const tokens = string.split(',').map(t => t.trim()); - return tokens.filter(t => t !== '').map(t => { - return t.split(';')[0]; - }); -} diff --git a/fluent-langneg/src/index.js b/fluent-langneg/src/index.js index 335ba5bb6..7a9fdc2db 100644 --- a/fluent-langneg/src/index.js +++ b/fluent-langneg/src/index.js @@ -7,6 +7,7 @@ * */ +export { default as acceptedLanguages } from './accepted_languages'; import filterMatches from './matches'; function GetOption(options, property, type, values, fallback) { diff --git a/fluent-langneg/test/headers_test.js b/fluent-langneg/test/headers_test.js index b043f0222..4443f71a0 100644 --- a/fluent-langneg/test/headers_test.js +++ b/fluent-langneg/test/headers_test.js @@ -1,17 +1,17 @@ import assert from 'assert'; -import parseHeaderIntoArray from '../src/headers'; +import acceptedLanguages from '../src/accepted_languages'; suite('parse headers', () => { test('without quality values', () => { assert.deepStrictEqual( - parseHeaderIntoArray('en-US, fr, pl'), [ + acceptedLanguages('en-US, fr, pl'), [ 'en-US', 'fr', 'pl' ] ); assert.deepStrictEqual( - parseHeaderIntoArray('sr-Latn'), [ + acceptedLanguages('sr-Latn'), [ 'sr-Latn' ] ); @@ -19,7 +19,7 @@ suite('parse headers', () => { test('with quality values', () => { assert.deepStrictEqual( - parseHeaderIntoArray('fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'), [ + acceptedLanguages('fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'), [ 'fr-CH', 'fr', 'en', @@ -39,7 +39,7 @@ suite('parse headers', () => { ]; args.forEach(arg => { - assert.throws(parseHeaderIntoArray.bind(null, arg), TypeError); + assert.throws(acceptedLanguages.bind(null, arg), TypeError); }); }); }); From 6423f7dc4af33e82e44ddc76e25ff3fcd70ad3b4 Mon Sep 17 00:00:00 2001 From: Zibi Braniecki Date: Thu, 18 May 2017 15:18:49 -0700 Subject: [PATCH 3/3] Updated to feedback --- fluent-langneg/src/accepted_languages.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fluent-langneg/src/accepted_languages.js b/fluent-langneg/src/accepted_languages.js index b361a6caf..f3ca31a2f 100644 --- a/fluent-langneg/src/accepted_languages.js +++ b/fluent-langneg/src/accepted_languages.js @@ -1,10 +1,8 @@ -export default function aceptedLanguages(string = '') { +export default function acceptedLanguages(string = '') { if (typeof string !== 'string') { throw new TypeError('Argument must be a string'); } const tokens = string.split(',').map(t => t.trim()); - return tokens.filter(t => t !== '').map(t => { - return t.split(';')[0]; - }); + return tokens.filter(t => t !== '').map(t => t.split(';')[0]); }