From 7b3da1cb327c215e917d5e46f797a708185e75e7 Mon Sep 17 00:00:00 2001
From: Peter Andersson 
Date: Wed, 23 Nov 2016 14:56:22 +0100
Subject: Add heading option to log functions
---
 lib/common_test/src/ct.erl      | 96 ++++++++++++++++++++++++++++-------------
 lib/common_test/src/ct_logs.erl | 80 +++++++++++++++++++++-------------
 2 files changed, 115 insertions(+), 61 deletions(-)
(limited to 'lib/common_test/src')
diff --git a/lib/common_test/src/ct.erl b/lib/common_test/src/ct.erl
index f9f845e1a9..43abb91819 100644
--- a/lib/common_test/src/ct.erl
+++ b/lib/common_test/src/ct.erl
@@ -66,8 +66,8 @@
 	 reload_config/1,
 	 escape_chars/1, escape_chars/2,
 	 log/1, log/2, log/3, log/4, log/5,
-	 print/1, print/2, print/3, print/4,
-	 pal/1, pal/2, pal/3, pal/4,
+	 print/1, print/2, print/3, print/4, print/5,
+	 pal/1, pal/2, pal/3, pal/4, pal/5,
          set_verbosity/2, get_verbosity/1,
 	 capture_start/0, capture_stop/0, capture_get/0, capture_get/1,
 	 fail/1, fail/2, comment/1, comment/2, make_priv_dir/0,
@@ -592,7 +592,7 @@ log(X1,X2,X3,X4) ->
 %%%      Format = string()
 %%%      Args = list()
 %%%      Opts = [Opt]
-%%%      Opt = esc_chars | no_css
+%%%      Opt = {heading,string()} | esc_chars | no_css
 %%%
 %%% @doc Printout from a test case to the log file. 
 %%%
@@ -610,43 +610,61 @@ log(Category,Importance,Format,Args,Opts) ->
 
 %%%-----------------------------------------------------------------
 %%% @spec print(Format) -> ok
-%%% @equiv print(default,50,Format,[])
+%%% @equiv print(default,50,Format,[],[])
 print(Format) ->
-    print(default,?STD_IMPORTANCE,Format,[]).
+    print(default,?STD_IMPORTANCE,Format,[],[]).
 
 %%%-----------------------------------------------------------------
 %%% @spec print(X1,X2) -> ok
 %%%      X1 = Category | Importance | Format
 %%%      X2 = Format | Args
-%%% @equiv print(Category,Importance,Format,Args)
+%%% @equiv print(Category,Importance,Format,Args,[])
 print(X1,X2) ->
     {Category,Importance,Format,Args} = 
 	if is_atom(X1)    -> {X1,?STD_IMPORTANCE,X2,[]};
 	   is_integer(X1) -> {default,X1,X2,[]};
 	   is_list(X1)    -> {default,?STD_IMPORTANCE,X1,X2}
 	end,
-    print(Category,Importance,Format,Args).
+    print(Category,Importance,Format,Args,[]).
 
 %%%-----------------------------------------------------------------
 %%% @spec print(X1,X2,X3) -> ok
+%%%      X1 = Category | Importance | Format
+%%%      X2 = Importance | Format | Args
+%%%      X3 = Format | Args | Opts
+%%% @equiv print(Category,Importance,Format,Args,Opts)
+print(X1,X2,X3) ->
+    {Category,Importance,Format,Args,Opts} = 
+	if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[],[]};
+	   is_atom(X1), is_list(X2)    -> {X1,?STD_IMPORTANCE,X2,X3,[]};
+	   is_integer(X1)              -> {default,X1,X2,X3,[]};
+	   is_list(X1), is_list(X2)    -> {default,?STD_IMPORTANCE,X1,X2,X3}
+	end,
+    print(Category,Importance,Format,Args,Opts).
+
+%%%-----------------------------------------------------------------
+%%% @spec print(X1,X2,X3,X4) -> ok
 %%%      X1 = Category | Importance
 %%%      X2 = Importance | Format
 %%%      X3 = Format | Args
-%%% @equiv print(Category,Importance,Format,Args)
-print(X1,X2,X3) ->
-    {Category,Importance,Format,Args} = 
-	if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[]};
-	   is_atom(X1), is_list(X2)    -> {X1,?STD_IMPORTANCE,X2,X3};
-	   is_integer(X1)              -> {default,X1,X2,X3}
+%%%      X4 = Args | Opts
+%%% @equiv print(Category,Importance,Format,Args,Opts)
+print(X1,X2,X3,X4) ->
+    {Category,Importance,Format,Args,Opts} = 
+	if is_atom(X1), is_integer(X2) -> {X1,X2,X3,X4,[]};
+	   is_atom(X1), is_list(X2)    -> {X1,?STD_IMPORTANCE,X2,X3,X4};
+	   is_integer(X1)              -> {default,X1,X2,X3,X4}
 	end,
-    print(Category,Importance,Format,Args).
+    print(Category,Importance,Format,Args,Opts).
 
 %%%-----------------------------------------------------------------
-%%% @spec print(Category,Importance,Format,Args) -> ok
+%%% @spec print(Category,Importance,Format,Args,Opts) -> ok
 %%%      Category = atom()
 %%%      Importance = integer()
 %%%      Format = string()
 %%%      Args = list()
+%%%      Opts = [Opt]
+%%%      Opt = {heading,string()}
 %%%
 %%% @doc Printout from a test case to the console. 
 %%%
@@ -658,13 +676,13 @@ print(X1,X2,X3) ->
 %%% and default value for Args is [].
 %%% Please see the User's Guide for details on Category
 %%% and Importance.
-print(Category,Importance,Format,Args) ->
-    ct_logs:tc_print(Category,Importance,Format,Args).
+print(Category,Importance,Format,Args,Opts) ->
+    ct_logs:tc_print(Category,Importance,Format,Args,Opts).
 
 
 %%%-----------------------------------------------------------------
 %%% @spec pal(Format) -> ok
-%%% @equiv pal(default,50,Format,[])
+%%% @equiv pal(default,50,Format,[],[])
 pal(Format) ->
     pal(default,?STD_IMPORTANCE,Format,[]).
 
@@ -672,35 +690,53 @@ pal(Format) ->
 %%% @spec pal(X1,X2) -> ok
 %%%      X1 = Category | Importance | Format
 %%%      X2 = Format | Args
-%%% @equiv pal(Category,Importance,Format,Args)
+%%% @equiv pal(Category,Importance,Format,Args,[])
 pal(X1,X2) ->
     {Category,Importance,Format,Args} = 
 	if is_atom(X1)    -> {X1,?STD_IMPORTANCE,X2,[]};
 	   is_integer(X1) -> {default,X1,X2,[]};
 	   is_list(X1)    -> {default,?STD_IMPORTANCE,X1,X2}
 	end,
-    pal(Category,Importance,Format,Args).
+    pal(Category,Importance,Format,Args,[]).
 
 %%%-----------------------------------------------------------------
 %%% @spec pal(X1,X2,X3) -> ok
+%%%      X1 = Category | Importance | Format
+%%%      X2 = Importance | Format | Args
+%%%      X3 = Format | Args | Opts
+%%% @equiv pal(Category,Importance,Format,Args,Opts)
+pal(X1,X2,X3) ->
+    {Category,Importance,Format,Args,Opts} = 
+	if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[],[]};
+	   is_atom(X1), is_list(X2)    -> {X1,?STD_IMPORTANCE,X2,X3,[]};
+	   is_integer(X1)              -> {default,X1,X2,X3,[]};
+	   is_list(X1), is_list(X2)    -> {default,?STD_IMPORTANCE,X1,X2,X3}
+	end,
+    pal(Category,Importance,Format,Args,Opts).
+
+%%%-----------------------------------------------------------------
+%%% @spec pal(X1,X2,X3,X4) -> ok
 %%%      X1 = Category | Importance
 %%%      X2 = Importance | Format
 %%%      X3 = Format | Args
-%%% @equiv pal(Category,Importance,Format,Args)
-pal(X1,X2,X3) ->
-    {Category,Importance,Format,Args} = 
-	if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[]};
-	   is_atom(X1), is_list(X2)    -> {X1,?STD_IMPORTANCE,X2,X3};
-	   is_integer(X1)              -> {default,X1,X2,X3}
+%%%      X4 = Args | Opts
+%%% @equiv pal(Category,Importance,Format,Args,Opts)
+pal(X1,X2,X3,X4) ->
+    {Category,Importance,Format,Args,Opts} = 
+	if is_atom(X1), is_integer(X2) -> {X1,X2,X3,X4,[]};
+	   is_atom(X1), is_list(X2)    -> {X1,?STD_IMPORTANCE,X2,X3,X4};
+	   is_integer(X1)              -> {default,X1,X2,X3,X4}
 	end,
-    pal(Category,Importance,Format,Args).
+    pal(Category,Importance,Format,Args,Opts).
 
 %%%-----------------------------------------------------------------
-%%% @spec pal(Category,Importance,Format,Args) -> ok
+%%% @spec pal(Category,Importance,Format,Args,Opts) -> ok
 %%%      Category = atom()
 %%%      Importance = integer()
 %%%      Format = string()
 %%%      Args = list()
+%%%      Opts = [Opt]
+%%%      Opt = {heading,string()} | no_css
 %%%
 %%% @doc Print and log from a test case. 
 %%%
@@ -712,8 +748,8 @@ pal(X1,X2,X3) ->
 %%% and default value for Args is [].
 %%% Please see the User's Guide for details on Category
 %%% and Importance.
-pal(Category,Importance,Format,Args) ->
-    ct_logs:tc_pal(Category,Importance,Format,Args).
+pal(Category,Importance,Format,Args,Opts) ->
+    ct_logs:tc_pal(Category,Importance,Format,Args,Opts).
 
 %%%-----------------------------------------------------------------
 %%% @spec set_verbosity(Category, Level) -> ok
diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl
index 0daed60dba..09ad709da5 100644
--- a/lib/common_test/src/ct_logs.erl
+++ b/lib/common_test/src/ct_logs.erl
@@ -45,8 +45,8 @@
 %% Logging stuff directly from testcase
 -export([tc_log/3, tc_log/4, tc_log/5, tc_log/6,
 	 tc_log_async/3, tc_log_async/5,
-	 tc_print/3, tc_print/4,
-	 tc_pal/3, tc_pal/4, ct_log/3,
+	 tc_print/3, tc_print/4, tc_print/5,
+	 tc_pal/3, tc_pal/4, tc_pal/5, ct_log/3,
 	 basic_html/0]).
 
 %% Simulate logger process for use without ct environment running
@@ -447,10 +447,10 @@ tc_log(Category,Importance,Format,Args,Opts) ->
     tc_log(Category,Importance,"User",Format,Args,Opts).
 
 %%%-----------------------------------------------------------------
-%%% @spec tc_log(Category,Importance,Printer,Format,Args,Opts) -> ok
+%%% @spec tc_log(Category,Importance,Heading,Format,Args,Opts) -> ok
 %%%      Category = atom()
 %%%      Importance = integer()
-%%%      Printer = string()
+%%%      Heading = string()
 %%%      Format = string()
 %%%      Args = list()
 %%%      Opts = list()
@@ -460,13 +460,18 @@ tc_log(Category,Importance,Format,Args,Opts) ->
 %%% This function is called by ct when logging
 %%% stuff directly from a testcase (i.e. not from within the CT
 %%% framework).
-tc_log(Category,Importance,Printer,Format,Args,Opts) ->
+tc_log(Category,Importance,Heading,Format,Args,Opts) ->
     Data = 
 	case lists:member(no_css, Opts) of
 	    true ->
 		[{Format,Args}];
 	    false ->
-		[{hd,div_header(Category,Printer),[]},
+                Heading1 =
+                    case proplists:get_value(heading, Opts) of
+                        undefined -> Heading;
+                        Str       -> Str
+                    end,
+		[{hd,div_header(Category,Heading1),[]},
 		 {Format,Args},
 		 {ft,div_footer(),[]}]
 	end,
@@ -484,7 +489,7 @@ tc_log_async(Category,Format,Args) ->
 %%% @spec tc_log_async(Category,Importance,Format,Args) -> ok
 %%%      Category = atom()
 %%%      Importance = integer()
-%%%      Printer = string()
+%%%      Heading = string()
 %%%      Format = string()
 %%%      Args = list()
 %%%
@@ -495,31 +500,38 @@ tc_log_async(Category,Format,Args) ->
 %%% to avoid deadlocks when e.g. the hook that handles SASL printouts
 %%% prints to the test case log file at the same time test server
 %%% asks ct_logs for an html wrapper.
-tc_log_async(Category,Importance,Printer,Format,Args) ->
+tc_log_async(Category,Importance,Heading,Format,Args) ->
     cast({log,async,self(),group_leader(),Category,Importance,
-	  [{hd,div_header(Category,Printer),[]},
+	  [{hd,div_header(Category,Heading),[]},
 	   {Format,Args},
 	   {ft,div_footer(),[]}],
 	  true}),
     ok.
 %%%-----------------------------------------------------------------
 %%% @spec tc_print(Category,Format,Args)
-%%% @equiv tc_print(Category,?STD_IMPORTANCE,Format,Args)
+%%% @equiv tc_print(Category,?STD_IMPORTANCE,Format,Args,[])
 tc_print(Category,Format,Args) ->
-    tc_print(Category,?STD_IMPORTANCE,Format,Args).
+    tc_print(Category,?STD_IMPORTANCE,Format,Args,[]).
+
+%%%-----------------------------------------------------------------
+%%% @spec tc_print(Category,Importance,Format,Args)
+%%% @equiv tc_print(Category,Importance,Format,Args,[])
+tc_print(Category,Importance,Format,Args) ->
+    tc_print(Category,Importance,Format,Args,[]).
 
 %%%-----------------------------------------------------------------
-%%% @spec tc_print(Category,Importance,Format,Args) -> ok
+%%% @spec tc_print(Category,Importance,Format,Args,Opts) -> ok
 %%%      Category = atom()
 %%%      Importance = integer()
 %%%      Format = string()
 %%%      Args = list()
+%%%      Opts = list()
 %%%
 %%% @doc Console printout from a testcase. 
 %%%
 %%% This function is called by ct when printing
 %%% stuff from a testcase on the user console.
-tc_print(Category,Importance,Format,Args) ->
+tc_print(Category,Importance,Format,Args,Opts) ->
     VLvl = case ct_util:get_verbosity(Category) of
 	       undefined -> 
 		   ct_util:get_verbosity('$unspecified');
@@ -531,7 +543,12 @@ tc_print(Category,Importance,Format,Args) ->
 		   Val
 	   end,
     if Importance >= (100-VLvl) ->
-            Str = lists:concat([get_heading(Category),Format,"\n\n"]),
+            Heading =
+                case proplists:get_value(heading, Opts) of
+                    undefined -> atom_to_list(Category);
+                    Hd        -> Hd
+                end,
+            Str = lists:concat([get_header(Heading),Format,"\n\n"]),
             try
                 io:format(?def_gl, Str, Args)
             catch
@@ -543,43 +560,44 @@ tc_print(Category,Importance,Format,Args) ->
 	    ok
     end.
 
-get_heading(default) ->
+get_header("default") ->
     io_lib:format("\n-----------------------------"
 		  "-----------------------\n~s\n",
 		  [log_timestamp(?now)]);
-get_heading(Category) ->
+get_header(Heading) ->
     io_lib:format("\n-----------------------------"
-		  "-----------------------\n~s  ~w\n",
-		  [log_timestamp(?now),Category]).    
+		  "-----------------------\n~s ~s\n",
+		  [Heading,log_timestamp(?now)]).    
     
 
 %%%-----------------------------------------------------------------
 %%% @spec tc_pal(Category,Format,Args) -> ok
-%%% @equiv tc_pal(Category,?STD_IMPORTANCE,Format,Args) -> ok
+%%% @equiv tc_pal(Category,?STD_IMPORTANCE,Format,Args,[]) -> ok
 tc_pal(Category,Format,Args) ->
-    tc_pal(Category,?STD_IMPORTANCE,Format,Args).
+    tc_pal(Category,?STD_IMPORTANCE,Format,Args,[]).
 
 %%%-----------------------------------------------------------------
 %%% @spec tc_pal(Category,Importance,Format,Args) -> ok
+%%% @equiv tc_pal(Category,Importance,Format,Args,[]) -> ok
+tc_pal(Category,Importance,Format,Args) ->
+    tc_pal(Category,Importance,Format,Args,[]).
+
+%%%-----------------------------------------------------------------
+%%% @spec tc_pal(Category,Importance,Format,Args,Opts) -> ok
 %%%      Category = atom()
 %%%      Importance = integer()
 %%%      Format = string()
 %%%      Args = list()
+%%%      Opts = list()
 %%%
 %%% @doc Print and log from a testcase. 
 %%%
 %%% This function is called by ct when logging
 %%% stuff directly from a testcase. The info is written both in the
 %%% log and on the console.
-tc_pal(Category,Importance,Format,Args) ->
-    tc_print(Category,Importance,Format,Args),
-    cast({log,sync,self(),group_leader(),Category,Importance,
-	  [{hd,div_header(Category),[]},
-	   {Format,Args},
-	   {ft,div_footer(),[]}],
-	  true}),
-    ok.
-
+tc_pal(Category,Importance,Format,Args,Opts) ->
+    tc_print(Category,Importance,Format,Args,Opts),
+    tc_log(Category,Importance,"User",Format,Args,[esc_chars|Opts]).
 
 %%%-----------------------------------------------------------------
 %%% @spec ct_log(Category,Format,Args) -> ok
@@ -608,9 +626,9 @@ int_footer() ->
 
 div_header(Class) ->
     div_header(Class,"User").
-div_header(Class,Printer) ->
+div_header(Class,Heading) ->
     "\n\n*** "
-	++ Printer ++ " " ++ log_timestamp(?now) ++ " ***".
+	++ Heading ++ " " ++ log_timestamp(?now) ++ " ***".
 div_footer() ->
     " \n".
 
-- 
cgit v1.2.3