Source code for jasy.test.script.localvariables

#!/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.LocalVariables as LocalVariables



[docs]class Tests(unittest.TestCase):
[docs] def process(self, code): node = Parser.parse(code) ScopeScanner.scan(node) LocalVariables.optimize(node) return Compressor.Compressor().compress(node)
[docs] def test_basic(self): self.assertEqual(self.process( 'function test(para1, para2) { var result = para1 + para2; return result; }'), 'function test(c,b){var a=c+b;return a}' )
[docs] def test_args(self): self.assertEqual(self.process( ''' function wrapper(obj, foo, hello) { obj[foo]().hello; } '''), 'function wrapper(a,b,c){a[b]().hello}' )
[docs] def test_accessor_names(self): self.assertEqual(self.process( ''' function outer(alpha, beta, gamma) { function inner() {} var result = alpha * beta + gamma; var doNot = result.alpha.beta.gamma; return result * outer(alpha, beta, gamma); } '''), 'function outer(d,c,b){function e(){}var a=d*c+b;var f=a.alpha.beta.gamma;return a*outer(d,c,b)}' )
[docs] def test_bind(self): self.assertEqual(self.process( ''' function bind(func, self, varargs) { return this.create(func, { self : self, args : null }); }; '''), 'function bind(b,a,c){return this.create(b,{self:a,args:null})};' )
[docs] def test_closure(self): self.assertEqual(self.process( ''' (function(global) { var foo; var bar = function() { var baz = foo; } })(this); '''), '(function(b){var a;var c=function(){var b=a}})(this);' )
[docs] def test_conflict_generatedname(self): self.assertEqual(self.process( ''' function wrapper() { var first=4; var a=5; } '''), 'function wrapper(){var a=4;var b=5}' )
[docs] def test_conflict_param_var(self): self.assertEqual(self.process( ''' function x(config){ var config = 3; } '''), 'function x(a){var a=3}' )
[docs] def test_conflict_same_name(self): self.assertEqual(self.process( ''' function wrapper() { var first=4; var first=5; } '''), 'function wrapper(){var a=4;var a=5}' )
[docs] def test_declaration(self): self.assertEqual(self.process( ''' function wrapper() { var first, second=5, third; var [desFirst, desSecond]=destruct(), after; } '''), 'function wrapper(){var e,d=5,c;var [b,a]=destruct(),f}' )
[docs] def test_exception_catchvar(self): self.assertEqual(self.process( ''' function wrapper() { var x = 1, y = x+2; try { something(); } catch(ex) { var inCatch = 3; alert(ex); } } '''), 'function wrapper(){var a=1,c=a+2;try{something()}catch(b){var d=3;alert(b)}}' )
[docs] def test_exception(self): self.assertEqual(self.process( ''' function wrapper(param1) { var b = "hello"; try{ access.an.object[param1]; } catch(except) { alert(except + param1) } } '''), 'function wrapper(a){var c="hello";try{access.an.object[a]}catch(b){alert(b+a)}}' )
[docs] def test_function(self): self.assertEqual(self.process( ''' (function(global) { var x = doScrollCheck(); function doScrollCheck() { doScrollCheck(); } })(window); '''), '(function(c){var b=a();function a(){a()}})(window);' )
[docs] def test_inline_access(self): self.assertEqual(self.process( ''' function wrapper() { var d, a=d; } '''), 'function wrapper(){var a,b=a}' )
[docs] def test_let_definition(self): self.assertEqual(self.process( ''' function wrapper() { if (x > y) { let gamma = 12.7 + y; i = gamma * x; } } '''), 'function wrapper(){if(x>y){let a=12.7+y;i=a*x}}' )
[docs] def test_let_expression(self): self.assertEqual(self.process( r''' function wrapper() { var x = 5; var y = 0; document.write(let(x = x + 10, y = 12) x + y + "<br>\n"); document.write(x+y + "<br>\n"); } '''), r'function wrapper(){var a=5;var b=0;document.write(let(a=a+10,b=12)a+b+"<br>\n");document.write(a+b+"<br>\n")}' )
[docs] def test_let_statement(self): self.assertEqual(self.process( r''' function wrapper() { var x = 5; var y = 0; let (x = x+10, y = 12, z=3) { print(x+y+z + "\n"); } print((x + y) + "\n"); } '''), r'function wrapper(){var a=5;var b=0;let(a=a+10,b=12,c=3){print(a+b+c+"\n")}print((a+b)+"\n")}' )
[docs] def test_reuse_different(self): self.assertEqual(self.process( ''' function run() { var first = function() { var inFirst = 1; }; var second = function() { var inSecond = 2; }; } '''), 'function run(){var b=function(){var a=1};var a=function(){var a=2}}' )
[docs] def test_reuse_names(self): self.assertEqual(self.process( ''' function run() { var first = function() { var a = 1; }; var second = function() { var a = 2; }; } '''), 'function run(){var b=function(){var a=1};var a=function(){var a=2}}' )
if __name__ == '__main__': logging.getLogger().setLevel(logging.ERROR) suite = unittest.TestLoader().loadTestsFromTestCase(Tests) unittest.TextTestRunner(verbosity=2).run(suite)