2022-07-01 09:36:52 +04:00
|
|
|
import os
|
2022-03-25 16:45:38 +04:00
|
|
|
import unittest
|
2022-08-22 09:55:08 +04:00
|
|
|
from typing import List
|
2022-03-25 16:45:38 +04:00
|
|
|
|
2022-03-17 10:24:58 +04:00
|
|
|
from python_aternos import atjsparse
|
2021-11-01 18:04:19 +04:00
|
|
|
|
2022-08-22 09:55:08 +04:00
|
|
|
CONV_TOKEN_ARROW = '''(() => {/*AJAX_TOKEN=123}*/window["AJAX_TOKEN"]=("2r" + "KO" + "A1" + "IFdBcHhEM" + "61" + "6cb");})();'''
|
2022-07-01 14:28:39 +04:00
|
|
|
CONV_TOKEN_FUNC = '''(function(){window["AJAX_TOKEN"]=("2r" + "KO" + "A1" + "IFdBcHhEM" + "61" + "6cb");})()'''
|
2022-06-23 15:13:56 +04:00
|
|
|
|
|
|
|
|
2022-03-25 16:45:38 +04:00
|
|
|
class TestJs2Py(unittest.TestCase):
|
|
|
|
|
2022-06-23 15:13:56 +04:00
|
|
|
def setUp(self) -> None:
|
|
|
|
|
2022-07-01 09:36:52 +04:00
|
|
|
self.path = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
self.samples = os.path.join(self.path, 'samples')
|
|
|
|
self.input = os.path.join(self.samples, 'token_input.txt')
|
|
|
|
self.output = os.path.join(self.samples, 'token_output.txt')
|
|
|
|
|
2022-08-22 09:55:08 +04:00
|
|
|
def read_sample(file: str) -> List[str]:
|
|
|
|
with open(file, 'rt', encoding='utf-8') as f:
|
|
|
|
return f \
|
|
|
|
.read() \
|
|
|
|
.strip() \
|
|
|
|
.replace('\r\n', '\n') \
|
|
|
|
.split('\n')
|
2022-06-23 15:13:56 +04:00
|
|
|
|
2022-08-22 09:55:08 +04:00
|
|
|
self.tests = read_sample(self.input)
|
|
|
|
self.results = read_sample(self.output)
|
2022-06-23 15:13:56 +04:00
|
|
|
|
|
|
|
def test_base64(self) -> None:
|
|
|
|
|
|
|
|
encoded = 'QEhlbGxvIFdvcmxkIQ=='
|
|
|
|
decoded = atjsparse.atob(encoded)
|
|
|
|
self.assertEqual(decoded, '@Hello World!')
|
|
|
|
|
|
|
|
def test_conv(self) -> None:
|
|
|
|
|
|
|
|
token = CONV_TOKEN_ARROW
|
|
|
|
f = atjsparse.to_ecma5_function(token)
|
|
|
|
self.assertEqual(f, CONV_TOKEN_FUNC)
|
|
|
|
|
|
|
|
def test_ecma6parse(self) -> None:
|
|
|
|
|
|
|
|
code = '''
|
|
|
|
window.t0 =
|
|
|
|
window['document']&&
|
|
|
|
!window[["p","Ma"].reverse().join('')]||
|
|
|
|
!window[["ut","meo","i","etT","s"].reverse().join('')];'''
|
|
|
|
|
|
|
|
part1 = '''window.t1 = Boolean(window['document']);'''
|
|
|
|
part2 = '''window.t2 = Boolean(!window[["p","Ma"].reverse().join('')]);'''
|
|
|
|
part3 = '''window.t3 = Boolean(!window[["ut","meo","i","etT","s"].reverse().join('')]);'''
|
|
|
|
|
2022-07-01 14:28:39 +04:00
|
|
|
ctx0 = atjsparse.exec_js(code)
|
|
|
|
ctx1 = atjsparse.exec_js(part1)
|
|
|
|
ctx2 = atjsparse.exec_js(part2)
|
|
|
|
ctx3 = atjsparse.exec_js(part3)
|
2022-06-23 15:13:56 +04:00
|
|
|
|
|
|
|
self.assertEqual(ctx0.window['t0'], False)
|
|
|
|
self.assertEqual(ctx1.window['t1'], True)
|
|
|
|
self.assertEqual(ctx2.window['t2'], False)
|
|
|
|
self.assertEqual(ctx3.window['t3'], False)
|
|
|
|
|
|
|
|
def test_exec(self) -> None:
|
|
|
|
|
|
|
|
for i, f in enumerate(self.tests):
|
2022-07-01 14:28:39 +04:00
|
|
|
ctx = atjsparse.exec_js(f)
|
2022-06-23 15:13:56 +04:00
|
|
|
res = ctx.window['AJAX_TOKEN']
|
|
|
|
self.assertEqual(res, self.results[i])
|
MkDocs, Readme, Files API, Automated session saving, v2.0.1
MkDocs: sphinx docstrings rewritten to google, improved config, written the major part of how-to.
Readme: centered title + logo, added badges, features list, updated changelog.
Improved Files API, added automatical session saving and restoring to Client.
Some changes in makefile and gitignore.
License Notice now refers to all contributors.
2022-08-26 16:14:07 +04:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|