jsi = JSInterpreter('function x(){return 42 << NaN}')
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):
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)
'https://www.youtube.com/s/player/dac945fd/player_ias.vflset/en_US/base.js',
'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',
+ ),
]
import itertools
import json
-import math
import operator
import re
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')
def _js_ternary(cndn, if_true=True, if_false=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
- try:
- if math.isnan(cndn): # NB: NaN cannot be checked by membership
- return if_false
- except TypeError:
- pass
return if_true