From 0e1e34a49cca0f077bc596954304a83fa9e403a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Wed, 10 May 2017 07:25:50 +0200
Subject: common_test: Future-proof exception handling code

In the future, erlang:get_stacktrace/0 will probably only work
inside a the 'catch' block of a 'try' expression.

Future-proof the code by rewriting the old-style catch to
a try...catch.
---
 lib/common_test/src/ct_run.erl | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

(limited to 'lib')

diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl
index bbace18a28..ce30babc0d 100644
--- a/lib/common_test/src/ct_run.erl
+++ b/lib/common_test/src/ct_run.erl
@@ -436,13 +436,17 @@ script_start2(Opts = #opts{vts = undefined,
 	    Specs1 = get_start_opt(join_specs, [Specs], Specs, Args),
 	    %% using testspec as input for test
 	    Relaxed = get_start_opt(allow_user_terms, true, false, Args),
-	    case catch ct_testspec:collect_tests_from_file(Specs1, Relaxed) of
-		{E,Reason} when E == error ; E == 'EXIT' ->
+	    try ct_testspec:collect_tests_from_file(Specs1, Relaxed) of
+                TestSpecData ->
+		    execute_all_specs(TestSpecData, Opts, Args, [])
+            catch
+                throw:{error,Reason} ->
 		    StackTrace = erlang:get_stacktrace(),
 		    {error,{invalid_testspec,{Reason,StackTrace}}};
-		TestSpecData ->
-		    execute_all_specs(TestSpecData, Opts, Args, [])
-	    end;
+                _:Reason ->
+		    StackTrace = erlang:get_stacktrace(),
+		    {error,{invalid_testspec,{Reason,StackTrace}}}
+            end;
 	[] ->
 	    {error,no_testspec_specified};
 	_ ->	    % no testspec used
@@ -1198,12 +1202,16 @@ run_spec_file(Relaxed,
 	     end,
     AbsSpecs = lists:map(fun(SF) -> ?abs(SF) end, Specs1),
     AbsSpecs1 = get_start_opt(join_specs, [AbsSpecs], AbsSpecs, StartOpts),
-    case catch ct_testspec:collect_tests_from_file(AbsSpecs1, Relaxed) of
-	{Error,CTReason} when Error == error ; Error == 'EXIT' ->
-	    StackTrace = erlang:get_stacktrace(),
-	    exit({error,{invalid_testspec,{CTReason,StackTrace}}});
+    try ct_testspec:collect_tests_from_file(AbsSpecs1, Relaxed) of
 	TestSpecData ->
 	    run_all_specs(TestSpecData, Opts, StartOpts, [])
+    catch
+	throw:{error,CTReason} ->
+	    StackTrace = erlang:get_stacktrace(),
+	    exit({error,{invalid_testspec,{CTReason,StackTrace}}});
+	_:CTReason ->
+	    StackTrace = erlang:get_stacktrace(),
+	    exit({error,{invalid_testspec,{CTReason,StackTrace}}})
     end.
 
 run_all_specs([], _, _, TotResult) ->
-- 
cgit v1.2.3