1+ create or replace type body ut_session_info as
2+ /*
3+ utPLSQL - Version 3
4+ Copyright 2016 - 2019 utPLSQL Project
5+
6+ Licensed under the Apache License, Version 2.0 (the "License"):
7+ you may not use this file except in compliance with the License.
8+ You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+ */
18+
19+ constructor function ut_session_info(self in out nocopy ut_session_info) return self as result is
20+ begin
21+ self.self_type := $$plsql_unit;
22+ dbms_application_info.read_client_info( client_info );
23+ dbms_application_info.read_module( module, action );
24+ return;
25+ end;
26+
27+ -- run hooks
28+ member procedure before_calling_run(self in out nocopy ut_session_info, a_run in ut_run) is
29+ begin
30+ ut_session_context.set_context( 'run_paths', ut_utils.to_string( ut_utils.table_to_clob( a_run.run_paths,',' ), null ) );
31+ dbms_application_info.set_module( 'utPLSQL', null );
32+ end;
33+
34+ member procedure after_calling_run(self in out nocopy ut_session_info, a_run in ut_run) is
35+ begin
36+ ut_session_context.clear_context( 'run_paths' );
37+ dbms_application_info.set_module( module, action );
38+ dbms_application_info.set_client_info( client_info );
39+ end;
40+
41+ -- suite hooks
42+ member procedure before_calling_suite(self in out nocopy ut_session_info, a_suite in ut_logical_suite) is
43+ begin
44+ if a_suite is not of (ut_suite_context) then
45+ suite_start_time := a_suite.start_time;
46+ ut_session_context.set_context( 'suite_path', a_suite.path );
47+ ut_session_context.set_context( 'suite_package', a_suite.object_owner||'.'||a_suite.object_name );
48+ ut_session_context.set_context( 'suite_description', a_suite.description );
49+ ut_session_context.set_context( 'suite_start_time', ut_utils.to_string(suite_start_time) );
50+ dbms_application_info.set_module( 'utPLSQL', a_suite.object_name );
51+ else
52+ context_start_time := a_suite.start_time;
53+ ut_session_context.set_context( 'context_name', a_suite.name );
54+ ut_session_context.set_context( 'context_path', a_suite.path);
55+ ut_session_context.set_context( 'context_description', a_suite.description );
56+ ut_session_context.set_context( 'context_start_time', ut_utils.to_string(context_start_time) );
57+ end if;
58+ end;
59+
60+ member procedure after_calling_suite(self in out nocopy ut_session_info, a_suite in ut_logical_suite) is
61+ begin
62+ if a_suite is not of (ut_suite_context) then
63+ ut_session_context.clear_context( 'suite_package' );
64+ ut_session_context.clear_context( 'suite_path' );
65+ ut_session_context.clear_context( 'suite_description' );
66+ ut_session_context.clear_context( 'suite_start_time' );
67+ ut_session_context.clear_context( 'time_in_suite' );
68+ suite_start_time := null;
69+ else
70+ ut_session_context.clear_context( 'context_name' );
71+ ut_session_context.clear_context( 'context_path' );
72+ ut_session_context.clear_context( 'context_description' );
73+ ut_session_context.clear_context( 'context_start_time' );
74+ ut_session_context.clear_context( 'time_in_context' );
75+ context_start_time := null;
76+ end if;
77+ end;
78+
79+
80+ member procedure before_calling_test(self in out nocopy ut_session_info, a_test in ut_test) is
81+ begin
82+ test_start_time := a_test.start_time;
83+ ut_session_context.set_context( 'test_name', a_test.object_owner||'.'||a_test.object_name||'.'||a_test.name );
84+ ut_session_context.set_context( 'test_description', a_test.description );
85+ ut_session_context.set_context( 'test_start_time', ut_utils.to_string(test_start_time) );
86+ end;
87+
88+ member procedure after_calling_test (self in out nocopy ut_session_info, a_test in ut_test) is
89+ begin
90+ ut_session_context.clear_context( 'test_name' );
91+ ut_session_context.clear_context( 'test_description' );
92+ ut_session_context.clear_context( 'test_start_time' );
93+ ut_session_context.clear_context( 'time_in_test' );
94+ test_start_time := null;
95+ end;
96+
97+ member procedure before_calling_executable(self in out nocopy ut_session_info, a_executable in ut_executable) is
98+ begin
99+ ut_session_context.set_context( 'current_executable_type', a_executable.executable_type );
100+ ut_session_context.set_context(
101+ 'current_executable_name',
102+ a_executable.owner_name||'.'||a_executable.object_name||'.'||a_executable.procedure_name
103+ );
104+ dbms_application_info.set_client_info( a_executable.procedure_name );
105+ if suite_start_time is not null then
106+ ut_session_context.set_context( 'time_in_suite', current_timestamp - suite_start_time );
107+ if context_start_time is not null then
108+ ut_session_context.set_context( 'time_in_context', current_timestamp - context_start_time );
109+ end if;
110+ if test_start_time is not null then
111+ ut_session_context.set_context( 'time_in_test', current_timestamp - test_start_time );
112+ end if;
113+ end if;
114+ end;
115+
116+ member procedure after_calling_executable(self in out nocopy ut_session_info, a_executable in ut_executable) is
117+ begin
118+ ut_session_context.clear_context( 'current_executable_type' );
119+ ut_session_context.clear_context( 'current_executable_name' );
120+ dbms_application_info.set_client_info( null );
121+ end;
122+
123+ member procedure on_finalize(self in out nocopy ut_session_info, a_run in ut_run) is
124+ begin
125+ dbms_application_info.set_client_info( client_info );
126+ dbms_application_info.set_module( module, action );
127+ ut_session_context.clear_all_context();
128+ end;
129+
130+ overriding member function get_supported_events return ut_varchar2_list is
131+ begin
132+ return ut_varchar2_list(
133+ ut_event_manager.gc_before_run,
134+ ut_event_manager.gc_before_suite,
135+ ut_event_manager.gc_before_test,
136+ ut_event_manager.gc_before_before_all,
137+ ut_event_manager.gc_before_before_each,
138+ ut_event_manager.gc_before_before_test,
139+ ut_event_manager.gc_before_test_execute,
140+ ut_event_manager.gc_before_after_test,
141+ ut_event_manager.gc_before_after_each,
142+ ut_event_manager.gc_before_after_all,
143+ ut_event_manager.gc_after_run,
144+ ut_event_manager.gc_after_suite,
145+ ut_event_manager.gc_after_test,
146+ ut_event_manager.gc_after_before_all,
147+ ut_event_manager.gc_after_before_each,
148+ ut_event_manager.gc_after_before_test,
149+ ut_event_manager.gc_after_test_execute,
150+ ut_event_manager.gc_after_after_test,
151+ ut_event_manager.gc_after_after_each,
152+ ut_event_manager.gc_after_after_all,
153+ ut_event_manager.gc_finalize
154+ );
155+ end;
156+
157+ overriding member procedure on_event( self in out nocopy ut_session_info, a_event_name varchar2, a_event_item ut_event_item) is
158+ begin
159+ case
160+ when a_event_name in (
161+ ut_event_manager.gc_before_before_all,
162+ ut_event_manager.gc_before_before_each,
163+ ut_event_manager.gc_before_before_test,
164+ ut_event_manager.gc_before_test_execute,
165+ ut_event_manager.gc_before_after_test,
166+ ut_event_manager.gc_before_after_each,
167+ ut_event_manager.gc_before_after_all
168+ )
169+ then before_calling_executable(treat(a_event_item as ut_executable));
170+ when a_event_name in (
171+ ut_event_manager.gc_after_before_all,
172+ ut_event_manager.gc_after_before_each,
173+ ut_event_manager.gc_after_before_test,
174+ ut_event_manager.gc_after_test_execute,
175+ ut_event_manager.gc_after_after_test,
176+ ut_event_manager.gc_after_after_each,
177+ ut_event_manager.gc_after_after_all
178+ )
179+ then after_calling_executable(treat(a_event_item as ut_executable));
180+ when a_event_name = ut_event_manager.gc_before_test
181+ then self.before_calling_test(treat(a_event_item as ut_test));
182+ when a_event_name = ut_event_manager.gc_after_test
183+ then self.after_calling_test(treat(a_event_item as ut_test));
184+ when a_event_name = ut_event_manager.gc_after_suite
185+ then after_calling_suite(treat(a_event_item as ut_logical_suite));
186+ when a_event_name = ut_event_manager.gc_before_suite
187+ then before_calling_suite(treat(a_event_item as ut_logical_suite));
188+ when a_event_name = ut_event_manager.gc_before_run
189+ then before_calling_run(treat(a_event_item as ut_run));
190+ when a_event_name = ut_event_manager.gc_after_run
191+ then after_calling_run(treat(a_event_item as ut_run));
192+ when a_event_name = ut_event_manager.gc_finalize
193+ then on_finalize(treat(a_event_item as ut_run));
194+ else null;
195+ end case;
196+ end;
197+
198+ end;
199+ /
0 commit comments