[jsinterp] Small updates for a85a875
* update signature tests * clarify NaN handling
This commit is contained in:
parent
d1c6c5c4d6
commit
d89c2137ba
@ -516,6 +516,9 @@ class TestJSInterpreter(unittest.TestCase):
|
|||||||
jsi = JSInterpreter('function x(){return 42 << NaN}')
|
jsi = JSInterpreter('function x(){return 42 << NaN}')
|
||||||
self.assertEqual(jsi.call_function('x'), 42)
|
self.assertEqual(jsi.call_function('x'), 42)
|
||||||
|
|
||||||
|
jsi = JSInterpreter('function x(){return 42 << Infinity}')
|
||||||
|
self.assertEqual(jsi.call_function('x'), 42)
|
||||||
|
|
||||||
def test_32066(self):
|
def test_32066(self):
|
||||||
jsi = JSInterpreter("function x(){return Math.pow(3, 5) + new Date('1970-01-01T08:01:42.000+08:00') / 1000 * -239 - -24205;}")
|
jsi = JSInterpreter("function x(){return Math.pow(3, 5) + new Date('1970-01-01T08:01:42.000+08:00') / 1000 * -239 - -24205;}")
|
||||||
self.assertEqual(jsi.call_function('x'), 70)
|
self.assertEqual(jsi.call_function('x'), 70)
|
||||||
|
@ -143,6 +143,14 @@ _NSIG_TESTS = [
|
|||||||
'https://www.youtube.com/s/player/dac945fd/player_ias.vflset/en_US/base.js',
|
'https://www.youtube.com/s/player/dac945fd/player_ias.vflset/en_US/base.js',
|
||||||
'o8BkRxXhuYsBCWi6RplPdP', '3Lx32v_hmzTm6A',
|
'o8BkRxXhuYsBCWi6RplPdP', '3Lx32v_hmzTm6A',
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
'https://www.youtube.com/s/player/6f20102c/player_ias.vflset/en_US/base.js',
|
||||||
|
'lE8DhoDmKqnmJJ', 'pJTTX6XyJP2BYw',
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'https://www.youtube.com/s/player/cfa9e7cb/player_ias.vflset/en_US/base.js',
|
||||||
|
'qO0NiMtYQ7TeJnfFG2', 'k9cuJDHNS5O7kQ',
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
import json
|
import json
|
||||||
import math
|
|
||||||
import operator
|
import operator
|
||||||
import re
|
import re
|
||||||
|
|
||||||
@ -52,6 +51,10 @@ def wraps_op(op):
|
|||||||
return update_and_rename_wrapper
|
return update_and_rename_wrapper
|
||||||
|
|
||||||
|
|
||||||
|
# NB In principle NaN cannot be checked by membership.
|
||||||
|
# Here all NaN values are actually this one, so _NaN is _NaN,
|
||||||
|
# although _NaN != _NaN.
|
||||||
|
|
||||||
_NaN = float('nan')
|
_NaN = float('nan')
|
||||||
|
|
||||||
|
|
||||||
@ -126,13 +129,8 @@ def _js_comp_op(op):
|
|||||||
|
|
||||||
def _js_ternary(cndn, if_true=True, if_false=False):
|
def _js_ternary(cndn, if_true=True, if_false=False):
|
||||||
"""Simulate JS's ternary operator (cndn?if_true:if_false)"""
|
"""Simulate JS's ternary operator (cndn?if_true:if_false)"""
|
||||||
if cndn in (False, None, 0, '', JS_Undefined):
|
if cndn in (False, None, 0, '', JS_Undefined, _NaN):
|
||||||
return if_false
|
return if_false
|
||||||
try:
|
|
||||||
if math.isnan(cndn): # NB: NaN cannot be checked by membership
|
|
||||||
return if_false
|
|
||||||
except TypeError:
|
|
||||||
pass
|
|
||||||
return if_true
|
return if_true
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user