diff --git a/mathics/builtin/atomic/symbols.py b/mathics/builtin/atomic/symbols.py index 52a88535d..8593d9ddc 100644 --- a/mathics/builtin/atomic/symbols.py +++ b/mathics/builtin/atomic/symbols.py @@ -448,6 +448,8 @@ class Information(PrefixOperator): """ attributes = A_HOLD_ALL | A_SEQUENCE_HOLD | A_PROTECTED | A_READ_PROTECTED + eval_error = Builtin.generic_argument_error + expected_args = (1, 2) messages = {"notfound": "Expression `1` is not a symbol"} options = { "LongForm": "True", diff --git a/mathics/builtin/testing_expressions/equality_inequality.py b/mathics/builtin/testing_expressions/equality_inequality.py index 993692e28..d27ed2ddb 100644 --- a/mathics/builtin/testing_expressions/equality_inequality.py +++ b/mathics/builtin/testing_expressions/equality_inequality.py @@ -381,6 +381,8 @@ class Between(Builtin): "Between[range_List][x_]": "Between[x, range]", # operator form } + eval_error = Builtin.generic_argument_error + expected_args = (1, 2) summary_text = "test if value or values are in range" @@ -408,6 +410,8 @@ class BooleanQ(Builtin): = True """ + eval_error = Builtin.generic_argument_error + expected_args = 1 rules = { "BooleanQ[expr_]": "If[expr, True, True, False]", } @@ -850,6 +854,8 @@ class TrueQ(Builtin): = False """ + eval_error = Builtin.generic_argument_error + expected_args = 1 rules = { "TrueQ[expr_]": "If[expr, True, False, False]", } diff --git a/test/builtin/atomic/test_symbols.py b/test/builtin/atomic/test_symbols.py index 94db2f448..6c9180289 100644 --- a/test/builtin/atomic/test_symbols.py +++ b/test/builtin/atomic/test_symbols.py @@ -2,7 +2,7 @@ """ Unit tests from mathics.builtin.atomic.symbols. """ -from test.helper import check_evaluation +from test.helper import check_arg_counts, check_evaluation import pytest @@ -84,31 +84,26 @@ def test_symbol(str_expr, warnings, str_expected, fail_msg): @pytest.mark.parametrize( - ("str_expr", "msgs", "fail_msg"), + ("function_name", "msg_fragment"), [ ( - "Symbol[]", - ["Symbol called with 0 arguments; 1 argument is expected."], - "Symbol argument number error", + "Information", + "1 or 2 arguments are", ), ( - "SymbolName[]", - ["SymbolName called with 0 arguments; 1 argument is expected."], - "SymbolName[] argument number error", + "Symbol", + "1 argument is", ), ( - "ValueQ[]", - ["ValueQ called with 0 arguments; 1 argument is expected."], - "ValueQ[] argument number error", + "SymbolName", + "1 argument is", + ), + ( + "ValueQ", + "1 argument is", ), ], ) -def test_symbols_arg_errors(str_expr, msgs, fail_msg): +def test_symbols_arg_errors(function_name, msg_fragment): """ """ - - check_evaluation( - str_expr, - str_expr, - failure_message=fail_msg, - expected_messages=msgs, - ) + check_arg_counts(function_name, msg_fragment) diff --git a/test/builtin/test_testing_expressions.py b/test/builtin/test_testing_expressions.py index a1ced6d6b..4b85437ec 100644 --- a/test/builtin/test_testing_expressions.py +++ b/test/builtin/test_testing_expressions.py @@ -3,11 +3,33 @@ Unit tests for mathics.builtin.testing_expressions """ -from test.helper import check_evaluation +from test.helper import check_arg_counts, check_evaluation import pytest +@pytest.mark.parametrize( + ("function_name", "msg_fragment"), + [ + ( + "Between", + "1 or 2 arguments are", + ), + ( + "BooleanQ", + "1 argument is", + ), + ( + "TrueQ", + "1 argument is", + ), + ], +) +def test_arg_errors(function_name, msg_fragment): + """ """ + check_arg_counts(function_name, msg_fragment) + + @pytest.mark.parametrize( ("str_expr", "msgs", "str_expected", "fail_msg"), [ diff --git a/test/helper.py b/test/helper.py index e03a4e5ad..dc0900eb4 100644 --- a/test/helper.py +++ b/test/helper.py @@ -34,6 +34,21 @@ def evaluate(str_expr: str, form=None): return session.evaluate(str_expr, form=form) +def check_arg_counts(function_name, msg_fragment): + """ """ + str_expr = f"{function_name}[]" + expected_msgs = [ + f"{function_name} called with 0 arguments; {msg_fragment} expected." + ] + failure_message = f"{function_name} argument number error" + check_evaluation( + str_expr, + str_expr, + failure_message=failure_message, + expected_messages=expected_msgs, + ) + + def check_evaluation( str_expr: Optional[str], str_expected: Optional[str] = None,