#!/usr/bin/env python3
import sys
import os
import unittest
import logging
# Extend PYTHONPATH with local 'lib' folder
if __name__ == "__main__":
jasyroot = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), os.pardir, os.pardir, os.pardir, os.pardir))
sys.path.insert(0, jasyroot)
print("Running from %s..." % jasyroot)
import jasy.script.parse.Parser as Parser
import jasy.script.parse.ScopeScanner as ScopeScanner
import jasy.script.output.Compressor as Compressor
import jasy.script.optimize.Translation as TranslationOptimizer
import jasy.item.Translation as Translation
[docs]class Tests(unittest.TestCase):
[docs] def process(self, code):
node = Parser.parse(code)
translation = Translation.TranslationItem(None, id="de_DE", table={
"Hello World": "Hallo Welt",
"Short": "Kurz",
"Thank you for the flowers": "Danke für die Blumen",
"Hello %1!": "Hallo: %1!",
"Hello %1! %1!": "Hallo: %1! %1!",
"Chat[C:Chat (noum)]": "Unterhaltung",
"Chat %1[C:Chat (noum) %1]": "Unterhaltung %1",
"You have got a new mail[N:You have got new mails]": {0: "Du hast eine neue E-Mail", 1: "Du hast neue E-Mails"},
"You have got a new mail[N:You have got %1 new mails]": {0: "Du hast eine neue E-Mail", 1: "Du hast %1 neue E-Mail erhalten"}
})
TranslationOptimizer.optimize(node, translation)
return Compressor.Compressor().compress(node)
[docs] def test_basic(self):
self.assertEqual(self.process(
'''
function wrapper()
{
alert(this.tr("Hello World"));
alert(tr("Short"));
alert(core.Locale.tr("Thank you for the flowers"));
}
'''),
'function wrapper(){alert("Hallo Welt");alert("Kurz");alert("Danke für die Blumen")}'
)
[docs] def test_vars1(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(tr("Hello %1!", "Peter"))
}
'''),
'function wrapper(){alert("Hallo: "+("Peter")+"!")}'
)
[docs] def test_vars2(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(tr("Hello %1! %1!", "Peter"))
}
'''),
'function wrapper(){alert("Hallo: "+("Peter")+"! "+("Peter")+"!")}'
)
[docs] def test_vars3(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(tr("Hello %1!", this.getGreetingName()))
}
'''),
'function wrapper(){alert("Hallo: "+this.getGreetingName()+"!")}'
)
[docs] def test_vars4(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(tr("Hello %1! %1!", this.getGreetingName()))
}
'''),
'function wrapper(){alert("Hallo: "+this.getGreetingName()+"! "+this.getGreetingName()+"!")}'
)
[docs] def test_trc1(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(trc("Chat (noum)", "Chat"));
}
'''),
'function wrapper(){alert("Unterhaltung")}'
)
[docs] def test_trc2(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(trc("Chat (noum) %1", "Chat %1", "Online"));
}
'''),
'function wrapper(){alert("Unterhaltung "+("Online"))}'
)
[docs] def test_trc3(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(trc("Chat (noum) %1", "Chat %1", this.getChatStatus()));
}
'''),
'function wrapper(){alert("Unterhaltung "+this.getChatStatus())}'
)
[docs] def test_trn1(self):
self.assertEqual(self.process(
'''
function wrapper() {
alert(trn("You have got a new mail", "You have got new mails", newMails));
}
'''),
'function wrapper(){alert(trnc({0:"Du hast eine neue E-Mail",1:"Du hast neue E-Mails"},newMails))}'
)
[docs] def test_trn2(self):
self.assertEqual(self.process(
'''
function wrapper()
{
alert(trn("You have got a new mail", "You have got %1 new mails", newMails, newMails));
}
'''),
'function wrapper(){alert(trnc({0:"Du hast eine neue E-Mail",1:"Du hast "+newMails+" neue E-Mail erhalten"},newMails))}'
)
[docs] def test_marktr(self):
self.assertEqual(self.process(
'''
function wrapper()
{
// Register strings in translation file (will be compiled out)
// According to doc, marktr() does mark for tranlsation, but always returns the original text.
marktr("Dog");
marktr("Cat");
marktr("Bird");
// After marking the text these can be used for translation
var objs = ["Dog","Cat","Bird"];
for (var i=0, l=objs.length; i<l; i++) {
alert(tr(objs[i]));
}
}
'''),
'function wrapper(){;;;var objs=["Dog","Cat","Bird"];for(var i=0,l=objs.length;i<l;i++){alert(tr(objs[i]))}}'
)
if __name__ == '__main__':
logging.getLogger().setLevel(logging.ERROR)
suite = unittest.TestLoader().loadTestsFromTestCase(Tests)
unittest.TextTestRunner(verbosity=2).run(suite)