Skip to content
This repository has been archived by the owner on Jan 29, 2024. It is now read-only.

Commit

Permalink
fix(translateService): fixup/rewrite for b48f6bb (specs)
Browse files Browse the repository at this point in the history
  • Loading branch information
knalli committed Aug 4, 2014
1 parent b48f6bb commit 45ac14d
Showing 1 changed file with 116 additions and 5 deletions.
121 changes: 116 additions & 5 deletions test/unit/service/translate.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -399,19 +399,28 @@ describe('pascalprecht.translate', function () {
});
});

describe('$translate#use() with async loading', function () {
// Spec for edge case: while preferred language is still loading,
// another language will be requested and
// is returning before the preferred one
// t0 ~ 0.0s (request ab_CD)
// t1 ~ 0.5s (request en_US)
// t2 ~ 1.5s (response en_US)
// t3 ~ 2.0s (response ab_CD)
describe('$translate#use() with async loading and two unordered requests in parallel', function () {

var fastButRequestedSecond = 'en_US',
slowButRequestedFirst = 'ab_CD',
expectedTranslation = 'Hello World',
fastRequestTime = 1000;
notExpectedTranslation = 'foo bar bork bork bork',
fastRequestTime = 1000,
firstLanguageResponded = false,
secondLanguageResponded = false;

beforeEach(module('pascalprecht.translate', function ($translateProvider, $provide) {

$translateProvider.useLoader('customLoader');

$translateProvider.preferredLanguage(slowButRequestedFirst);
$translateProvider.fallbackLanguage(fastButRequestedSecond);

$provide.service('customLoader', function ($q, $timeout) {
return function (options) {
Expand All @@ -420,17 +429,20 @@ describe('pascalprecht.translate', function () {

if (locale === fastButRequestedSecond) {
$timeout(function () {
secondLanguageResponded = true;
// t2
deferred.resolve({
greeting: expectedTranslation
});
}, fastRequestTime);
}

if (locale === slowButRequestedFirst) {

$timeout(function() {
firstLanguageResponded = true;
// t3
deferred.resolve({
greeting: 'foo bar bork bork bork'
greeting: notExpectedTranslation
});
}, fastRequestTime * 2);
}
Expand All @@ -444,16 +456,115 @@ describe('pascalprecht.translate', function () {

beforeEach(inject(function ($timeout, _$translate_, $rootScope) {
$translate = _$translate_;
// t0 already happened

$timeout(function () {
// t1
$translate.use(fastButRequestedSecond);
}, fastRequestTime / 2);

// t2
$timeout.flush();
$rootScope.$digest();

// t3
$timeout.flush();
}));

it('should be requested the first language', function () {
expect(firstLanguageResponded).toEqual(true);
});

it('should be requested the second language', function () {
expect(secondLanguageResponded).toEqual(true);
});

it('should set the language to be the most recently requested one, not the most recently responded one', inject(function($rootScope, $q) {

var value;

$translate('greeting').then(function (translation) {
value = translation;
});

$rootScope.$digest();
expect(value).toEqual(expectedTranslation);
}));
});

// Spec for edge case: while preferred language is still loading,
// another language will be requested as fallback
// and is returning before the preferred one
// t0 ~ 0.0s (request ab_CD)
// t1 ~ 0.5s (request en_US)
// t2 ~ 1.5s (response en_US)
// t3 ~ 2.0s (response ab_CD)
describe('$translate#use() with async loading and two unordered requests in parallel (+fallback)', function () {

var fastButRequestedSecond = 'en_US',
slowButRequestedFirst = 'ab_CD',
expectedTranslation = 'Hello World',
notExpectedTranslation = 'foo bar bork bork bork',
fastRequestTime = 1000,
firstLanguageResponded = false,
secondLanguageResponded = false;

beforeEach(module('pascalprecht.translate', function ($translateProvider, $provide) {

$translateProvider.useLoader('customLoader');

$translateProvider.preferredLanguage(slowButRequestedFirst);
$translateProvider.fallbackLanguage(fastButRequestedSecond);

$provide.service('customLoader', function ($q, $timeout) {
return function (options) {
var deferred = $q.defer();
var locale = options.key;

if (locale === fastButRequestedSecond) {
$timeout(function () {
secondLanguageResponded = true;
deferred.resolve({
greeting: expectedTranslation
});
}, fastRequestTime);
}

if (locale === slowButRequestedFirst) {
$timeout(function() {
firstLanguageResponded = true;
deferred.resolve({
greeting: notExpectedTranslation
});
}, fastRequestTime * 2);
}

return deferred.promise;
};
});
}));

var $translate;

beforeEach(inject(function ($timeout, _$translate_, $rootScope) {
$translate = _$translate_;

$timeout(function () {
$translate.use(fastButRequestedSecond);
}, fastRequestTime / 2);

$timeout.flush();
$rootScope.$digest();
}));

it('should be requested the first language', function () {
expect(firstLanguageResponded).toEqual(true);
});

it('should be requested the second language', function () {
expect(secondLanguageResponded).toEqual(true);
});

it('should set the language to be the most recently requested one, not the most recently responded one', inject(function($rootScope, $q) {

var value;
Expand Down

0 comments on commit 45ac14d

Please sign in to comment.