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])
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'))
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'))
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'))
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'))
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'))
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)
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'))
''') 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)