Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.

Commit f87aa3b

Browse files
committed
Added a few tests for the examples in the readme and corrected the readme accordingly
1 parent 03bac26 commit f87aa3b

File tree

2 files changed

+50
-14
lines changed

2 files changed

+50
-14
lines changed

README.md

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,9 @@ Output will be:
2828

2929
```
3030
[
31-
{
32-
code: "en",
33-
region: "GB",
34-
quality: 1.0
35-
},
36-
{
37-
code: "en",
38-
region: undefined,
39-
quality: 0.8
40-
}
41-
];
31+
{ code: 'en', script: null, region: 'GB', quality: 1 },
32+
{ code: 'en', script: null, region: undefined, quality: 0.8 }
33+
]
4234
```
4335

4436
Output is always sorted in quality order from highest -> lowest. As per the HTTP spec, omitting the quality value implies 1.0.
@@ -72,7 +64,7 @@ parser.pick(['fr', 'en'], 'en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8', { loose: tru
7264
Would return:
7365

7466
```javascript
75-
"fr"
67+
"en"
7668
```
7769

7870
In loose mode the order of `supportedLanguagesArray` matters, as it is the first partially matching language that is returned. It means that if you want to pick more specific langauges first, you should list it first as well.

tests/tests.js

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,52 @@ describe('accept-language#pick()', function(){
155155
assert.equal(result, 'en');
156156
});
157157

158-
it('selects most matching language in loose mode', function(){
159-
var result = parser.pick(['en-US', 'en', 'pl'], 'en-US;q=0.6', { loose: true });
158+
it('selects the first matching language in loose mode, even when supported language is more restrictive', function(){
159+
var result = parser.pick(['en-US', 'en', 'pl'], 'en;q=0.6', { loose: true });
160160
assert.equal(result, 'en-US');
161161
});
162+
163+
it('selects the first matching language in loose mode, even when the accepted language is more restrictive', function(){
164+
var result = parser.pick(['en', 'en-US', 'pl'], 'en-US;q=0.6', { loose: true });
165+
assert.equal(result, 'en');
166+
});
167+
168+
it('quality is more important than order when matching loosely', function(){
169+
var result = parser.pick(['en', 'fr'], 'fr-CA,fr;q=0.8,en-US;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
170+
var result2 = parser.pick(['fr', 'en'], 'fr-CA,fr;q=0.8,en-US;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
171+
assert.equal(result, result2);
172+
});
173+
174+
it('quality is more important than order when matching loosely2', function(){
175+
var result = parser.pick(['en', 'fr'], 'fr-CA,en-US;q=0.7,fr;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
176+
var result2 = parser.pick(['fr', 'en'], 'fr-CA,en-US;q=0.7,fr;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
177+
assert.equal(result, result2);
178+
});
179+
180+
it('quality is more important than order when matching loosely3', function(){
181+
var result = parser.pick(['en', 'fr'], 'en-US;q=0.7,fr;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
182+
var result2 = parser.pick(['fr', 'en'], 'en-US;q=0.7,fr;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
183+
assert.equal(result, result2);
184+
});
185+
186+
});
187+
188+
describe('readme examples', function(){
189+
it('parser.parse()', function(){
190+
var result = parser.parse('en-GB,en;q=0.8');
191+
assert.deepStrictEqual(result, [
192+
{ code: 'en', script: null, region: 'GB', quality: 1 },
193+
{ code: 'en', script: null, region: undefined, quality: 0.8 }
194+
]);
195+
});
196+
197+
it('parser.pick() strict', function(){
198+
var result = parser.pick(['fr-CA', 'fr-FR', 'fr'], 'en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8');
199+
assert.equal(result, 'fr-CA');
200+
});
201+
202+
it('parser.pick() loose', function(){
203+
var result = parser.pick(['fr', 'en'], 'en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8', { loose: true });
204+
assert.equal(result, 'en');
205+
});
162206
});

0 commit comments

Comments
 (0)