Exemple #1
0
    def do_lang(self, lang, app, lang_ext, lang_form='{}', need_result=need_result_js, var_prefix='', instance_point='.'):
        Py2Js = think(translater=Common, lang=lang)
        Py2Js = think('''

            === Python ===                  === {lang} ===

    self.ids.mainInput.text   >>>       {var_prefix}this{instance_point}ids.mainInput.text  >>>     ThisIdsMainInputText
    mw.ids.mainInput.text     >>>       {var_prefix}mw{instance_point}ids.mainInput.text    >>>     MwIdsMainInputText

        '''.format(lang=lang, var_prefix=var_prefix, instance_point=instance_point), Py2Js, lang=lang)

        Py2Js.Class.init_dict = {'arg_to_instance': {'ids.mainInput.text':'ids.mainInput.text'} }

        out = Py2Js.translate(code, remove_space_lines=True)

        #self.assertEqual(make_lines(need_result), make_lines(out))

        outputs = []
        for prog, ext, text, form in (
                ('python', 'py', code, '{}'),
                (app, lang_ext, out, lang_form)
        ):
            text = text.replace('ids.mainInput.text', 'ids_mainInput_text')

            import os
            if not os.path.exists('build/tmp/'):
                os.makedirs('build/tmp/')

            filename = 'build/tmp/coup_tst.' + ext # FIXME !!!!
            print('[ FILE ] {}'.format(filename))
            with open(filename, 'w') as f:
                f.write( form.format(text) )

            from subprocess import Popen, CalledProcessError, PIPE
            from sys import stdout

            com = prog + ' ' + filename
            print('[ COM ] {}'.format(com))

            p = Popen(com, shell=True, stdout=PIPE)
            stdoutdata, stderrdata = p.communicate()

            outputs.append(make_lines( stdoutdata ))

            if p.returncode != 0:
                raise Exception('[ ERROR on COM: {} ]\n\t{}'.format(prog, stdoutdata))

            #os.remove(filename)

        self.assertEqual(outputs[0], outputs[1])
Exemple #2
0
    def test_3_var(self):

        Py2Js = think('''
        @:extends:Common
        @langs

    def <EXP:+NAME>():       >>>     function <EXP:+NAME>() {     >>>         >>>     Func  | locals = {}

        ''', lang='Javascript')

        out = Py2Js.translate('''

def func():
    x = 1
    x = 2
    print(x)

def func2():
    x = 3

        ''', remove_space_lines=True)

        self.assertEqual('''function func()
{
    var x = 1
    x = 2
    console.log(x)
}
function func2()
{
    var x = 3
}'''.split('\n'), out.split('\n'))
Exemple #3
0
    def test_6_list_in_list_in_list(self):
        Py2Js = think('''
        @:extends:Common
        @langs''', lang='Javascript')
        out = Py2Js.translate('''
a = [1, 2, 3]
b = [[1, "2"], [[3, "4"], 5], ["1, 7", 9]]
print(a + b)
        ''', remove_space_lines=True)
        self.assertEqual('''var a = [1, 2, 3]
var b = [[1, "2"], [[3, "4"], 5], ["1, 7", 9]]
console.log(a + b)'''.split('\n'), out.split('\n'))
Exemple #4
0
    def test_1_if_or_ravno_ravno(self):

        Py2Js = think('''
        @:extends:Common
        @langs

        <EXP> == <EXP>      >>>     <EXP> == <EXP>      >>>     <EXP> == <EXP>      >>>     RavnoRavno
        <EXP> or <EXP>      >>>     <EXP> || <EXP>      >>>     <EXP> || <EXP>      >>>     Or

        ''', lang='Javascript')

        out = Py2Js.translate('''
x = 2
if x == 1 or x == 2:
    print('Okkk!!!')

        ''', remove_space_lines=True)

        self.assertEqual('''var x = 2
if (x == 1 || x == 2)
{
    console.log('Okkk!!!')
}'''.split('\n'), out.split('\n'))
Exemple #5
0
    def test_7_list_in_list(self):
        Py2Js = think('''
        @:extends:Common
        @langs
    def <EXP:+NAME>():                  >>>     function <EXP:+NAME>() {                    >>>     >>>     func_0
    def <EXP:+NAME>(<EXP:+NAMES_LIST>): >>>     function <EXP:+NAME>(<EXP:+NAMES_LIST>) {   >>>     >>>     func_2
    <EXP>()                             >>>     <EXP>()                                     >>>     >>>     func_start_0
    <EXP>(<EXP:LIST>)                   >>>     <EXP>(<EXP:LIST>)                           >>>     >>>     func_start_2
    ''', lang='Javascript')
        out = Py2Js.translate('''
def func(a, b):
    pass
def func_2():
    pass
func([1, 2], func_2())
        ''', remove_space_lines=True)
        self.assertEqual('''function func(a, b)
{
}
function func_2()
{
}
func([1, 2], func_2())'''.split('\n'), out.split('\n'))
Exemple #6
0
    def test_8_fact(self):
        Py2Js = think('''
        @:extends:Common
        @langs
    def <EXP:+NAME>(<EXP:+NAME>):       >>>     function <EXP:+NAME>(<EXP:+NAME>) {         >>>     >>>     func_1          | locals = {}
    def <EXP:+NAME>(<EXP:+NAMES_LIST>): >>>     function <EXP:+NAME>(<EXP:+NAMES_LIST>) {   >>>     >>>     func_2          | locals = {}
    <EXP>(<EXP>)                        >>>     <EXP>(<EXP>)                                >>>     >>>     func_start_1
    <EXP>(<EXP:LIST>)                   >>>     <EXP>(<EXP:LIST>)                           >>>     >>>     func_start_2
    while <EXP>:                        >>>     while (<EXP>) {                             >>>     >>>     While
    <EXP> <= <EXP>                      >>>     <EXP> <= <EXP>                              >>>     >>>     Lower
    <EXP> * <EXP>                       >>>     <EXP> * <EXP>                               >>>     >>>     Mnoz
    return <EXP>                        >>>     return <EXP>                                >>>     >>>     ReturnVal
    print(<EXP>)                        >>>     console.log(<EXP>)                          >>>     >>>     Print
    ''', lang='Javascript')
        in_code = '''
def fact(num):
    rval = 1
    i = 2
    while i <= num:
        rval = rval * i
        i += 1
    return rval
print(fact(7))
        '''
        out = Py2Js.translate(in_code, remove_space_lines=True)
        self.assertEqual('''function fact(num)
{
    var rval = 1
    var i = 2
    while (i <= num)
    {
        rval = rval * i
        i += 1
    }
    return rval
}
console.log(fact(7))'''.split('\n'), out.split('\n'))
Exemple #7
0
import sys
from os.path import abspath, dirname, join

HERE = dirname(abspath(__file__))
SITE_PACKAGES = join(HERE, '..', '..')

sys.path.insert(0, SITE_PACKAGES)

from coup.common.url import think
from coup.common.all import Common

lang = 'Javascript'
with open(join(HERE, 'py_code.py')) as fn:
    source_file = fn.read()

Py2Js = think(translater=Common, lang=lang)
out = Py2Js.translate(source_file, remove_space_lines=True)
for line in out.split('\n'):
    print(line)
Exemple #8
0
 def test_4_utf8(self):
     Py2Js = think('''@langs''', lang='Javascript')
     out = Py2Js.translate('''print("Привет!")''', remove_space_lines=True)
     #print(out) #print(out.decode('utf-8').encode('cp866'))
     self.assertEqual('''console.log("Привет!")'''.split('\n'), out.split('\n'))
Exemple #9
0
''')

Py2Js = think('''

            === Python ===                            === Javascript ===

    '<EXP:TEXT>'                        >>>     '<EXP:TEXT>'

    if <EXP>:                           >_>     if <EXP> {
        sorted(<EXP>)                   >_>         <EXP>.sorted()
    elif <EXP>:                         >_>     else if {
        pass                            >_>
    else:                               >_>     } else {
        `x_name` = `17`                 >_>         var `x_name` = `17`
                                                }

    for `a_name` in <EXP>:              >_>     for `a_name` in <EXP> {
        pass
                                                }

    class `NewName`(`ParentName`):      >>>     class `NewName` // `ParentName`
                                                {
        def `new_name`(self):           >>>         `new_name`() {
            print(`'string'`)           >>>             console.log(`'string'`)
                                                    }
                                                }
    ''',
              translater=Py2Js)

Py2JsNew = think(translater=Translater)