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

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e41d6f9
Interim commit with lots of dirty code - got to a place where I get t…
jgebal Oct 30, 2018
f475b7c
Added `suite_cache`.
jgebal Nov 2, 2018
4dc48e6
Interim commit - performance check on Travis.
jgebal Nov 4, 2018
1611e09
Interim commit some fixes to old tests, examples and code itself.
jgebal Nov 4, 2018
15163a8
Resolved issue with sorting of nested-tables.
jgebal Nov 4, 2018
1b14bb5
Fixing re-enabled test.
jgebal Nov 4, 2018
3bc8da5
Adding missing items to uninstall.
jgebal Nov 4, 2018
8911f97
Small improvements and cleanup.
jgebal Nov 5, 2018
a1f6b34
Removing duplicate with block.
jgebal Nov 6, 2018
59f7738
Adding cache cleanup and "intelligent" join to all_source, only when …
jgebal Nov 11, 2018
cb9cf97
Resolving some sonar violations.
jgebal Nov 11, 2018
8779025
Moving away from full outer join.
jgebal Nov 11, 2018
b3e98be
Reorganizing code a bit.
jgebal Nov 11, 2018
64dfb41
Output buffer&reporters performance improvements
jgebal Nov 12, 2018
9ea805b
Increased fetch size for coverage sources tmp seeding.
jgebal Nov 12, 2018
248bf8c
Small refactoring.
jgebal Nov 13, 2018
8fc2ea6
Further optimizations to suite parsing.
jgebal Nov 15, 2018
3543e3d
Disabled `PLSQL_OPTIMIZE_LEVEL=0` for testing
jgebal Nov 15, 2018
23c0557
Fixed formal parameter names
jgebal Nov 15, 2018
f7f6811
Revert "Disabled `PLSQL_OPTIMIZE_LEVEL=0` for testing"
jgebal Nov 15, 2018
d002d18
Refactored procedure `get_unit_test_info` to return more relevant inf…
jgebal Nov 16, 2018
e1f1eec
Renamed `get_unit_test_info` to `get_suites_info` - the latter one wa…
jgebal Nov 16, 2018
d8d251f
Improved automation of `refresh_sources.sh`
jgebal Nov 16, 2018
eb3df21
Fixing failing test.
jgebal Nov 16, 2018
d211348
Added control over rollback behavior in `ut_runner.run`
jgebal Nov 17, 2018
f342195
Reverting rollback changes - they should go as a separate PR.
jgebal Nov 17, 2018
eeae79b
Added documentation for new functionality.
jgebal Nov 17, 2018
74ec9a1
Removed unused code.
jgebal Nov 18, 2018
44d61d9
Recovering exception handlers as they are needed for handling invalid…
jgebal Nov 18, 2018
360a889
Moved some of old tests into new tests.
jgebal Nov 18, 2018
0ee3ce2
Added missing endcontext in `test_ut_test`
jgebal Nov 18, 2018
48aa338
Removed unused constants.
jgebal Nov 18, 2018
b33aaae
Added additional test for display of parser warnings.
jgebal Nov 18, 2018
e8ea644
Merge branch 'develop' into feature/suite_query_api
jgebal Nov 18, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Renamed get_unit_test_info to get_suites_info - the latter one wa…
…s not used uin prior versions.

Added functions `is_test`, `is_suite`, `has_suite` to perform checks for test/suite existance at prcedure, package, schema level.
  • Loading branch information
jgebal committed Nov 16, 2018
commit e1f1eec2024126a50168c2613bfeb9b2e989f7c1
38 changes: 37 additions & 1 deletion source/api/ut_runner.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ create or replace package body ut_runner is
ut_annotation_manager.purge_cache(a_object_owner, a_object_type);
end;

function get_unit_test_info(a_owner varchar2, a_package_name varchar2 ) return ut_suite_items_info pipelined is
function get_suites_info(a_owner varchar2, a_package_name varchar2 := null) return ut_suite_items_info pipelined is
l_cursor sys_refcursor;
l_results ut_suite_items_info;
c_bulk_limit constant integer := 10;
Expand All @@ -182,6 +182,42 @@ create or replace package body ut_runner is
return;
end;

function is_test(a_owner varchar2, a_package_name varchar2, a_procedure_name varchar2) return boolean is
l_result boolean := false;
begin
if a_owner is not null and a_package_name is not null and a_procedure_name is not null then

l_result := ut_suite_manager.suite_item_exists( a_owner, a_package_name, a_procedure_name );

end if;

return l_result;
end;

function is_suite(a_owner varchar2, a_package_name varchar2) return boolean is
l_result boolean := false;
begin
if a_owner is not null and a_package_name is not null then

l_result := ut_suite_manager.suite_item_exists( a_owner, a_package_name );

end if;

return l_result;
end;

function has_suites(a_owner varchar2) return boolean is
l_result boolean := false;
begin
if a_owner is not null then

l_result := ut_suite_manager.suite_item_exists( a_owner );

end if;

return l_result;
end;

function get_reporters_list return tt_reporters_info pipelined is
l_cursor sys_refcursor;
l_owner varchar2(128) := upper(ut_utils.ut_owner());
Expand Down
28 changes: 27 additions & 1 deletion source/api/ut_runner.pks
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,33 @@ create or replace package ut_runner authid current_user is
* @param a_package_name optional name of unit test package to retrieve, if NULLm all unit test packages are returned
* @return ut_suite_items_info table of objects
*/
function get_unit_test_info(a_owner varchar2, a_package_name varchar2) return ut_suite_items_info pipelined;
function get_suites_info(a_owner varchar2, a_package_name varchar2 := null) return ut_suite_items_info pipelined;


/**
* Returns true if given procedure is a test in a test suite, false otherwise
*
* @param a_owner owner of test package
* @param a_package_name name of test package
* @param a_procedure_name name of test procedure
*/
function is_test(a_owner varchar2, a_package_name varchar2, a_procedure_name varchar2) return boolean;

/**
* Returns true if given package is a test suite, false otherwise
*
* @param a_owner owner of test package
* @param a_package_name name of test package
*/
function is_suite(a_owner varchar2, a_package_name varchar2) return boolean;

/**
* Returns true if given schema contains test suites, false otherwise
*
* @param a_owner owner of test package
*/
function has_suites(a_owner varchar2) return boolean;


type t_reporter_rec is record (
reporter_object_name varchar2(250),
Expand Down
2 changes: 1 addition & 1 deletion source/core/ut_suite_cache_manager.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ create or replace package body ut_suite_cache_manager is
l_object_owner varchar2(250) := upper(a_object_owner);
l_object_name varchar2(250) := upper(a_object_name);
begin
if a_suite_items.count = 0 then
if a_suite_items is not null and a_suite_items.count = 0 then

delete from ut_suite_cache t
where t.object_owner = l_object_owner
Expand Down
51 changes: 50 additions & 1 deletion source/core/ut_suite_manager.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,10 @@ create or replace package body ut_suite_manager is

end configure_execution_by_path;

function get_suites_info(a_owner_name varchar2, a_package_name varchar2) return sys_refcursor is
function get_suites_info(
a_owner_name varchar2,
a_package_name varchar2 := null
) return sys_refcursor is
l_result sys_refcursor;
l_ut_owner varchar2(250) := ut_utils.ut_owner;
begin
Expand Down Expand Up @@ -750,5 +753,51 @@ create or replace package body ut_suite_manager is
return l_result;
end;

function suite_item_exists(
a_owner_name varchar2,
a_package_name varchar2 := null,
a_procedure_name varchar2 := null,
a_item_type varchar2 := null
) return boolean is
l_result integer;
l_ut_owner varchar2(250) := ut_utils.ut_owner;
begin
refresh_cache(a_owner_name);

execute immediate q'[
select count(1) from dual
where exists (
select 1
from ]'||l_ut_owner||q'[.ut_suite_cache c
where 1 = 1 ]'||case when can_skip_all_objects_scan(a_owner_name) then q'[
and exists
( select 1
from all_objects a
where a.object_name = c.object_name
and a.owner = :a_owner_name
and a.owner = c.object_owner
and a.object_type = 'PACKAGE'
)]' else q'[
and :a_owner_name is not null ]' end ||q'[
and c.object_owner = :a_owner_name
and ]'
|| case when a_package_name is not null
then 'c.object_name = :a_package_name'
else ':a_package_name is null' end
|| q'[
and ]'
|| case when a_procedure_name is not null
then 'c.name = :a_procedure_name'
else ':a_procedure_name is null' end
|| q'[
)]'
into l_result
using
upper(a_owner_name), upper(a_owner_name),
upper(a_package_name), upper(a_procedure_name);

return l_result > 0;
end;

end ut_suite_manager;
/
25 changes: 23 additions & 2 deletions source/core/ut_suite_manager.pks
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,31 @@ create or replace package ut_suite_manager authid current_user is
/**
* Returns a ref cursor containing information about unit test suites and the tests contained in them
*
* @param a_owner owner of unit tests to retrieve
* @param a_owner owner of unit tests to retrieve
* @param a_package_name name of test package (optional)
* @param a_procedure_name name of test procedure (optional)
* @return ut_suite_items_info table of objects
*/
function get_suites_info(a_owner_name varchar2, a_package_name varchar2) return sys_refcursor;
function get_suites_info(
a_owner_name varchar2,
a_package_name varchar2 := null
) return sys_refcursor;

/**
* Returns true if given suite item exists
*
* @param a_owner owner of items to retrieve
* @param a_package_name name of suite package (optional)
* @param a_procedure_name name of suite item (optional)
* @param a_item_type suite_item type (optional)
* @return ut_suite_items_info table of objects
*/
function suite_item_exists(
a_owner_name varchar2,
a_package_name varchar2 := null,
a_procedure_name varchar2 := null,
a_item_type varchar2 := null
) return boolean;


end ut_suite_manager;
Expand Down
57 changes: 55 additions & 2 deletions test/api/test_ut_runner.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ end;';
ut.expect(l_actual).to_equal(0);
end;

procedure test_get_unit_test_info is
procedure test_get_suites_info is
l_expected sys_refcursor;
l_actual sys_refcursor;
begin
Expand All @@ -284,7 +284,7 @@ end;';
'dummy_test_package.some_dummy_test_procedure' path, 0 disabled_flag
from dual;
--Act
open l_actual for select * from table(ut3.ut_runner.get_unit_test_info('UT3_TESTER','DUMMY_TEST_PACKAGE'));
open l_actual for select * from table(ut3.ut_runner.get_suites_info('UT3_TESTER','DUMMY_TEST_PACKAGE'));
--Assert
ut.expect(l_actual).to_equal(l_expected);
end;
Expand Down Expand Up @@ -534,6 +534,59 @@ end;';
ut.expect(l_actual).to_be_like('%Finished in % seconds
%2 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%');
end;

procedure is_test_true is
begin
ut.expect(
ut3.ut_runner.is_test(
a_owner => 'UT3_TESTER',
a_package_name => 'DUMMY_TEST_PACKAGE',
a_procedure_name => 'SOME_DUMMY_TEST_PROCEDURE'
)
).to_be_true();
ut.expect( ut3.ut_runner.is_test( 'ut3_tester','dummy_test_package','some_dummy_test_procedure' ) ).to_be_true();
end;

procedure is_test_false is
begin
ut.expect( ut3.ut_runner.is_test( 'UT3_TESTER','DUMMY_TEST_PACKAGE', 'BAD' ) ).to_be_false();
ut.expect( ut3.ut_runner.is_test( 'UT3_TESTER','DUMMY_TEST_PACKAGE', null ) ).to_be_false();
ut.expect( ut3.ut_runner.is_test( 'UT3_TESTER',null,'some_dummy_test_procedure' ) ).to_be_false();
ut.expect( ut3.ut_runner.is_test( null,'DUMMY_TEST_PACKAGE','some_dummy_test_procedure' ) ).to_be_false();
end;

procedure is_suite_true is
begin
ut.expect(
ut3.ut_runner.is_suite(
a_owner => 'UT3_TESTER',
a_package_name => 'DUMMY_TEST_PACKAGE'
)
).to_be_true();

ut.expect( ut3.ut_runner.is_suite( 'ut3_tester','dummy_test_package' ) ).to_be_true();
end;

procedure is_suite_false is
begin
ut.expect( ut3.ut_runner.is_suite( 'UT3_TESTER','BAD' ) ).to_be_false();
ut.expect( ut3.ut_runner.is_suite( 'UT3_TESTER', null ) ).to_be_false();
ut.expect( ut3.ut_runner.is_suite( null,'DUMMY_TEST_PACKAGE' ) ).to_be_false();
end;

procedure has_suites_true is
begin
ut.expect( ut3.ut_runner.has_suites( a_owner => 'UT3_TESTER' ) ).to_be_true();

ut.expect( ut3.ut_runner.has_suites( 'ut3_tester' ) ).to_be_true();
end;

procedure has_suites_false is
begin
ut.expect( ut3.ut_runner.has_suites( 'UT3' ) ).to_be_false();
ut.expect( ut3.ut_runner.has_suites( 'BAD' ) ).to_be_false();
ut.expect( ut3.ut_runner.has_suites( null ) ).to_be_false();
end;

end;
/
40 changes: 38 additions & 2 deletions test/api/test_ut_runner.pks
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ create or replace package test_ut_runner is
--%aftertest(cleanup_cache)
procedure test_rebuild_cache_schema_type;

--%test(get_unit_tests_info returns a cursor containing records for a newly created test)
--%test(get_suites_info returns a cursor containing records for a newly created test)
--%beforetest(setup_cache_objects)
--%aftertest(cleanup_cache)
procedure test_get_unit_test_info;
procedure test_get_suites_info;

--%test(get_reporters_list returns a cursor containing all built-in reporters and information about output-reporter)
--%beforetest(setup_cache_objects)
Expand Down Expand Up @@ -91,5 +91,41 @@ create or replace package test_ut_runner is

--%endcontext

--%context(is_test)
--%beforeall(setup_cache_objects)
--%afterall(cleanup_cache)

--%test(Returns true when procedure is a test)
procedure is_test_true;

--%test(Returns false when procedure is not a test)
procedure is_test_false;

--%endcontext

--%context(is_suite)
--%beforeall(setup_cache_objects)
--%afterall(cleanup_cache)

--%test(Returns true when package is a test suite)
procedure is_suite_true;

--%test(Returns false when package is not a test suite)
procedure is_suite_false;

--%endcontext

--%context(has_suites)
--%beforeall(setup_cache_objects)
--%afterall(cleanup_cache)

--%test(Returns true when schema contains test suites)
procedure has_suites_true;

--%test(Returns false when schema does not contain test suites)
procedure has_suites_false;

--%endcontext

end;
/