Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,9 @@ Output will be:

```
[
{
code: "en",
region: "GB",
quality: 1.0
},
{
code: "en",
region: undefined,
quality: 0.8
}
];
{ code: 'en', script: null, region: 'GB', quality: 1 },
{ code: 'en', script: null, region: undefined, quality: 0.8 }
]
```

Output is always sorted in quality order from highest -> lowest. As per the HTTP spec, omitting the quality value implies 1.0.
Expand Down Expand Up @@ -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
Would return:

```javascript
"fr"
"en"
```

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.
Expand Down
48 changes: 46 additions & 2 deletions tests/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,52 @@ describe('accept-language#pick()', function(){
assert.equal(result, 'en');
});

it('selects most matching language in loose mode', function(){
var result = parser.pick(['en-US', 'en', 'pl'], 'en-US;q=0.6', { loose: true });
it('selects the first matching language in loose mode, even when supported language is more restrictive', function(){
var result = parser.pick(['en-US', 'en', 'pl'], 'en;q=0.6', { loose: true });
assert.equal(result, 'en-US');
});

it('selects the first matching language in loose mode, even when the accepted language is more restrictive', function(){
var result = parser.pick(['en', 'en-US', 'pl'], 'en-US;q=0.6', { loose: true });
assert.equal(result, 'en');
});

it('quality is more important than order when matching loosely', function(){
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 });
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 });
assert.equal(result, result2);
});

it('quality is more important than order when matching loosely2', function(){
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 });
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 });
assert.equal(result, result2);
});

it('quality is more important than order when matching loosely3', function(){
var result = parser.pick(['en', 'fr'], 'en-US;q=0.7,fr;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
var result2 = parser.pick(['fr', 'en'], 'en-US;q=0.7,fr;q=0.6,en;q=0.4,*;q=0.1', { loose: true });
assert.equal(result, result2);
});

});

describe('readme examples', function(){
it('parser.parse()', function(){
var result = parser.parse('en-GB,en;q=0.8');
assert.deepStrictEqual(result, [
{ code: 'en', script: null, region: 'GB', quality: 1 },
{ code: 'en', script: null, region: undefined, quality: 0.8 }
]);
});

it('parser.pick() strict', function(){
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');
assert.equal(result, 'fr-CA');
});

it('parser.pick() loose', function(){
var result = parser.pick(['fr', 'en'], 'en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8', { loose: true });
assert.equal(result, 'en');
});
});