UNPKG

locale

Version:

Browser locale negotiation for node.js

147 lines (135 loc) 5.11 kB
// Generated by CoffeeScript 1.6.3 (function() { var assert, defaultLocale, express, http, locale, server; http = require("http"); assert = require("assert"); express = require("express"); locale = require("./"); server = null; defaultLocale = locale.Locale["default"]; before(function(callback) { var app; app = express(); app.use(locale(["en-US", "fr", "fr-CA", "en", "ja", "de", "da-DK"])); app.get("/", function(req, res) { res.set("content-language", req.locale); res.set("defaulted", req.rawLocale.defaulted); res.set("Connection", "close"); return res.send(200); }); return server = app.listen(8001, callback); }); describe("Defaults", function() { it("should use the environment language as default.", function(callback) { return http.get({ port: 8001 }, function(res) { assert.equal(res.headers["content-language"], defaultLocale); assert.equal(true, !!res.headers["defaulted"]); return callback(); }); }); it("should fallback to the default for unsupported languages.", function(callback) { return http.get({ port: 8001, headers: { "Accept-Language": "es-ES" } }, function(res) { assert.equal(res.headers["content-language"], defaultLocale); assert.equal(true, !!res.headers["defaulted"]); return callback(); }); }); return it("should fallback to the instance default for unsupported languages if instance default is defined.", function(callback) { var instanceDefault, supportedLocales; instanceDefault = 'SomeFakeLanguage-NotReal'; supportedLocales = new locale.Locales(["en-US", "fr", "fr-CA", "en", "ja", "de", "da-DK"], instanceDefault); assert.equal(((new locale.Locales("es-ES")).best(supportedLocales)).toString(), instanceDefault); return callback(); }); }); describe("Priority", function() { it("should fallback to a more general language if a country specific language isn't available.", function(callback) { return http.get({ port: 8001, headers: { "Accept-Language": "en-GB" } }, function(res) { assert.equal(res.headers["content-language"], "en", "Unsupported country should fallback to countryless language"); assert.equal(false, !res.headers["defaulted"]); return callback(); }); }); it("should use the highest quality language supported, regardless of order.", function(callback) { http.get({ port: 8001, headers: { "Accept-Language": "en;q=.8, ja" } }, function(res) { assert.equal(res.headers["content-language"], "ja", "Highest quality language supported should be used, regardless of order."); return assert.equal(false, !res.headers["defaulted"]); }); http.get({ port: 8001, headers: { "Accept-Language": "fr-FR, ja-JA;q=0.5" } }, function(res) { assert.equal(res.headers["content-language"], "fr", "Highest quality language supported should be used, regardless of order."); return assert.equal(false, !res.headers["defaulted"]); }); return http.get({ port: 8001, headers: { "Accept-Language": "en-US,en;q=0.93,es-ES;q=0.87,es;q=0.80,it-IT;q=0.73,it;q=0.67,de-DE;q=0.60,de;q=0.53,fr-FR;q=0.47,fr;q=0.40,ja;q=0.33,zh-Hans-CN;q=0.27,zh-Hans;q=0.20,ar-SA;q=0.13,ar;q=0.067" } }, function(res) { assert.equal(res.headers["content-language"], "en-US", "Highest quality language supported should be used, regardless of order."); assert.equal(false, !res.headers["defaulted"]); return callback(); }); }); it("should use a country specific language when an unsupported general language is requested", function(callback) { return http.get({ port: 8001, headers: { "Accept-Language": "da" } }, function(res) { assert.equal(res.headers["content-language"], "da-DK"); return callback(); }); }); it("should fallback to a country specific language even when there's a lower quality exact match", function(callback) { return http.get({ port: 8001, headers: { "Accept-Language": "ja;q=.8, da" } }, function(res) { assert.equal(res.headers["content-language"], "da-DK"); assert.equal(false, !res.headers["defaulted"]); return callback(); }); }); return it("should match country-specific language codes even when the separator is different", function(callback) { return http.get({ port: 8001, headers: { "Accept-Language": "fr_CA" } }, function(res) { assert.equal(res.headers["content-language"], "fr-CA"); assert.equal(false, !res.headers["defaulted"]); return callback(); }); }); }); after(function() { server.close(); return process.exit(0)(); }); }).call(this);