From dc2aed1ca25fb024c02f91f58c509a0be33f3919 Mon Sep 17 00:00:00 2001 From: Matt Basta Date: Thu, 4 Aug 2011 15:03:17 -0700 Subject: [PATCH] Fixed traceback when Number global function is passed a non-literal value. Potential fallout from 673536 --- tests/test_js_functions.py | 24 +++++++++++++++++++ .../testcases/javascript/call_definitions.py | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/tests/test_js_functions.py b/tests/test_js_functions.py index 1f0ea0026..af27d0e79 100644 --- a/tests/test_js_functions.py +++ b/tests/test_js_functions.py @@ -1,3 +1,5 @@ +from nose.tools import eq_ + from js_helper import _do_test_raw, _get_var def test_createElement(): @@ -108,3 +110,25 @@ def test_extraneous_globals(): assert "foo" not in err.final_context.data assert "bar" not in err.final_context.data + +def test_number_global_conversions(): + """Test that the Number global constructor functions properly.""" + err = _do_test_raw(""" + var a = Number(), + b = Number(123), + c = Number(123.123), + d = Number("123"), + e = Number("123.456"), + f = Number("foo"), + g = Number(null), + nan = window.NaN; + """) + assert not err.failed() + eq_(_get_var(err, "a"), 0) + eq_(_get_var(err, "b"), 123) + eq_(_get_var(err, "c"), 123.123) + eq_(_get_var(err, "d"), 123) + eq_(_get_var(err, "e"), 123.456) + eq_(_get_var(err, "f"), _get_var(err, "nan")) + eq_(_get_var(err, "g"), _get_var(err, "nan")) + diff --git a/validator/testcases/javascript/call_definitions.py b/validator/testcases/javascript/call_definitions.py index 44de6a4f8..2d0be2c65 100644 --- a/validator/testcases/javascript/call_definitions.py +++ b/validator/testcases/javascript/call_definitions.py @@ -123,7 +123,7 @@ def number_global(wrapper, arguments, traverser): arg = traverser._traverse_node(arguments[0]) try: value = float(arg.get_literal_value()) - except ValueError: + except (ValueError, TypeError): return traverser._build_global( name="NaN", entity=predefinedentities.GLOBAL_ENTITIES[u"NaN"])