Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 73669eb

Browse files
Fixed issues with nested runs
Introduced a stack of suspended event managers to support tested test runs.
1 parent 576b8ea commit 73669eb

1 file changed

Lines changed: 32 additions & 2 deletions

File tree

source/core/events/ut_event_manager.pkb

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,42 @@ create or replace package body ut_event_manager as
2121
type t_listener_numbers is table of boolean index by t_listener_number;
2222
type t_events_listeners is table of t_listener_numbers index by t_event_name;
2323

24-
g_event_listeners_index t_events_listeners;
25-
g_listeners t_listeners;
24+
type t_event_manager is record (
25+
event_listener_index t_events_listeners,
26+
listeners t_listeners
27+
);
28+
type t_event_managers is table of t_event_manager;
29+
30+
g_event_listeners_index t_events_listeners;
31+
g_listeners t_listeners;
32+
g_suspended_event_managers t_event_managers;
2633

2734
procedure initialize is
2835
begin
36+
if g_listeners is not null and g_listeners.count > 0 then
37+
if g_suspended_event_managers is null then
38+
g_suspended_event_managers := t_event_managers();
39+
end if;
40+
g_suspended_event_managers.extend;
41+
g_suspended_event_managers(g_suspended_event_managers.count).event_listener_index := g_event_listeners_index;
42+
g_suspended_event_managers(g_suspended_event_managers.count).listeners := g_listeners;
43+
end if;
2944
g_event_listeners_index.delete;
3045
g_listeners := t_listeners();
3146
end;
3247

48+
procedure dispose_listeners is
49+
begin
50+
if g_suspended_event_managers is not null and g_suspended_event_managers.count > 0 then
51+
g_event_listeners_index := g_suspended_event_managers(g_suspended_event_managers.count).event_listener_index;
52+
g_listeners := g_suspended_event_managers(g_suspended_event_managers.count).listeners;
53+
g_suspended_event_managers.trim(1);
54+
else
55+
g_event_listeners_index.delete;
56+
g_listeners := t_listeners();
57+
end if;
58+
end;
59+
3360
procedure trigger_event( a_event_name t_event_name, a_event_object ut_event_item ) is
3461
begin
3562
if a_event_name is not null and g_event_listeners_index.exists(a_event_name)
@@ -39,6 +66,9 @@ create or replace package body ut_event_manager as
3966
for listener_number in 1 .. g_event_listeners_index(a_event_name).count loop
4067
g_listeners(listener_number).on_event(a_event_name, a_event_object);
4168
end loop;
69+
if a_event_name = ut_utils.gc_finalize then
70+
dispose_listeners;
71+
end if;
4272
end if;
4373
end;
4474

0 commit comments

Comments
 (0)