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

Skip to content

Commit fb51b31

Browse files
committed
Changed return data-type of version_compatibility_check, added throwing exception on version check, added tests for throwing exception.
1 parent 3b7c40c commit fb51b31

8 files changed

Lines changed: 70 additions & 46 deletions

File tree

source/api/ut_runner.pkb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ create or replace package body ut_runner is
4343
return ut_utils.gc_version;
4444
end;
4545

46-
function version_compatibility_check( a_requested varchar2, a_current varchar2 := null ) return boolean is
46+
function version_compatibility_check( a_requested varchar2, a_current varchar2 := null ) return integer is
4747
l_result boolean := false;
4848
l_requested ut_utils.t_version := ut_utils.to_version(a_requested);
4949
l_current ut_utils.t_version := ut_utils.to_version(coalesce(a_current,version()));
@@ -53,7 +53,7 @@ create or replace package body ut_runner is
5353
or l_requested.minor = l_current.minor and l_requested.bugfix <= l_current.bugfix) then
5454
l_result := true;
5555
end if;
56-
return l_result;
56+
return ut_utils.boolean_to_int(l_result);
5757
end;
5858

5959
procedure run(

source/api/ut_runner.pks

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@ create or replace package ut_runner authid current_user is
2222
/**
2323
* Check if version is compatible with another version (by default the current framework version)
2424
* Version is compatible if:
25-
* a_current.major = a_requested.major
26-
* a_requested.minor < a_current.minor or a_requested.minor = a_current.minor and a_requested.bugfix <= a_current.bugfix
25+
* a_current.major = a_requested.major
26+
* a_requested.minor < a_current.minor or a_requested.minor = a_current.minor and a_requested.bugfix <= a_current.bugfix
27+
*
28+
* @param a_requested requested utPLSQL version string
29+
* @param a_current current utPLSQL version string, if null is passed, defaults to current framework version
30+
* @return 1/0 1-true, 0-false
31+
* @exception 20010 if passed version string is not matching version pattern
2732
*/
28-
function version_compatibility_check( a_requested varchar2, a_current varchar2 := null ) return boolean;
33+
function version_compatibility_check( a_requested varchar2, a_current varchar2 := null ) return integer;
2934

3035
/**
3136
* Run suites/tests by path

source/core/ut_utils.pkb

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -384,16 +384,18 @@ create or replace package body ut_utils is
384384
commit;
385385
end;
386386

387-
function to_version(p_version_no varchar2) return t_version is
387+
function to_version(a_version_no varchar2) return t_version is
388388
l_result t_version;
389389
c_version_part_regex varchar2(20) := '[0-9]+';
390390
begin
391391

392-
if regexp_like(p_version_no,'v?([0-9]+(\.|$)){3,4}') then
393-
l_result.major := regexp_substr(p_version_no, c_version_part_regex, 1, 1);
394-
l_result.minor := regexp_substr(p_version_no, c_version_part_regex, 1, 2);
395-
l_result.bugfix := regexp_substr(p_version_no, c_version_part_regex, 1, 3);
396-
l_result.build := regexp_substr(p_version_no, c_version_part_regex, 1, 4);
392+
if regexp_like(a_version_no,'v?([0-9]+(\.|$)){1,4}') then
393+
l_result.major := regexp_substr(a_version_no, c_version_part_regex, 1, 1);
394+
l_result.minor := regexp_substr(a_version_no, c_version_part_regex, 1, 2);
395+
l_result.bugfix := regexp_substr(a_version_no, c_version_part_regex, 1, 3);
396+
l_result.build := regexp_substr(a_version_no, c_version_part_regex, 1, 4);
397+
else
398+
raise_application_error(gc_invalid_version_no, 'Version string "'||a_version_no||'" is not a valid version');
397399
end if;
398400
return l_result;
399401
end;

source/core/ut_utils.pks

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ create or replace package ut_utils authid definer is
8585
gc_some_tests_failed constant pls_integer := -20213;
8686
pragma exception_init(ex_some_tests_failed, -20213);
8787

88+
-- Any of tests failed
89+
ex_invalid_version_no exception;
90+
gc_invalid_version_no constant pls_integer := -20214;
91+
pragma exception_init(ex_invalid_version_no, -20214);
8892

8993
gc_max_storage_varchar2_len constant integer := 4000;
9094
gc_max_output_string_length constant integer := 4000;
@@ -247,10 +251,11 @@ create or replace package ut_utils authid definer is
247251
/**
248252
* Converts version string into version record
249253
*
250-
* @param p_version_no - string representation of version in format vX.X.X.X where X is a positive integer
251-
* @return t_version record with up to four positive numbers containing version
254+
* @param a_version_no string representation of version in format vX.X.X.X where X is a positive integer
255+
* @return t_version record with up to four positive numbers containing version
256+
* @throws 20010 if passed version string is not matching version pattern
252257
*/
253-
function to_version(p_version_no varchar2) return t_version;
258+
function to_version(a_version_no varchar2) return t_version;
254259

255260
end ut_utils;
256261
/

test/ut_runner/test_ut_runner.pkb

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,43 @@ create or replace package body test_ut_runner is
22

33
procedure version_comp_check_compare is
44
begin
5-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.0.0.0') ).to_be_true;
6-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.0.123.0') ).to_be_true;
7-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.123.0.0') ).to_be_true;
8-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.13.31.0') ).to_be_true;
9-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.1.0','v3.0.0.0') ).to_be_false;
10-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.1.0.0','v3.0.0.0') ).to_be_false;
11-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v2.0.0.0') ).to_be_false;
12-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v4.0.0.0') ).to_be_false;
5+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.0.0.0') ).to_equal(1);
6+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.0.123.0') ).to_equal(1);
7+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.123.0.0') ).to_equal(1);
8+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.13.31.0') ).to_equal(1);
9+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.1.0','v3.0.0.0') ).to_equal(0);
10+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.1.0.0','v3.0.0.0') ).to_equal(0);
11+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v2.0.0.0') ).to_equal(0);
12+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v4.0.0.0') ).to_equal(0);
1313
end;
14+
1415
procedure version_comp_check_ignore is
1516
begin
16-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.123','v3.0.0.0') ).to_be_true;
17-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.0.0.123') ).to_be_true;
18-
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0','v3.0.0.0') ).to_be_true;
17+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.123','v3.0.0.0') ).to_equal(1);
18+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0.0','v3.0.0.123') ).to_equal(1);
19+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0','v3.0.0.0') ).to_equal(1);
20+
end;
21+
22+
procedure version_comp_check_short is
23+
begin
24+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0.0','v3.0.0.0') ).to_equal(1);
25+
ut.expect( ut3.ut_runner.version_compatibility_check('v3.0','v3.0.123.0') ).to_equal(1);
26+
ut.expect( ut3.ut_runner.version_compatibility_check('v3','v3.123.0.0') ).to_equal(1);
27+
end;
28+
29+
procedure version_comp_check_exception is
30+
procedure throws(a_requested varchar2, a_current varchar2) is
31+
l_compatible integer;
32+
begin
33+
l_compatible := ut3.ut_runner.version_compatibility_check(a_requested,a_current);
34+
ut.fail('Expected exception but nothing was raised');
35+
exception
36+
when others then
37+
ut.expect(sqlcode).to_equal(-20214);
38+
end;
39+
begin
40+
throws('bad_ver','v3.0.0.0');
41+
throws('v3.0.0.0','bad_ver');
1942
end;
2043

2144
end;

test/ut_runner/test_ut_runner.pks

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,20 @@ create or replace package test_ut_runner is
33
--%suite(ut_runner)
44
--%suitepath(utplsql.core)
55

6-
--%test(version_compatibility_check compares major minor bigfix number)
6+
--%test(version_compatibility_check compares major, minor and bugfix number)
77
procedure version_comp_check_compare;
88

99
--%test(version_compatibility_check ignores build number)
1010
procedure version_comp_check_ignore;
1111

12+
--%test(version_compatibility_check compares short version to a full version)
13+
procedure version_comp_check_short;
14+
15+
--%test(version_compatibility_check raises exception when invalid version passed)
16+
procedure version_comp_check_exception;
17+
18+
--%test(version_compatibility_check raises exception when invalid version passed)
19+
procedure version_comp_check_exception;
20+
1221
end;
1322
/

test/ut_utils/test_ut_utils.pkb

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -283,23 +283,6 @@ end;';
283283
ut.expect(l_result(1)).to_equal(l_expected(1));
284284
end;
285285

286-
procedure test_to_version is
287-
l_actual ut3.ut_utils.t_version;
288-
begin
289-
l_actual := ut3.ut_utils.to_version(ut3.ut_utils.gc_version);
290-
if ut3.ut_utils.gc_version != 'X.X.X.X' then
291-
ut.expect(l_actual.major).to_be_not_null;
292-
ut.expect(l_actual.minor).to_be_not_null;
293-
ut.expect(l_actual.bugfix).to_be_not_null;
294-
ut.expect(l_actual.build).to_be_not_null;
295-
else
296-
ut.expect(l_actual.major).to_be_null;
297-
ut.expect(l_actual.minor).to_be_null;
298-
ut.expect(l_actual.bugfix).to_be_null;
299-
ut.expect(l_actual.build).to_be_null;
300-
end if;
301-
end;
302-
303286
procedure test_to_version_split is
304287
l_version ut3.ut_utils.t_version;
305288
begin

test/ut_utils/test_ut_utils.pks

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,6 @@ create or replace package test_ut_utils is
5353
--%disabled(We cannot run this test successfully on 12.1 until we change NLSCHARACTERSET from US7ASCII to AL32UTF8)
5454
procedure test_clob_to_table_multibyte;
5555

56-
--%test(to_version uses framework version by default)
57-
procedure test_to_version;
58-
5956
--%test(to_version splits version string into individual version components)
6057
procedure test_to_version_split;
6158

0 commit comments

Comments
 (0)