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, '&lt;b&gt;Hello World&lt;/b&gt;');
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, '&lt;b&gt;Hello World&lt;/b&gt;');
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