diff options
Diffstat (limited to 'lib/stdlib/test')
| -rw-r--r-- | lib/stdlib/test/erl_lint_SUITE.erl | 112 | 
1 files changed, 105 insertions, 7 deletions
| diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl index 564f27a512..36229b6989 100644 --- a/lib/stdlib/test/erl_lint_SUITE.erl +++ b/lib/stdlib/test/erl_lint_SUITE.erl @@ -58,7 +58,8 @@  	  otp_8051/1,  	  format_warn/1,  	  on_load_successful/1, on_load_failing/1,  -	  too_many_arguments/1 +	  too_many_arguments/1, +	  basic_errors/1,bin_syntax_errors/1          ]).  % Default timetrap timeout (set in init_per_testcase). @@ -84,7 +85,7 @@ all() ->       otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, export_all,       bif_clash, behaviour_basic, behaviour_multiple,       otp_7550, otp_8051, format_warn, {group, on_load}, -     too_many_arguments]. +     too_many_arguments, basic_errors, bin_syntax_errors].  groups() ->       [{unused_vars_warn, [], @@ -1351,7 +1352,17 @@ guard(Config) when is_list(Config) ->                                          (is_record(X, apa)*2)].              ">>,              [], -            []}], +            []}, +	   {guard8, +	    <<"t(A) when erlang:is_foobar(A) -> ok; +	      t(A) when A ! ok -> ok; +	      t(A) when A ++ [x] -> ok." +	    >>, +	    [], +	    {errors,[{1,erl_lint,illegal_guard_expr}, +		     {2,erl_lint,illegal_guard_expr}, +		     {3,erl_lint,illegal_guard_expr}],[]}} +	  ],      ?line [] = run(Config, Ts1),      ok. @@ -1639,6 +1650,7 @@ otp_5276(Config) when is_list(Config) ->               -deprecated([{'_','_',never}]).               -deprecated([{{badly,formed},1}]).               -deprecated([{'_','_',next_major_release}]). +             -deprecated([{atom_to_list,1}]).               -export([t/0]).               frutt() -> ok.               t() -> ok. @@ -1649,8 +1661,9 @@ otp_5276(Config) when is_list(Config) ->                     {3,erl_lint,{invalid_deprecated,'foo bar'}},                     {5,erl_lint,{bad_deprecated,{f,'_'}}},                     {8,erl_lint,{invalid_deprecated,{'_','_',never}}}, -                   {9,erl_lint,{invalid_deprecated,{{badly,formed},1}}}], -            [{12,erl_lint,{unused_function,{frutt,0}}}]}}], +                   {9,erl_lint,{invalid_deprecated,{{badly,formed},1}}}, +		   {11,erl_lint,{bad_deprecated,{atom_to_list,1}}}], +            [{13,erl_lint,{unused_function,{frutt,0}}}]}}],      ?line [] = run(Config, Ts),      ok. @@ -1896,9 +1909,23 @@ otp_5362(Config) when is_list(Config) ->               warn_deprecated_function,               warn_bif_clash]},             {errors, -            [{2,erl_lint,disallowed_nowarn_bif_clash}],[]}} +            [{2,erl_lint,disallowed_nowarn_bif_clash}],[]}}, -          ], +	  {call_deprecated_function, +	   <<"t(X) -> erlang:hash(X, 2000).">>, +	   [], +	   {warnings, +            [{1,erl_lint,{deprecated,{erlang,hash,2}, +			  {erlang,phash2,2},"in a future release"}}]}}, + +	  {call_removed_function, +	   <<"t(X) -> regexp:match(X).">>, +	   [], +	   {warnings, +            [{1,erl_lint,{removed,{regexp,match,1}, +			  "removed in R15; use the re module instead"}}]}} + +	 ],      ?line [] = run(Config, Ts),      ok. @@ -2971,6 +2998,77 @@ too_many_arguments(Config) when is_list(Config) ->      ok. +%% Test some basic errors to improve coverage. +basic_errors(Config) -> +    Ts = [{redefine_module, +	   <<"-module(redefine_module).">>, +	   [], +	   {errors,[{1,erl_lint,redefine_module}],[]}}, + +	  {attr_after_function, +	   <<"f() -> ok. +               -attr(x).">>, +	   [], +	   {errors,[{2,erl_lint,{attribute,attr}}],[]}}, + +	  {redefine_function, +	   <<"f() -> ok. +              f() -> ok.">>, +	   [], +	   {errors,[{2,erl_lint,{redefine_function,{f,0}}}],[]}}, + +	  {redefine_record, +	   <<"-record(r, {a}). +              -record(r, {a}). +	      f(#r{}) -> ok.">>, +	   [], +	   {errors,[{2,erl_lint,{redefine_record,r}}],[]}}, + +	  {illegal_record_info, +	   <<"f1() -> record_info(42, record). +	      f2() -> record_info(shoe_size, record).">>, +	   [], +	   {errors,[{1,erl_lint,illegal_record_info}, +		    {2,erl_lint,illegal_record_info}],[]}}, + +	  {illegal_expr, +	   <<"f() -> a:b.">>, +	   [], +	   {errors,[{1,erl_lint,illegal_expr}],[]}}, + +	  {illegal_pattern, +	   <<"f(A+B) -> ok.">>, +	   [], +	   {errors,[{1,erl_lint,illegal_pattern}],[]}} +	 ], +    [] = run(Config, Ts), +    ok. + +%% Test binary syntax errors +bin_syntax_errors(Config) -> +    Ts = [{bin_syntax_errors, +	   <<"t(<<X:bad_size>>) -> X; +	      t(<<_:(x ! y)/integer>>) -> ok; +              t(<<X:all/integer>>) -> X; +              t(<<X/bad_type>>) -> X; +	      t(<<X/unit:8>>) -> X; +	      t(<<X:7/float>>) -> X; +	      t(<< <<_:8>> >>) -> ok; +	      t(<<(x ! y):8/integer>>) -> ok. +	    ">>, +	   [], +	   {error,[{1,erl_lint,illegal_bitsize}, +		   {2,erl_lint,illegal_bitsize}, +		   {3,erl_lint,illegal_bitsize}, +		   {4,erl_lint,{undefined_bittype,bad_type}}, +		   {5,erl_lint,bittype_unit}, +		   {7,erl_lint,illegal_pattern}, +		   {8,erl_lint,illegal_pattern}], +	    [{6,erl_lint,{bad_bitsize,"float"}}]}} +	 ], +    [] = run(Config, Ts), +    ok. +  run(Config, Tests) ->      F = fun({N,P,Ws,E}, BadL) ->                  case catch run_test(Config, P, Ws) of | 
