4.7 KiB
4.7 KiB
PLJSON_UT
Package Specification
package pljson_ut as
/*
*
* E.I.Sarmas (github.com/dsnz) 2017-07-22
*
* Simple unit test framework for pljson
*
*/
suite_id number;
suite_name varchar2(100);
file_name varchar2(100);
pass_count number;
fail_count number;
total_count number;
case_name varchar2(100);
case_pass number;
case_fail number;
case_total number;
INDENT_1 varchar2(10) := ' ';
INDENT_2 varchar2(10) := ' ';
procedure testsuite(suite_name_ varchar2, file_name_ varchar2);
procedure testcase(case_name_ varchar2);
procedure pass(test_name varchar2 := null);
procedure fail(test_name varchar2 := null);
procedure assertTrue(b boolean, test_name varchar2 := null);
procedure assertFalse(b boolean, test_name varchar2 := null);
procedure testsuite_report;
procedure startup;
procedure shutdown;
end pljson_ut;```
## Package Body
```sql
package body pljson_ut as
/*
*
* E.I.Sarmas (github.com/dsnz) 2017-07-22
*
* Simple unit test framework for pljson
*
*/
procedure testsuite(suite_name_ varchar2, file_name_ varchar2) is
begin
suite_id := suite_id + 1;
suite_name := suite_name_;
file_name := file_name_;
pass_count := 0;
fail_count := 0;
total_count := 0;
dbms_output.put_line(suite_name_);
end;
procedure testcase(case_name_ varchar2) is
begin
case_name := case_name_;
case_pass := 0;
case_fail := 0;
case_total := 0;
dbms_output.put_line(INDENT_1 || case_name_);
end;
procedure pass(test_name varchar2 := null) is
begin
if (case_total = 0) then
pass_count := pass_count + 1;
total_count := total_count + 1;
end if;
case_pass := case_pass + 1;
case_total := case_total + 1;
if (test_name is not null) then
dbms_output.put_line(INDENT_2 || 'OK: '|| test_name);
end if;
end;
procedure fail(test_name varchar2 := null) is
begin
if (case_fail = 0) then
fail_count := fail_count + 1;
if (case_total = 0) then
total_count := total_count + 1;
else
pass_count := pass_count - 1;
end if;
end if;
case_fail := case_fail + 1;
case_total := case_total + 1;
if (test_name is not null) then
dbms_output.put_line(INDENT_2 || 'FAILED: '|| test_name);
end if;
end;
procedure assertTrue(b boolean, test_name varchar2 := null) is
begin
if (b) then
pass(test_name);
else
fail(test_name);
end if;
end;
procedure assertFalse(b boolean, test_name varchar2 := null) is
begin
if (not b) then
pass(test_name);
else
fail(test_name);
end if;
end;
procedure testsuite_report is
begin
dbms_output.put_line('');
dbms_output.put_line(
total_count || ' tests, '
|| pass_count || ' passed, '
|| fail_count || ' failed'
);
execute immediate 'insert into pljson_testsuite values (:1, :2, :3, :4, :5, :6)'
using suite_id, suite_name, file_name, pass_count, fail_count, total_count;
end;
procedure startup is
begin
suite_id := 0;
execute immediate 'truncate table pljson_testsuite';
end;
procedure shutdown is
begin
commit;
dbms_output.put_line('');
for rec in (
select suite_id, suite_name, passed, failed, total, file_name
from (
select 3 s, suite_id,
lpad(suite_name, 30) suite_name,
to_char(passed, '999999') passed,
to_char(failed, '999999') failed,
to_char(total, '999999') total,
lpad(file_name, 30) file_name
from pljson_testsuite
union
select 1 s, 0 suite_id,
lpad('SUITE_NAME', 30) suite_name,
lpad('PASSED', 7) passed,
lpad('FAILED', 7) failed,
lpad('TOTAL', 7) total,
lpad('FILE_NAME', 30) file_name
from dual
union
select 5 s, 0,
lpad('ALL TESTS', 30) suite_name,
to_char(sum(passed), '999999') passed,
to_char(sum(failed), '999999') failed,
to_char(sum(total), '999999') total,
lpad(' ', 30) file_name
from pljson_testsuite
union
select 2 s, 0 suite_id,
lpad('-', 30, '-') suite_name,
lpad('-', 7, '-') passed,
lpad('-', 7, '-') failed,
lpad('-', 7, '-') total,
lpad('-', 30, '-') file_name
from dual
union
select 4 s, 0 suite_id,
lpad('-', 30, '-') suite_name,
lpad('-', 7, '-') passed,
lpad('-', 7, '-') failed,
lpad('-', 7, '-') total,
lpad('-', 30, '-') file_name
from dual
order by s, suite_id
)
)
loop
dbms_output.put_line(
rec.suite_name||' '||rec.passed||' '||rec.failed||' '||rec.total||' '||rec.file_name
);
end loop;
end;
end pljson_ut;```