15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)(function() { 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)'use strict'; 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)module('l10n', { 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) setup: function() { 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sinon.stub(chrome.i18n, 'getMessage'); 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }, 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) teardown: function() { 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome.i18n.getMessage.restore(); 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)test('getTranslationOrError(tag) should return tag on error', function() { 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var translation = l10n.getTranslationOrError('non_existent_tag'); 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) equal(translation, 'non_existent_tag'); 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)test('localizeElementFromTag() should replace innerText by default', 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function() { 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var element = document.createElement('div'); 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome.i18n.getMessage.withArgs('tag').returns('<b>Hello World</b>'); 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n.localizeElementFromTag(element, 'tag'); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) equal(element.innerHTML, '<b>Hello World</b>'); 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)test('localizeElementFromTag() should replace innerHTML if flag is set', 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function() { 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var element = document.createElement('div'); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome.i18n.getMessage.withArgs('tag').returns('<b>Hello World</b>'); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n.localizeElementFromTag(element, 'tag', null, true); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) equal(element.innerHTML, '<b>Hello World</b>'); 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)test( 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'localizeElement() should replace innerText using the "i18n-content" ' + 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'attribute as the tag', 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function() { 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var element = document.createElement('div'); 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) element.setAttribute('i18n-content', 'tag'); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome.i18n.getMessage.withArgs('tag').returns('<b>Hello World</b>'); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n.localizeElement(element); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) equal(element.innerHTML, '<b>Hello World</b>'); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)test( 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'localize() should replace element title using the "i18n-title" ' + 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'attribute as the tag', 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function() { 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var fixture = document.getElementById('qunit-fixture'); 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fixture.innerHTML = '<div class="target" i18n-title="tag"></div>'; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome.i18n.getMessage.withArgs('tag').returns('localized title'); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n.localize(); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var target = document.querySelector('.target'); 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) equal(target.title, 'localized title'); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)test('localize() should support string substitutions', function() { 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var fixture = document.getElementById('qunit-fixture'); 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fixture.innerHTML = 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) '<div class="target" ' + 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'i18n-content="tag" ' + 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'i18n-value-1="param1" ' + 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'i18n-value-2="param2">' + 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) '</div>'; 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome.i18n.getMessage.withArgs('tag', ['param1', 'param2']) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .returns('localized'); 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n.localize(); 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var target = document.querySelector('.target'); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) equal(target.innerText, 'localized'); 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)test('localize() should support tag substitutions', function() { 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var fixture = document.getElementById('qunit-fixture'); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fixture.innerHTML = 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) '<div class="target" i18n-content="tag"' + 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ' i18n-value-name-1="tag1" i18n-value-name-2="tag2"></div>'; 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var getMessage = chrome.i18n.getMessage; 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) getMessage.withArgs('tag1').returns('param1'); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) getMessage.withArgs('tag2').returns('param2'); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) getMessage.withArgs('tag', ['param1', 'param2']).returns('localized'); 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n.localize(); 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var target = document.querySelector('.target'); 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) equal(target.innerText, 'localized'); 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}); 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)})(); 106