@@ -338,9 +338,11 @@ create or replace package body ut_suite_manager is
338338
339339 function get_schema_suites(a_schema_name in varchar2) return tt_schema_suits is
340340 begin
341- if not g_schema_suites.exists(a_schema_name) then
342- config_schema(a_schema_name);
343- end if;
341+ -- Currently cache invalidation on DDL is not implemented so schema is rescaned each time
342+ --if not g_schema_suites.exists(a_schema_name) then
343+ -- config_schema(a_schema_name);
344+ --end if;
345+ config_schema(a_schema_name);
344346
345347 return g_schema_suites(a_schema_name);
346348 end get_schema_suites;
@@ -360,19 +362,17 @@ create or replace package body ut_suite_manager is
360362 end loop;
361363 end if;
362364 end validate_paths;
363-
364- procedure run (a_paths in ut_varchar2_list, a_reporter in ut_reporter ) is
365+
366+ procedure configure_execution_by_path (a_paths in ut_varchar2_list, a_objects_to_run out nocopy ut_objects_list ) is
365367 l_paths ut_varchar2_list;
366368 l_path varchar2(32767);
367369 l_schema varchar2(4000);
368- l_objects_to_run ut_objects_list := ut_objects_list();
369370 l_schema_suites tt_schema_suits;
370371 l_index varchar2(4000 char);
371372 l_suite ut_test_suite;
372373 l_suite_path varchar2(4000);
373374 l_root_suite_name varchar2(4000);
374- l_reporter ut_reporter := a_reporter;
375-
375+
376376 function clean_paths(a_paths ut_varchar2_list) return ut_varchar2_list is
377377 l_paths ut_varchar2_list := ut_varchar2_list();
378378 begin
@@ -383,8 +383,8 @@ create or replace package body ut_suite_manager is
383383 l_paths := set(l_paths);
384384 return l_paths;
385385 end clean_paths;
386-
387- procedure set_skipped_flag (a_suite in out nocopy ut_test_object, a_path varchar2) is
386+
387+ procedure skip_by_path (a_suite in out nocopy ut_test_object, a_path varchar2) is
388388 l_root constant varchar2(32767) := regexp_substr(a_path, '\w+');
389389 l_rest_path constant varchar2(32767) := regexp_substr(a_path, '\.(.+)', subexpression => 1);
390390 l_item ut_test_object;
@@ -404,7 +404,7 @@ create or replace package body ut_suite_manager is
404404 --l_object_name := regexp_substr(l_object_name,'\w+$'); -- temporary fix. seems like suite have suitepath in object_name
405405 if regexp_like(l_object_name, l_root, modifier => 'i') then
406406
407- set_skipped_flag (l_item, l_rest_path);
407+ skip_by_path (l_item, l_rest_path);
408408 l_items.extend;
409409 l_items(l_items.count) := l_item;
410410
@@ -418,12 +418,14 @@ create or replace package body ut_suite_manager is
418418 raise_application_error(-20203, 'Suite note found');
419419 end if;
420420 end if;
421- end set_skipped_flag;
421+ end skip_by_path;
422+
422423 begin
423424 l_paths := clean_paths(a_paths);
424425
425426 validate_paths(l_paths);
426-
427+ a_objects_to_run := ut_objects_list();
428+
427429 -- current implementation operates only on a single path
428430 -- to be improved later
429431 for i in 1 .. l_paths.count loop
@@ -436,8 +438,8 @@ create or replace package body ut_suite_manager is
436438 -- run whole schema
437439 l_index := l_schema_suites.first;
438440 while l_index is not null loop
439- l_objects_to_run .extend;
440- l_objects_to_run(l_objects_to_run .count) := l_schema_suites(l_index);
441+ a_objects_to_run .extend;
442+ a_objects_to_run(a_objects_to_run .count) := l_schema_suites(l_index);
441443 l_index := l_schema_suites.next(l_index);
442444 end loop;
443445 else
@@ -464,24 +466,31 @@ create or replace package body ut_suite_manager is
464466
465467 l_suite := l_schema_suites(l_root_suite_name);
466468
467- set_skipped_flag (l_suite, regexp_substr(l_suite_path, '\.(.+)', subexpression => 1));
469+ skip_by_path (l_suite, regexp_substr(l_suite_path, '\.(.+)', subexpression => 1));
468470
469- l_objects_to_run .extend;
470- l_objects_to_run(l_objects_to_run .count) := l_suite;
471+ a_objects_to_run .extend;
472+ a_objects_to_run(a_objects_to_run .count) := l_suite;
471473
472474 end if;
473475
474476 end loop;
477+ end configure_execution_by_path;
478+
479+ procedure run(a_paths in ut_varchar2_list, a_reporter in ut_reporter) is
480+ l_objects_to_run ut_objects_list;
481+ l_reporter ut_reporter := a_reporter;
482+ ut_running_suite ut_test_suite;
483+ begin
484+ configure_execution_by_path(a_paths,l_objects_to_run);
475485
476486 if l_objects_to_run.count > 0 then
477487 l_reporter.before_run(a_suites => l_objects_to_run);
478488 for i in 1 .. l_objects_to_run.count loop
479- declare
480- ut_running_suite ut_test_suite := treat(l_objects_to_run(i) as ut_test_suite);
481- begin
482- ut_running_suite.do_execute(l_reporter);
483- l_objects_to_run(i) := ut_running_suite;
484- end;
489+
490+ ut_running_suite := treat(l_objects_to_run(i) as ut_test_suite);
491+ ut_running_suite.do_execute(l_reporter);
492+ l_objects_to_run(i) := ut_running_suite;
493+
485494 end loop;
486495 l_reporter.after_run(a_suites => l_objects_to_run);
487496 end if;
0 commit comments