@ -66,9 +66,8 @@ class TestJSInterpreter(unittest.TestCase):
self . _test ( ' function f() { var x = 20; x += 30 + 1; return x;} ' , 51 )
self . _test ( ' function f() { var x = 20; x -= 30 + 1; return x;} ' , - 11 )
@unittest.skip ( ' Not implemented ' )
def test_comments ( self ) :
' Skipping: Not yet fully implemented '
return
self . _test ( '''
function f ( ) {
var x = / * 1 + * / 2 ;
@ -100,10 +99,13 @@ class TestJSInterpreter(unittest.TestCase):
jsi = JSInterpreter ( ' function f() { return NaN } ' )
self . assertTrue ( math . isnan ( jsi . call_function ( ' f ' ) ) )
self . _test ( ' function f() { return new Date( " Wednesday 31 December 1969 18:01:26 MDT " ) - 0; } ' ,
86000 )
self . _test ( ' function f(dt) { return new Date(dt) - 0; } ' ,
86000 , args = [ ' Wednesday 31 December 1969 18:01:26 MDT ' ] )
def test_date ( self ) :
self . _test ( ' function f() { return new Date( " Wednesday 31 December 1969 18:01:26 MDT " ) - 0; } ' , 86000 )
jsi = JSInterpreter ( ' function f(dt) { return new Date(dt) - 0; } ' )
self . assertEqual ( jsi . call_function ( ' f ' , ' Wednesday 31 December 1969 18:01:26 MDT ' ) , 86000 )
self . assertEqual ( jsi . call_function ( ' f ' , ' 12/31/1969 18:01:26 MDT ' ) , 86000 ) # m/d/y
self . assertEqual ( jsi . call_function ( ' f ' , ' 1 January 1970 00:00:00 UTC ' ) , 0 )
def test_call ( self ) :
jsi = JSInterpreter ( '''
@ -286,6 +288,19 @@ class TestJSInterpreter(unittest.TestCase):
jsi = JSInterpreter ( R ' function f() { let a=[/[) \\ ]/]; return a[0]; } ' )
self . assertEqual ( jsi . call_function ( ' f ' ) . pattern , r ' [) \\ ] ' )
@unittest.skip ( ' Not implemented ' )
def test_replace ( self ) :
self . _test ( ' function f() { let a= " data-name " .replace( " data- " , " " ); return a } ' ,
' name ' )
self . _test ( ' function f() { let a= " data-name " .replace(new RegExp( " ^.+- " ), " " ); return a; } ' ,
' name ' )
self . _test ( ' function f() { let a= " data-name " .replace(/^.+-/, " " ); return a; } ' ,
' name ' )
self . _test ( ' function f() { let a= " data-name " .replace(/a/g, " o " ); return a; } ' ,
' doto-nome ' )
self . _test ( ' function f() { let a= " data-name " .replaceAll( " a " , " o " ); return a; } ' ,
' doto-nome ' )
def test_char_code_at ( self ) :
jsi = JSInterpreter ( ' function f(i) { return " test " .charCodeAt(i)} ' )
self . assertEqual ( jsi . call_function ( ' f ' , 0 ) , 116 )
@ -311,6 +326,11 @@ class TestJSInterpreter(unittest.TestCase):
self . _test ( ' function f() { return 2 - + + - -2;} ' , 0 )
self . _test ( ' function f() { return 2 + - + - -2;} ' , 0 )
@unittest.skip ( ' Not implemented ' )
def test_packed ( self ) :
jsi = JSInterpreter ( ''' function f(p,a,c,k,e,d) { while(c--)if(k[c])p=p.replace(new RegExp( ' \\ b ' +c.toString(a)+ ' \\ b ' , ' g ' ),k[c]);return p} ''' )
self . assertEqual ( jsi . call_function ( ' f ' , ''' h 7=g( " 1j " );7.7h( { 7g:[ { 33: " w://7f-7e-7d-7c.v.7b/7a/79/78/77/76.74?t=73&s=2s&e=72&f=2t&71=70.0.0.1&6z=6y&6x=6w " }],6v: " w://32.v.u/6u.31 " ,16: " r % " ,15: " r % " ,6t: " 6s " ,6r: " " ,6q: " l " ,6p: " l " ,6o: " 6n " ,6m: \' 6l \' ,6k: " 6j " ,9:[ { 33: " /2u?b=6i&n=50&6h=w://32.v.u/6g.31 " ,6f: " 6e " }],1y: { 6d:1,6c: \' #6b \' ,6a: \' #69 \' ,68: " 67 " ,66:30,65:r,}, " 64 " : { 63: " % 62 2m % m %61% 5z % 5y %5x .u % 5w % 5v %5u .2y % 22 2k % m %1o % 22 5t % m %1o % 22 5s % m %1o % 22 2j % m %5r % 22 16 % m % 5q % 22 15 % m % 5p % 22 5o % 2z % 5n % 5m % 2z " ,5l: " w://v.u/d/1k/5k.2y " ,5j:[]}, \' 5i \' : { " 5h " : " 5g " },5f: " 5e " ,5d: " w://v.u " ,5c: {} ,5b:l,1x:[0.25,0.50,0.75,1,1.25,1.5,2]});h 1m,1n,5a;h 59=0,58=0;h 7=g( " 1j " );h 2x=0,57=0,56=0;$.55( { 54: { \' 53-52 \' : \' 2i-51 \' }});7.j( \' 4z \' ,6(x) { c(5>0&&x.1l>=5&&1n!=1) { 1n=1;$( \' q.4y \' ).4x( \' 4w \' )}});7.j( \' 13 \' ,6(x) { 2x=x.1l});7.j( \' 2g \' ,6(x) { 2w(x)});7.j( \' 4v \' ,6() { $( \' q.2v \' ).4u()});6 2w(x) { $( \' q.2v \' ).4t();c(1m)19;1m=1;17=0;c(4s.4r===l) { 17=1}$.4q( \' /2u?b=4p&2l=1k&4o=2t-4n-4m-2s-4l&4k=&4j=&4i=&17= \' +17,6(2r) { $( \' #4h \' ).4g(2r)});$( \' .3-8-4f-4e:4d( " 4c " ) \' ).2h(6(e) { 2q();g().4b(0);g().4a(l)});6 2q() { h $14=$( " <q /> " ).2p( { 1l: " 49 " ,16: " r % " ,15: " r % " ,48:0,2n:0,2o:47,46: " 45(10 % , 10 % , 10 % , 0.4) " , " 44-43 " : " 42 " });$( " <41 /> " ).2p( { 16: " 60 % " ,15: " 60 % " ,2o:40, " 3z-2n " : " 3y " }).3x( { \' 2m \' : \' /?b=3w&2l=1k \' , \' 2k \' : \' 0 \' , \' 2j \' : \' 2i \' }).2f($14);$14.2h(6() { $(3v).3u();g().2g()});$14.2f($( \' #1j \' ))}g().13(0);}6 3t() { h 9=7.1b(2e);2d.2c(9);c(9.n>1) { 1r(i=0;i<9.n;i++) { c(9[i].1a==2e) { 2d.2c( \' !!= \' +i);7.1p(i)}}}}7.j( \' 3s \' ,6() { g().1h( " /2a/3r.29 " , " 3q 10 28 " ,6() { g().13(g().27()+10)}, " 2b " );$( " q[26=2b] " ).23().21( \' .3-20-1z \' );g().1h( " /2a/3p.29 " , " 3o 10 28 " ,6() { h 12=g().27()-10;c(12<0)12=0;g().13(12)}, " 24 " );$( " q[26=24] " ).23().21( \' .3-20-1z \' );});6 1i() {} 7.j( \' 3n \' ,6() { 1i()});7.j( \' 3m \' ,6() { 1i()});7.j( " k " ,6(y) { h 9=7.1b();c(9.n<2)19;$( \' .3-8-3l-3k \' ).3j(6() { $( \' #3-8-a-k \' ).1e( \' 3-8-a-z \' );$( \' .3-a-k \' ).p( \' o-1f \' , \' 11 \' )});7.1h( " /3i/3h.3g " , " 3f 3e " ,6() { $( \' .3-1w \' ).3d( \' 3-8-1v \' );$( \' .3-8-1y, .3-8-1x \' ).p( \' o-1g \' , \' 11 \' );c($( \' .3-1w \' ).3c( \' 3-8-1v \' )) { $( \' .3-a-k \' ).p( \' o-1g \' , \' l \' );$( \' .3-a-k \' ).p( \' o-1f \' , \' l \' );$( \' .3-8-a \' ).1e( \' 3-8-a-z \' );$( \' .3-8-a:1u \' ).3b( \' 3-8-a-z \' )}3a { $( \' .3-a-k \' ).p( \' o-1g \' , \' 11 \' );$( \' .3-a-k \' ).p( \' o-1f \' , \' 11 \' );$( \' .3-8-a:1u \' ).1e( \' 3-8-a-z \' )}}, " 39 " );7.j( " 38 " ,6(y) { 1d.37( \' 1c \' ,y.9[y.36].1a)});c(1d.1t( \' 1c \' )) { 35( " 1s(1d.1t( \' 1c \' )); " ,34)}});h 18;6 1s(1q) { h 9=7.1b();c(9.n>1) { 1r(i=0;i<9.n;i++) { c(9[i].1a==1q) { c(i==18) {19} 18=i;7.1p(i)}}}} ' ,36,270, ' |||jw|||function|player|settings|tracks|submenu||if||||jwplayer|var||on|audioTracks|true|3D|length|aria|attr|div|100|||sx|filemoon|https||event|active||false|tt|seek|dd|height|width|adb|current_audio|return|name|getAudioTracks|default_audio|localStorage|removeClass|expanded|checked|addButton|callMeMaybe|vplayer|0fxcyc2ajhp1|position|vvplay|vvad|220|setCurrentAudioTrack|audio_name|for|audio_set|getItem|last|open|controls|playbackRates|captions|rewind|icon|insertAfter||detach|ff00||button|getPosition|sec|png|player8|ff11|log|console|track_name|appendTo|play|click|no|scrolling|frameborder|file_code|src|top|zIndex|css|showCCform|data|1662367683|383371|dl|video_ad|doPlay|prevt|mp4|3E||jpg|thumbs|file|300|setTimeout|currentTrack|setItem|audioTrackChanged|dualSound|else|addClass|hasClass|toggleClass|Track|Audio|svg|dualy|images|mousedown|buttons|topbar|playAttemptFailed|beforePlay|Rewind|fr|Forward|ff|ready|set_audio_track|remove|this|upload_srt|prop|50px|margin|1000001|iframe|center|align|text|rgba|background|1000000|left|absolute|pause|setCurrentCaptions|Upload|contains|item|content|html|fviews|referer|prem|embed|3e57249ef633e0d03bf76ceb8d8a4b65|216|83|hash|view|get|TokenZir|window|hide|show|complete|slow|fadeIn|video_ad_fadein|time||cache|Cache|Content|headers|ajaxSetup|v2done|tott|vastdone2|vastdone1|vvbefore|playbackRateControls|cast|aboutlink|FileMoon|abouttext|UHD|1870|qualityLabels|sites|GNOME_POWER|link|2Fiframe|3C|allowfullscreen|22360|22640|22no|marginheight|marginwidth|2FGNOME_POWER|2F0fxcyc2ajhp1|2Fe|2Ffilemoon|2F|3A||22https|3Ciframe|code|sharing|fontOpacity|backgroundOpacity|Tahoma|fontFamily|303030|backgroundColor|FFFFFF|color|userFontScale|thumbnails|kind|0fxcyc2ajhp10000|url|get_slides|start|startparam|none|preload|html5|primary|hlshtml|androidhls|duration|uniform|stretching|0fxcyc2ajhp1_xt|image|2048|sp|6871|asn|127|srv|43200|_g3XlBcu2lmD9oDexD2NLWSmah2Nu3XcDrl93m9PwXY|m3u8||master|0fxcyc2ajhp1_x|00076|01|hls2|to|s01|delivery|storage|moon|sources|setup ''' . split ( ' | ' ) ) )
if __name__ == ' __main__ ' :
unittest . main ( )