helma/modules/jala/tests/I18n.js

136 lines
4.2 KiB
JavaScript

//
// Jala Project [http://opensvn.csie.org/traccgi/jala]
//
// Copyright 2004 ORF Online und Teletext GmbH
//
// Licensed under the Apache License, Version 2.0 (the ``License'');
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an ``AS IS'' BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// $Revision$
// $LastChangedBy$
// $LastChangedDate$
// $HeadURL$
//
/**
* Declare which test methods should be run in which order
* @type Array
* @final
*/
var oldMessages;
/**
* Called before running the tests
*/
var setup = function() {
// save any currently used message bundle before
// creating the one for this test
oldMessages = jala.i18n.getMessages();
// setup the test message bundle
var messages = {};
messages.de_AT = {
"Hello, World!": "Hallo, Welt!",
"This is {0}.": "Das ist {0}.",
"You've got one new mail.": "Du hast eine neue E-Mail.",
"You've got {0} new mails.": "Du hast {0} neue E-Mails."
};
// tell jala where to find the messages
jala.i18n.setMessages(messages);
// assign a method for retrieving the locale for translation
jala.i18n.setLocaleGetter(new Function("return res.meta.locale;"));
// set the locale to use by jala.i18n
res.meta.locale = new java.util.Locale("de", "AT");
return;
};
/**
* Called after tests have finished. This method will be called
* regarless whether the test succeeded or failed.
*/
var cleanup = function() {
// restore any previous message set
jala.i18n.setMessages(oldMessages);
return;
};
/**
* Tests for formatMessage
*/
var testFormatMessage = function() {
var msg = "Es ist jetzt {0,date,EEEE, dd. MMMM yyyy, HH:mm} Uhr.";
var args = [new Date(2007, 1, 8, 17, 58)];
var result = jala.i18n.formatMessage(msg, args);
var expected = "Es ist jetzt Donnerstag, 08. Februar 2007, 17:58 Uhr.";
assertEqual(expected, result);
return;
};
/**
* Tests for gettext()
*/
var testGettext = function() {
assertEqual("Hallo, Welt!", gettext("Hello, World!"));
// test not found message key
assertEqual("Hello You!", gettext("Hello You!"));
// test gettext with additional replacement value
assertEqual("Das ist Jala I18n.", gettext("This is {0}.", "Jala I18n"));
return;
};
/**
* Tests for ngettext()
*/
var testNgettext = function() {
// zero
assertEqual("Du hast 0 neue E-Mails.",
ngettext("You've got one new mail.",
"You've got {0} new mails.",
0));
// one
assertEqual("Du hast eine neue E-Mail.",
ngettext("You've got one new mail.",
"You've got {0} new mails.",
1));
// more
assertEqual("Du hast 23 neue E-Mails.",
ngettext("You've got one new mail.",
"You've got {0} new mails.",
23));
return;
};
/**
* Tests for message macro
*/
var testMessageMacro = function() {
// singular
var skin = createSkin('<% message text="You\'ve got one new mail." %>');
assertEqual("Du hast eine neue E-Mail.", renderSkinAsString(skin));
res.handlers.testHandler = {value: 0};
// value replacement using testHandler
skin = createSkin('<% message text="You\'ve got {0} new mails." values="testHandler.value" %>');
assertEqual("Du hast 0 neue E-Mails.", renderSkinAsString(skin));
// plural including replacement using testHandler
res.handlers.testHandler.value = 23;
skin = createSkin('<% message text="You\'ve got one new mail." plural="You\'ve got {0} new mails." values="testHandler.value" %>');
assertEqual("Du hast 23 neue E-Mails.", renderSkinAsString(skin));
// using a value of the param object passed to the skin
// FIXME: appearently this doesn't work, but why?
/*
skin = createSkin('<% message text="You\'ve got one new mail." plural="You\'ve got {0} new mails." values="param.spam" %>');
assertEqual("Du hast 45 neue E-Mails.", renderSkinAsString(skin, {spam: 45}));
*/
};