utPLSQL has been supported by Redgate in the form of sponsored stickers and t-shirts. Thank you for helping us spreading the word!
+
utPLSQL has been supported by Redgate in the form of sponsored stickers and t-shirts. Thank you for helping us spread the word!
+---
+
+[Authors](docs/about/authors.md)
diff --git a/sonar-project.properties b/sonar-project.properties
index d088e9ccb..efcaeb5e6 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -1,9 +1,9 @@
# must be unique in a given SonarQube instance
sonar.organization=utplsql
-sonar.projectKey=utPLSQL
+sonar.projectKey=utPLSQL_utPLSQL
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=utPLSQL
-sonar.projectVersion=v3.1.14-develop
+sonar.projectVersion=v3.2.01-develop
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
@@ -15,7 +15,7 @@ sonar.coverage.exclusions=**/*.sql,**/*.pks
sonar.tests=./test
sonar.testExecutionReportPaths=./test_results.xml
sonar.links.issue=https://github.com/utPLSQL/utPLSQL/issues
-sonar.links.ci=https://travis-ci.org/utPLSQL/utPLSQL
+sonar.links.ci=https://github.com/utPLSQL/utPLSQL/actions
sonar.links.homepage=https://github.com/utPLSQL/utPLSQL
sonar.projectDescription=PL/SQL Unit Testing Framework
sonar.plsql.file.suffixes=sql,tab,pkb,tpb
diff --git a/source/api/ut.pkb b/source/api/ut.pkb
index cff35b771..d61de040a 100644
--- a/source/api/ut.pkb
+++ b/source/api/ut.pkb
@@ -2,7 +2,7 @@ create or replace package body ut is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/api/ut.pks b/source/api/ut.pks
index f72c82a0c..6fd98dd9f 100644
--- a/source/api/ut.pks
+++ b/source/api/ut.pks
@@ -2,7 +2,7 @@ create or replace package ut authid current_user as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/api/ut_runner.pkb b/source/api/ut_runner.pkb
index 3ec2a5393..755683cc9 100644
--- a/source/api/ut_runner.pkb
+++ b/source/api/ut_runner.pkb
@@ -2,7 +2,7 @@ create or replace package body ut_runner is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/api/ut_runner.pks b/source/api/ut_runner.pks
index 85eff1c93..2c6bba888 100644
--- a/source/api/ut_runner.pks
+++ b/source/api/ut_runner.pks
@@ -2,7 +2,7 @@ create or replace package ut_runner authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/api/ut_suite_item_info.tpb b/source/api/ut_suite_item_info.tpb
index 3315f7a16..727707ae9 100644
--- a/source/api/ut_suite_item_info.tpb
+++ b/source/api/ut_suite_item_info.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_suite_item_info is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/api/ut_suite_item_info.tps b/source/api/ut_suite_item_info.tps
index 2c92f261d..f632b2f52 100644
--- a/source/api/ut_suite_item_info.tps
+++ b/source/api/ut_suite_item_info.tps
@@ -1,7 +1,7 @@
create or replace type ut_suite_item_info as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/api/ut_suite_items_info.tps b/source/api/ut_suite_items_info.tps
index 208098f9d..e47b350e5 100644
--- a/source/api/ut_suite_items_info.tps
+++ b/source/api/ut_suite_items_info.tps
@@ -1,7 +1,7 @@
create or replace type ut_suite_items_info as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/check_object_grants.sql b/source/check_object_grants.sql
index 5f560e6b1..0e7a9b4c9 100644
--- a/source/check_object_grants.sql
+++ b/source/check_object_grants.sql
@@ -1,3 +1,20 @@
+/*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
declare
$if dbms_db_version.version >= 18 $then
c_expected_grants constant dbmsoutput_linesarray := dbmsoutput_linesarray('DBMS_CRYPTO');
diff --git a/source/check_sys_grants.sql b/source/check_sys_grants.sql
index 79b657328..f81157183 100644
--- a/source/check_sys_grants.sql
+++ b/source/check_sys_grants.sql
@@ -1,3 +1,20 @@
+/*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
define expected_grants = "&1"
declare
c_expected_grants constant dbmsoutput_linesarray := dbmsoutput_linesarray( &expected_grants );
diff --git a/source/core/annotations/ut_annotated_object.tps b/source/core/annotations/ut_annotated_object.tps
index 3fda363fe..21f6ab330 100644
--- a/source/core/annotations/ut_annotated_object.tps
+++ b/source/core/annotations/ut_annotated_object.tps
@@ -1,7 +1,7 @@
create type ut_annotated_object as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotated_objects.tps b/source/core/annotations/ut_annotated_objects.tps
index c67c1bd53..63679b699 100644
--- a/source/core/annotations/ut_annotated_objects.tps
+++ b/source/core/annotations/ut_annotated_objects.tps
@@ -1,7 +1,7 @@
create type ut_annotated_objects as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotation.tps b/source/core/annotations/ut_annotation.tps
index 3d0311571..18747516a 100644
--- a/source/core/annotations/ut_annotation.tps
+++ b/source/core/annotations/ut_annotation.tps
@@ -1,7 +1,7 @@
create type ut_annotation as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotation_cache.sql b/source/core/annotations/ut_annotation_cache.sql
index 67149ce60..7d69b1db6 100644
--- a/source/core/annotations/ut_annotation_cache.sql
+++ b/source/core/annotations/ut_annotation_cache.sql
@@ -1,7 +1,7 @@
create table ut_annotation_cache (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/annotations/ut_annotation_cache_info.sql b/source/core/annotations/ut_annotation_cache_info.sql
index 167973a04..6248f4fbc 100644
--- a/source/core/annotations/ut_annotation_cache_info.sql
+++ b/source/core/annotations/ut_annotation_cache_info.sql
@@ -1,7 +1,7 @@
create table ut_annotation_cache_info (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/annotations/ut_annotation_cache_manager.pkb b/source/core/annotations/ut_annotation_cache_manager.pkb
index e1131b3bd..52184e17d 100644
--- a/source/core/annotations/ut_annotation_cache_manager.pkb
+++ b/source/core/annotations/ut_annotation_cache_manager.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_annotation_cache_manager as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotation_cache_manager.pks b/source/core/annotations/ut_annotation_cache_manager.pks
index 1e9734934..55d109f91 100644
--- a/source/core/annotations/ut_annotation_cache_manager.pks
+++ b/source/core/annotations/ut_annotation_cache_manager.pks
@@ -1,7 +1,7 @@
create or replace package ut_annotation_cache_manager authid definer as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotation_cache_schema.sql b/source/core/annotations/ut_annotation_cache_schema.sql
index 8889b9abf..b8ebaa40b 100644
--- a/source/core/annotations/ut_annotation_cache_schema.sql
+++ b/source/core/annotations/ut_annotation_cache_schema.sql
@@ -1,7 +1,7 @@
create table ut_annotation_cache_schema (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/annotations/ut_annotation_cache_seq.sql b/source/core/annotations/ut_annotation_cache_seq.sql
index b371b382b..f0f1f17d7 100644
--- a/source/core/annotations/ut_annotation_cache_seq.sql
+++ b/source/core/annotations/ut_annotation_cache_seq.sql
@@ -1,7 +1,7 @@
create sequence ut_annotation_cache_seq
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/annotations/ut_annotation_manager.pkb b/source/core/annotations/ut_annotation_manager.pkb
index 65f7b3e40..992af2fe0 100644
--- a/source/core/annotations/ut_annotation_manager.pkb
+++ b/source/core/annotations/ut_annotation_manager.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_annotation_manager as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -143,34 +143,37 @@ create or replace package body ut_annotation_manager as
l_parse_time date := sysdate;
pragma autonomous_transaction;
begin
- loop
- fetch a_sources_cursor bulk collect into l_names, l_lines limit c_lines_fetch_limit;
- for i in 1 .. l_names.count loop
- if l_names(i) != l_name then
- l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines, a_object_type);
- ut_annotation_cache_manager.update_cache(
- ut_annotated_object(a_object_owner, l_name, a_object_type, l_parse_time, l_annotations)
- );
- l_object_lines.delete;
- end if;
-
- l_name := l_names(i);
- l_object_lines(l_object_lines.count+1) := l_lines(i);
- end loop;
- exit when a_sources_cursor%notfound;
+ begin
+ loop
+ fetch a_sources_cursor bulk collect into l_names, l_lines limit c_lines_fetch_limit;
+ for i in 1 .. l_names.count loop
+ if l_names(i) != l_name then
+ l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines, a_object_type);
+ ut_annotation_cache_manager.update_cache(
+ ut_annotated_object(a_object_owner, l_name, a_object_type, l_parse_time, l_annotations)
+ );
+ l_object_lines.delete;
+ end if;
+
+ l_name := l_names(i);
+ l_object_lines(l_object_lines.count+1) := l_lines(i);
+ end loop;
+ exit when a_sources_cursor%notfound;
- end loop;
- if a_sources_cursor%rowcount > 0 then
- l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines, a_object_type);
- ut_annotation_cache_manager.update_cache(
- ut_annotated_object(a_object_owner, l_name, a_object_type, l_parse_time, l_annotations)
- );
- l_object_lines.delete;
+ end loop;
+ if a_sources_cursor%rowcount > 0 then
+ l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines, a_object_type);
+ ut_annotation_cache_manager.update_cache(
+ ut_annotated_object(a_object_owner, l_name, a_object_type, l_parse_time, l_annotations)
+ );
+ l_object_lines.delete;
+ end if;
+ end;
+ if a_sources_cursor%isopen then
+ close a_sources_cursor;
end if;
- close a_sources_cursor;
end;
-
procedure validate_annotation_cache(
a_object_owner varchar2,
a_object_type varchar2,
@@ -231,23 +234,24 @@ create or replace package body ut_annotation_manager as
function get_source_from_sql_text(a_object_name varchar2, a_sql_text ora_name_list_t, a_parts binary_integer) return sys_refcursor is
l_sql_clob clob;
- l_sql_lines ut_varchar2_rows := ut_varchar2_rows();
+ l_sql_lines dbms_preprocessor.source_lines_t := dbms_preprocessor.source_lines_t();
+ l_sql_lines_clob ut_varchar2_list := ut_varchar2_list();
l_result sys_refcursor;
begin
if a_parts > 0 then
for i in 1..a_parts loop
ut_utils.append_to_clob(l_sql_clob, a_sql_text(i));
end loop;
- l_sql_clob := ut_utils.replace_multiline_comments(l_sql_clob);
- -- replace comment lines that contain "-- create or replace"
- l_sql_clob := regexp_replace(l_sql_clob, '^.*[-]{2,}\s*create(\s+or\s+replace).*$', modifier => 'mi');
- -- remove the "create [or replace] [[non]editionable] " so that we have only "type|package" for parsing
- -- needed for dbms_preprocessor
- l_sql_clob := regexp_replace(l_sql_clob, '^(.*?\s*create(\s+or\s+replace)?(\s+(editionable|noneditionable))?\s+?)((package|type).*)', '\5', 1, 1, 'ni');
- -- remove "OWNER." from create or replace statement.
- -- Owner is not supported along with AUTHID - see issue https://github.com/utPLSQL/utPLSQL/issues/1088
- l_sql_clob := regexp_replace(l_sql_clob, '^(package|type)\s+("?[[:alpha:]][[:alnum:]$#_]*"?\.)(.*)', '\1 \3', 1, 1, 'ni');
- l_sql_lines := ut_utils.convert_collection( ut_utils.clob_to_table(l_sql_clob) );
+
+ l_sql_lines_clob := ut_utils.clob_to_table(l_sql_clob);
+ for i in 1..l_sql_lines_clob.count loop
+ l_sql_lines(i) := l_sql_lines_clob(i);
+ end loop;
+
+ -- replace multiline comments that contain "-- create or replace" with single line comment to avoid parsing issues with dbms_preprocessor
+ l_sql_lines := ut_utils.replace_multiline_comments(l_sql_lines);
+ -- strip CREATE header (possibly split across lines) while preserving line numbers
+ l_sql_lines := ut_utils.strip_create_header_lines(l_sql_lines);
end if;
open l_result for
select /*+ no_parallel */ a_object_name as name, column_value||chr(10) as text from table(l_sql_lines);
diff --git a/source/core/annotations/ut_annotation_manager.pks b/source/core/annotations/ut_annotation_manager.pks
index 20fcd810f..637577d59 100644
--- a/source/core/annotations/ut_annotation_manager.pks
+++ b/source/core/annotations/ut_annotation_manager.pks
@@ -1,7 +1,7 @@
create or replace package ut_annotation_manager authid current_user as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotation_obj_cache_info.tps b/source/core/annotations/ut_annotation_obj_cache_info.tps
index 1db3fd190..f7bdfa9a8 100644
--- a/source/core/annotations/ut_annotation_obj_cache_info.tps
+++ b/source/core/annotations/ut_annotation_obj_cache_info.tps
@@ -1,7 +1,7 @@
create type ut_annotation_obj_cache_info as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotation_objs_cache_info.tps b/source/core/annotations/ut_annotation_objs_cache_info.tps
index fc96e7d25..eb69f41e9 100644
--- a/source/core/annotations/ut_annotation_objs_cache_info.tps
+++ b/source/core/annotations/ut_annotation_objs_cache_info.tps
@@ -1,7 +1,7 @@
create type ut_annotation_objs_cache_info as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_annotation_parser.pkb b/source/core/annotations/ut_annotation_parser.pkb
index 10bb76b3c..8682604f6 100644
--- a/source/core/annotations/ut_annotation_parser.pkb
+++ b/source/core/annotations/ut_annotation_parser.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_annotation_parser as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -22,12 +22,10 @@ create or replace package body ut_annotation_parser as
type tt_comment_list is table of varchar2(32767) index by binary_integer;
gc_annotation_qualifier constant varchar2(1) := '%';
- gc_annot_comment_pattern constant varchar2(30) := '^( |'||chr(09)||')*-- *('||gc_annotation_qualifier||'.*?)$'; -- chr(09) is a tab character
gc_comment_replacer_patter constant varchar2(50) := '{COMMENT#%N%}';
gc_comment_replacer_regex_ptrn constant varchar2(25) := '{COMMENT#(\d+)}';
gc_regexp_identifier constant varchar2(50) := '[[:alpha:]][[:alnum:]$#_]*';
- gc_annotation_block_pattern constant varchar2(200) := '(({COMMENT#.+}'||chr(10)||')+)( |'||chr(09)||')*(procedure|function)\s+(' ||
- gc_regexp_identifier || ')';
+
gc_annotation_pattern constant varchar2(50) := gc_annotation_qualifier || gc_regexp_identifier || '[ '||chr(9)||']*(\(.*?\)\s*?$)?';
@@ -72,133 +70,144 @@ create or replace package body ut_annotation_parser as
a_subobject_name varchar2 := null
) is
l_loop_index binary_integer := 1;
- l_annotation_index binary_integer;
+ l_annotation_index binary_integer := 1;
begin
- -- loop while there are unprocessed comment blocks
- while 0 != nvl(regexp_instr(srcstr => a_source
- ,pattern => gc_comment_replacer_regex_ptrn
- ,occurrence => l_loop_index
- ,subexpression => 1)
- ,0) loop
+ -- loop while there are unprocessed comment blocks
+ while l_annotation_index is not null loop
-- define index of the comment block and get it's content from cache
l_annotation_index := regexp_substr( a_source ,gc_comment_replacer_regex_ptrn ,1 ,l_loop_index ,subexpression => 1);
- add_annotation( a_annotations, l_annotation_index, a_comments( l_annotation_index ), a_subobject_name );
- l_loop_index := l_loop_index + 1;
+ if l_annotation_index is not null then
+ add_annotation( a_annotations, l_annotation_index, a_comments( l_annotation_index ), a_subobject_name );
+ l_loop_index := l_loop_index + 1;
+ end if;
end loop;
end add_annotations;
- procedure add_procedure_annotations(a_annotations in out nocopy ut_annotations, a_source clob, a_comments in out nocopy tt_comment_list) is
- l_proc_comments varchar2(32767);
- l_proc_name varchar2(250);
- l_annot_proc_ind number;
- l_annot_proc_block varchar2(32767);
+ procedure add_procedure_annotations(
+ a_annotations in out nocopy ut_annotations,
+ a_source in dbms_preprocessor.source_lines_t,
+ a_comments in out nocopy tt_comment_list
+ ) is
+ l_proc_comments varchar2(32767);
+ l_proc_name varchar2(250);
+ l_line varchar2(32767);
+ l_in_comment_block boolean := false;
+ l_i binary_integer;
begin
- -- loop through procedures and functions of the package and get all the comment blocks just before it's declaration
- l_annot_proc_ind := 1;
- loop
- --find annotated procedure index
- l_annot_proc_ind := regexp_instr(srcstr => a_source
- ,pattern => gc_annotation_block_pattern
- ,occurrence => 1
- ,modifier => 'i'
- ,position => l_annot_proc_ind);
- exit when l_annot_proc_ind = 0;
-
- --get the annotations with procedure name
- l_annot_proc_block := regexp_substr(srcstr => a_source
- ,pattern => gc_annotation_block_pattern
- ,position => l_annot_proc_ind
- ,occurrence => 1
- ,modifier => 'i');
-
- --extract the annotations
- l_proc_comments := trim(regexp_substr(srcstr => l_annot_proc_block
- ,pattern => gc_annotation_block_pattern
- ,modifier => 'i'
- ,subexpression => 1));
- --extract the procedure name
- l_proc_name := trim(regexp_substr(srcstr => l_annot_proc_block
- ,pattern => gc_annotation_block_pattern
- ,modifier => 'i'
- ,subexpression => 5));
-
- -- parse the comment block for the syntactically correct annotations and store them as an array
- add_annotations(a_annotations, l_proc_comments, a_comments, l_proc_name);
-
- l_annot_proc_ind := instr(a_source, ';', l_annot_proc_ind + length(l_annot_proc_block) );
+ l_i := 1;
+ while l_i <= a_source.count loop
+ l_line := a_source(l_i);
+ -- Comment placeholder line: start/continue accumulating a block
+ if instr(l_line, chr(123) ||'COMMENT#') > 0 then
+ if l_in_comment_block then
+ l_proc_comments := l_proc_comments || l_line || chr(10);
+ else
+ l_in_comment_block := true;
+ l_proc_comments := l_line || chr(10);
+ end if;
+ l_i := l_i + 1;
+ -- Whitespace-only line: allowed between comment block and proc decl
+ elsif l_in_comment_block and trim(replace(l_line, chr(9))) is null then
+ l_i := l_i + 1;
+ -- procedure/function declaration following a comment block
+ elsif l_in_comment_block
+ and regexp_like(l_line, '^\s*(procedure|function)\s+', 'i')
+ then
+ -- extract just the identifier name (subexpression 2)
+ l_proc_name := trim(regexp_substr(srcstr =>l_line
+ ,pattern => '^\s*(procedure|function)\s+('||gc_regexp_identifier||')'
+ ,modifier => 'i'
+ ,subexpression => 2));
+
+ -- pass accumulated comment placeholders + proc name to add_annotations
+ add_annotations(a_annotations, l_proc_comments, a_comments, l_proc_name);
+
+ -- reset comment block state
+ l_in_comment_block := false;
+ l_proc_comments := null;
+
+ -- advance past proc header to the terminating ';'
+ -- the header may span multiple lines e.g. with multi-line parameter lists
+ while l_i <= a_source.count loop
+ exit when instr(a_source(l_i), ';') > 0;
+ l_i := l_i + 1;
+ end loop;
+ l_i := l_i + 1; -- step past the ';' line itself
+ -- Any other line: reset comment block accumulator
+ else
+ l_in_comment_block := false;
+ l_proc_comments := null;
+ l_i := l_i + 1;
+ end if;
end loop;
end add_procedure_annotations;
- function extract_and_replace_comments(a_source in out nocopy clob) return tt_comment_list is
- l_comments tt_comment_list;
- l_comment_pos binary_integer;
- l_comment_line binary_integer;
+ function extract_and_replace_comments(
+ a_source in out nocopy dbms_preprocessor.source_lines_t
+ ) return tt_comment_list is
+ l_comments tt_comment_list;
+ l_line varchar2(32767);
+ l_comment_pos binary_integer;
l_comment_replacer varchar2(50);
- l_source clob := a_source;
begin
- l_comment_pos := 1;
- loop
-
- l_comment_pos := regexp_instr(srcstr => a_source
- ,pattern => gc_annot_comment_pattern
- ,occurrence => 1
- ,modifier => 'm'
- ,position => l_comment_pos);
-
- exit when l_comment_pos = 0;
-
- -- position index is shifted by 1 because gc_annot_comment_pattern contains ^ as first sign
- -- but after instr index already points to the char on that line
- l_comment_pos := l_comment_pos-1;
- l_comment_line := length(substr(a_source,1,l_comment_pos))-length(replace(substr(a_source,1,l_comment_pos),chr(10)))+1;
- l_comments(l_comment_line) := trim(regexp_substr(srcstr => a_source
- ,pattern => gc_annot_comment_pattern
- ,occurrence => 1
- ,position => l_comment_pos
- ,modifier => 'm'
- ,subexpression => 2));
-
- l_comment_replacer := replace(gc_comment_replacer_patter, '%N%', l_comment_line);
-
- l_source := regexp_replace(srcstr => a_source
- ,pattern => gc_annot_comment_pattern
- ,replacestr => l_comment_replacer
- ,position => l_comment_pos
- ,occurrence => 1
- ,modifier => 'm');
- dbms_lob.freetemporary(a_source);
- a_source := l_source;
- dbms_lob.freetemporary(l_source);
- l_comment_pos := l_comment_pos + length(l_comment_replacer);
+ for i in 1 .. a_source.count loop
+ l_line := a_source(i);
+
+ -- fast path: skip lines that can't possibly match
+ -- must contain '--' and '%' to be an annotation comment
+ if instr(l_line, '--') = 0 or instr(l_line, gc_annotation_qualifier) = 0 then
+ continue;
+ end if;
+
+ -- find '--' on the line
+ l_comment_pos := instr(l_line, '--');
+
+ -- verify everything before '--' is only spaces/tabs (matches ^ *( |\t)*--)
+ if trim(replace(substr(l_line, 1, l_comment_pos - 1), chr(9))) is not null then
+ continue;
+ end if;
+
+ -- skip '--' and any spaces after it, then check for annotation qualifier '%'
+ l_comment_pos := l_comment_pos + 2;
+ -- skip optional spaces between -- and %
+ while l_comment_pos <= length(l_line)
+ and substr(l_line, l_comment_pos, 1) = ' '
+ loop
+ l_comment_pos := l_comment_pos + 1;
+ end loop;
+
+ -- must start with annotation qualifier at this position
+ if substr(l_line, l_comment_pos, 1) != gc_annotation_qualifier then
+ continue;
+ end if;
+
+ -- extract annotation text (from % to end of line, trimmed)
+ l_comments(i) := trim(substr(l_line, l_comment_pos));
+
+ -- replace line with placeholder, preserving line number in token
+ l_comment_replacer := replace(gc_comment_replacer_patter, '%N%', i);
+ a_source(i) := l_comment_replacer;
end loop;
- ut_utils.debug_log(a_source);
return l_comments;
end extract_and_replace_comments;
------------------------------------------------------------
--public definitions
------------------------------------------------------------
-
- function parse_object_annotations(a_source clob) return ut_annotations is
- l_source clob := a_source;
+ function parse_object_annotations(a_source dbms_preprocessor.source_lines_t) return ut_annotations is
+ l_source dbms_preprocessor.source_lines_t := a_source;
l_comments tt_comment_list;
l_annotations ut_annotations := ut_annotations();
l_result ut_annotations;
l_comment_index positive;
begin
-
- l_source := ut_utils.replace_multiline_comments(l_source);
-
- -- replace all single line comments with {COMMENT#12} element and store it's content for easier processing
- -- this call modifies l_source
+ l_source := ut_utils.replace_multiline_comments(l_source);
l_comments := extract_and_replace_comments(l_source);
-
add_procedure_annotations(l_annotations, l_source, l_comments);
-
delete_processed_comments(l_comments, l_annotations);
--at this point, only the comments not related to procedures are left, so we process them all as top-level
@@ -208,16 +217,15 @@ create or replace package body ut_annotation_parser as
l_comment_index := l_comments.next(l_comment_index);
end loop;
- dbms_lob.freetemporary(l_source);
-
- select /*+ no_parallel */ value(x) bulk collect into l_result from table(l_annotations) x order by x.position;
+ select /*+ no_parallel */ value(x) bulk collect into l_result from table(l_annotations) x order by x.position asc;
return l_result;
+
end parse_object_annotations;
function parse_object_annotations(a_source_lines dbms_preprocessor.source_lines_t, a_object_type varchar2) return ut_annotations is
l_processed_lines dbms_preprocessor.source_lines_t;
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_annotations ut_annotations := ut_annotations();
ex_package_is_wrapped exception;
pragma exception_init(ex_package_is_wrapped, -24241);
@@ -233,13 +241,11 @@ create or replace package body ut_annotation_parser as
else
l_processed_lines := sys.dbms_preprocessor.get_post_processed_source(a_source_lines);
end if;
- --convert to clob
for i in 1..l_processed_lines.count loop
- ut_utils.append_to_clob(l_source, replace(l_processed_lines(i), chr(13)||chr(10), chr(10)));
+ l_source(i) := replace(l_processed_lines(i), chr(13)||chr(10), chr(10));
end loop;
--parse annotations
l_annotations := parse_object_annotations(l_source);
- dbms_lob.freetemporary(l_source);
exception
when ex_package_is_wrapped or source_text_is_empty then
null;
diff --git a/source/core/annotations/ut_annotation_parser.pks b/source/core/annotations/ut_annotation_parser.pks
index 2f474c883..5bc2700a4 100644
--- a/source/core/annotations/ut_annotation_parser.pks
+++ b/source/core/annotations/ut_annotation_parser.pks
@@ -1,7 +1,7 @@
create or replace package ut_annotation_parser authid current_user as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -29,16 +29,5 @@ create or replace package ut_annotation_parser authid current_user as
*/
function parse_object_annotations(a_source_lines dbms_preprocessor.source_lines_t, a_object_type varchar2) return ut_annotations;
-
- /**
- *
- * @private
- * Parses source code and converts it to annotations
- *
- * @param a_source_lines ordered lines of source code to be parsed
- * @return array containing annotations
- */
- function parse_object_annotations(a_source clob) return ut_annotations;
-
end;
/
diff --git a/source/core/annotations/ut_annotations.tps b/source/core/annotations/ut_annotations.tps
index a6579d236..7669f008b 100644
--- a/source/core/annotations/ut_annotations.tps
+++ b/source/core/annotations/ut_annotations.tps
@@ -1,7 +1,7 @@
create type ut_annotations
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_trigger_annotation_parsing.trg b/source/core/annotations/ut_trigger_annotation_parsing.trg
index 437b7742d..75caea5e8 100644
--- a/source/core/annotations/ut_trigger_annotation_parsing.trg
+++ b/source/core/annotations/ut_trigger_annotation_parsing.trg
@@ -2,6 +2,22 @@ create or replace trigger ut_trigger_annotation_parsing
after create or alter or drop
on database
begin
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
if (ora_dict_obj_owner = UPPER('&&UT3_OWNER')
and ora_dict_obj_name = 'UT3_TRIGGER_ALIVE'
and ora_dict_obj_type = 'SYNONYM')
diff --git a/source/core/annotations/ut_trigger_check.pkb b/source/core/annotations/ut_trigger_check.pkb
index 34e43ba46..d533044bb 100644
--- a/source/core/annotations/ut_trigger_check.pkb
+++ b/source/core/annotations/ut_trigger_check.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_trigger_check is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/annotations/ut_trigger_check.pks b/source/core/annotations/ut_trigger_check.pks
index cee0b06fd..8c095c71a 100644
--- a/source/core/annotations/ut_trigger_check.pks
+++ b/source/core/annotations/ut_trigger_check.pks
@@ -1,7 +1,7 @@
create or replace package ut_trigger_check authid definer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage.pkb b/source/core/coverage/ut_coverage.pkb
index 7eb5a34c2..e8e6ed529 100644
--- a/source/core/coverage/ut_coverage.pkb
+++ b/source/core/coverage/ut_coverage.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_coverage is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage.pks b/source/core/coverage/ut_coverage.pks
index 21f3b1f9e..6bcde8e64 100644
--- a/source/core/coverage/ut_coverage.pks
+++ b/source/core/coverage/ut_coverage.pks
@@ -1,7 +1,7 @@
create or replace package ut_coverage authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_block.pkb b/source/core/coverage/ut_coverage_block.pkb
index a906b81a3..2d7e8bdac 100644
--- a/source/core/coverage/ut_coverage_block.pkb
+++ b/source/core/coverage/ut_coverage_block.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_coverage_block is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_block.pks b/source/core/coverage/ut_coverage_block.pks
index 01caca035..1bd9c2d39 100644
--- a/source/core/coverage/ut_coverage_block.pks
+++ b/source/core/coverage/ut_coverage_block.pks
@@ -1,7 +1,7 @@
create or replace package ut_coverage_block authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_helper.pkb b/source/core/coverage/ut_coverage_helper.pkb
index e249b3381..16e0bf7a1 100644
--- a/source/core/coverage/ut_coverage_helper.pkb
+++ b/source/core/coverage/ut_coverage_helper.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_coverage_helper is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_helper.pks b/source/core/coverage/ut_coverage_helper.pks
index cd6ed9ec7..da4cba087 100644
--- a/source/core/coverage/ut_coverage_helper.pks
+++ b/source/core/coverage/ut_coverage_helper.pks
@@ -1,7 +1,7 @@
create or replace package ut_coverage_helper authid definer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_helper_block.pkb b/source/core/coverage/ut_coverage_helper_block.pkb
index fb4d4812e..0cf009a10 100644
--- a/source/core/coverage/ut_coverage_helper_block.pkb
+++ b/source/core/coverage/ut_coverage_helper_block.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_coverage_helper_block is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_helper_block.pks b/source/core/coverage/ut_coverage_helper_block.pks
index a147d9f4f..3ee1f266c 100644
--- a/source/core/coverage/ut_coverage_helper_block.pks
+++ b/source/core/coverage/ut_coverage_helper_block.pks
@@ -1,7 +1,7 @@
create or replace package ut_coverage_helper_block authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_helper_profiler.pkb b/source/core/coverage/ut_coverage_helper_profiler.pkb
index f29291efb..7f6e6e51d 100644
--- a/source/core/coverage/ut_coverage_helper_profiler.pkb
+++ b/source/core/coverage/ut_coverage_helper_profiler.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_coverage_helper_profiler is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_helper_profiler.pks b/source/core/coverage/ut_coverage_helper_profiler.pks
index 0c54a83bf..2e56d10f7 100644
--- a/source/core/coverage/ut_coverage_helper_profiler.pks
+++ b/source/core/coverage/ut_coverage_helper_profiler.pks
@@ -1,7 +1,7 @@
create or replace package ut_coverage_helper_profiler authid definer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_profiler.pkb b/source/core/coverage/ut_coverage_profiler.pkb
index 663ceab7f..1dc40bcbc 100644
--- a/source/core/coverage/ut_coverage_profiler.pkb
+++ b/source/core/coverage/ut_coverage_profiler.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_coverage_profiler is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_profiler.pks b/source/core/coverage/ut_coverage_profiler.pks
index 9ce9a27f0..16145c34a 100644
--- a/source/core/coverage/ut_coverage_profiler.pks
+++ b/source/core/coverage/ut_coverage_profiler.pks
@@ -1,7 +1,7 @@
create or replace package ut_coverage_profiler authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_reporter_base.tpb b/source/core/coverage/ut_coverage_reporter_base.tpb
index da2bd27ad..f28226428 100644
--- a/source/core/coverage/ut_coverage_reporter_base.tpb
+++ b/source/core/coverage/ut_coverage_reporter_base.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_coverage_reporter_base is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_reporter_base.tps b/source/core/coverage/ut_coverage_reporter_base.tps
index 305c5d757..b917ea707 100644
--- a/source/core/coverage/ut_coverage_reporter_base.tps
+++ b/source/core/coverage/ut_coverage_reporter_base.tps
@@ -1,7 +1,7 @@
create or replace type ut_coverage_reporter_base under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/coverage/ut_coverage_sources_tmp.sql b/source/core/coverage/ut_coverage_sources_tmp.sql
index c091d5955..35eb05510 100644
--- a/source/core/coverage/ut_coverage_sources_tmp.sql
+++ b/source/core/coverage/ut_coverage_sources_tmp.sql
@@ -1,7 +1,7 @@
create global temporary table ut_coverage_sources_tmp(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/events/ut_event_item.tps b/source/core/events/ut_event_item.tps
index c0ea653ea..bb4556e03 100644
--- a/source/core/events/ut_event_item.tps
+++ b/source/core/events/ut_event_item.tps
@@ -1,7 +1,7 @@
create or replace type ut_event_item authid current_user as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/events/ut_event_listener.tps b/source/core/events/ut_event_listener.tps
index bbcdbf218..ee34bb009 100644
--- a/source/core/events/ut_event_listener.tps
+++ b/source/core/events/ut_event_listener.tps
@@ -1,7 +1,7 @@
create or replace type ut_event_listener authid current_user as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/events/ut_event_manager.pkb b/source/core/events/ut_event_manager.pkb
index f51019421..0b80b5a98 100644
--- a/source/core/events/ut_event_manager.pkb
+++ b/source/core/events/ut_event_manager.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_event_manager as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/events/ut_event_manager.pks b/source/core/events/ut_event_manager.pks
index 03b18b728..9cea89898 100644
--- a/source/core/events/ut_event_manager.pks
+++ b/source/core/events/ut_event_manager.pks
@@ -1,7 +1,7 @@
create or replace package ut_event_manager authid current_user as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_buffer_base.tpb b/source/core/output_buffers/ut_output_buffer_base.tpb
index 20cec335e..f92827d28 100644
--- a/source/core/output_buffers/ut_output_buffer_base.tpb
+++ b/source/core/output_buffers/ut_output_buffer_base.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_output_buffer_base is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_buffer_base.tps b/source/core/output_buffers/ut_output_buffer_base.tps
index f2d9ec686..9615cdc5e 100644
--- a/source/core/output_buffers/ut_output_buffer_base.tps
+++ b/source/core/output_buffers/ut_output_buffer_base.tps
@@ -1,7 +1,7 @@
create or replace type ut_output_buffer_base force authid definer as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_buffer_info_tmp.sql b/source/core/output_buffers/ut_output_buffer_info_tmp.sql
index af730d394..2aba5a55c 100644
--- a/source/core/output_buffers/ut_output_buffer_info_tmp.sql
+++ b/source/core/output_buffers/ut_output_buffer_info_tmp.sql
@@ -1,7 +1,7 @@
create table ut_output_buffer_info_tmp(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/output_buffers/ut_output_buffer_tmp.sql b/source/core/output_buffers/ut_output_buffer_tmp.sql
index 1ab19e534..68b738d3f 100644
--- a/source/core/output_buffers/ut_output_buffer_tmp.sql
+++ b/source/core/output_buffers/ut_output_buffer_tmp.sql
@@ -1,7 +1,7 @@
create table ut_output_buffer_tmp(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/output_buffers/ut_output_bulk_buffer.tpb b/source/core/output_buffers/ut_output_bulk_buffer.tpb
index cfc173e95..bc0ec6128 100644
--- a/source/core/output_buffers/ut_output_bulk_buffer.tpb
+++ b/source/core/output_buffers/ut_output_bulk_buffer.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_output_bulk_buffer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2023 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_bulk_buffer.tps b/source/core/output_buffers/ut_output_bulk_buffer.tps
index d74d4ee14..31d7271fa 100644
--- a/source/core/output_buffers/ut_output_bulk_buffer.tps
+++ b/source/core/output_buffers/ut_output_bulk_buffer.tps
@@ -1,7 +1,7 @@
create or replace type ut_output_bulk_buffer under ut_output_buffer_base (
/*
utPLSQL - Version 3
- Copyright 2016 - 2023 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_clob_buffer_tmp.sql b/source/core/output_buffers/ut_output_clob_buffer_tmp.sql
index 9ff9f7413..fa61191ce 100644
--- a/source/core/output_buffers/ut_output_clob_buffer_tmp.sql
+++ b/source/core/output_buffers/ut_output_clob_buffer_tmp.sql
@@ -6,7 +6,7 @@ begin
v_table_sql := 'create table ut_output_clob_buffer_tmp(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/output_buffers/ut_output_clob_table_buffer.tpb b/source/core/output_buffers/ut_output_clob_table_buffer.tpb
index 3d49ab08d..8f1cd3187 100644
--- a/source/core/output_buffers/ut_output_clob_table_buffer.tpb
+++ b/source/core/output_buffers/ut_output_clob_table_buffer.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_output_clob_table_buffer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_clob_table_buffer.tps b/source/core/output_buffers/ut_output_clob_table_buffer.tps
index 191e64c01..2cfb2538b 100644
--- a/source/core/output_buffers/ut_output_clob_table_buffer.tps
+++ b/source/core/output_buffers/ut_output_clob_table_buffer.tps
@@ -1,7 +1,7 @@
create or replace type ut_output_clob_table_buffer under ut_output_buffer_base (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_data_row.tps b/source/core/output_buffers/ut_output_data_row.tps
index c5dd95e98..ecfde404a 100644
--- a/source/core/output_buffers/ut_output_data_row.tps
+++ b/source/core/output_buffers/ut_output_data_row.tps
@@ -1,7 +1,7 @@
create or replace type ut_output_data_row as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_data_rows.tps b/source/core/output_buffers/ut_output_data_rows.tps
index 097e9beff..c505e2fbf 100644
--- a/source/core/output_buffers/ut_output_data_rows.tps
+++ b/source/core/output_buffers/ut_output_data_rows.tps
@@ -1,7 +1,7 @@
create or replace type ut_output_data_rows as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_table_buffer.tpb b/source/core/output_buffers/ut_output_table_buffer.tpb
index e8e2442a7..5fbd39907 100644
--- a/source/core/output_buffers/ut_output_table_buffer.tpb
+++ b/source/core/output_buffers/ut_output_table_buffer.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_output_table_buffer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/output_buffers/ut_output_table_buffer.tps b/source/core/output_buffers/ut_output_table_buffer.tps
index 154ce4de6..6c75421db 100644
--- a/source/core/output_buffers/ut_output_table_buffer.tps
+++ b/source/core/output_buffers/ut_output_table_buffer.tps
@@ -1,7 +1,7 @@
create or replace type ut_output_table_buffer under ut_output_buffer_base (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/session_context/ut_session_context.pkb b/source/core/session_context/ut_session_context.pkb
index a97505e9c..2443a350a 100644
--- a/source/core/session_context/ut_session_context.pkb
+++ b/source/core/session_context/ut_session_context.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_session_context as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/session_context/ut_session_context.pks b/source/core/session_context/ut_session_context.pks
index 63da3399e..8df2decee 100644
--- a/source/core/session_context/ut_session_context.pks
+++ b/source/core/session_context/ut_session_context.pks
@@ -1,7 +1,7 @@
create or replace package ut_session_context as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/session_context/ut_session_info.tpb b/source/core/session_context/ut_session_info.tpb
index 7d469651a..d9d576fb9 100644
--- a/source/core/session_context/ut_session_info.tpb
+++ b/source/core/session_context/ut_session_info.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_session_info as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/session_context/ut_session_info.tps b/source/core/session_context/ut_session_info.tps
index 17e596d88..aeb3361c3 100644
--- a/source/core/session_context/ut_session_info.tps
+++ b/source/core/session_context/ut_session_info.tps
@@ -1,7 +1,7 @@
create or replace type ut_session_info under ut_event_listener (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_console_reporter_base.tpb b/source/core/types/ut_console_reporter_base.tpb
index 909e9355a..282a52a9a 100644
--- a/source/core/types/ut_console_reporter_base.tpb
+++ b/source/core/types/ut_console_reporter_base.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_console_reporter_base is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_console_reporter_base.tps b/source/core/types/ut_console_reporter_base.tps
index a2c4b6b8c..077af7e37 100644
--- a/source/core/types/ut_console_reporter_base.tps
+++ b/source/core/types/ut_console_reporter_base.tps
@@ -1,7 +1,7 @@
create or replace type ut_console_reporter_base under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_coverage_options.tpb b/source/core/types/ut_coverage_options.tpb
index a091802af..6c81af773 100644
--- a/source/core/types/ut_coverage_options.tpb
+++ b/source/core/types/ut_coverage_options.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_coverage_options as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_coverage_options.tps b/source/core/types/ut_coverage_options.tps
index a8e3d5129..3813232df 100644
--- a/source/core/types/ut_coverage_options.tps
+++ b/source/core/types/ut_coverage_options.tps
@@ -1,7 +1,7 @@
create or replace type ut_coverage_options force as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_executable.tpb b/source/core/types/ut_executable.tpb
index d2ce9b79d..c78cf4d77 100644
--- a/source/core/types/ut_executable.tpb
+++ b/source/core/types/ut_executable.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_executable is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_executable.tps b/source/core/types/ut_executable.tps
index aaa5a3a72..7d04c4e41 100644
--- a/source/core/types/ut_executable.tps
+++ b/source/core/types/ut_executable.tps
@@ -1,7 +1,7 @@
create or replace type ut_executable under ut_event_item(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_executable_test.tpb b/source/core/types/ut_executable_test.tpb
index fa5872e04..e816a1b1b 100644
--- a/source/core/types/ut_executable_test.tpb
+++ b/source/core/types/ut_executable_test.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_executable_test as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_executable_test.tps b/source/core/types/ut_executable_test.tps
index 42b6080df..76f2d1c7d 100644
--- a/source/core/types/ut_executable_test.tps
+++ b/source/core/types/ut_executable_test.tps
@@ -1,7 +1,7 @@
create or replace type ut_executable_test authid current_user under ut_executable (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_executables.tps b/source/core/types/ut_executables.tps
index d6d52b3d2..f5fbbdfad 100644
--- a/source/core/types/ut_executables.tps
+++ b/source/core/types/ut_executables.tps
@@ -1,7 +1,7 @@
create or replace type ut_executables as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_expectation_result.tpb b/source/core/types/ut_expectation_result.tpb
index 0b3adf983..cf445b705 100644
--- a/source/core/types/ut_expectation_result.tpb
+++ b/source/core/types/ut_expectation_result.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_expectation_result is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_expectation_result.tps b/source/core/types/ut_expectation_result.tps
index d4b4c7548..5a430fe64 100644
--- a/source/core/types/ut_expectation_result.tps
+++ b/source/core/types/ut_expectation_result.tps
@@ -1,7 +1,7 @@
create or replace type ut_expectation_result under ut_event_item(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_expectation_results.tps b/source/core/types/ut_expectation_results.tps
index e5e4c6223..50cc046ec 100644
--- a/source/core/types/ut_expectation_results.tps
+++ b/source/core/types/ut_expectation_results.tps
@@ -1,7 +1,7 @@
create or replace type ut_expectation_results as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_file_mapping.tpb b/source/core/types/ut_file_mapping.tpb
index dab1e35c5..5b7133c56 100644
--- a/source/core/types/ut_file_mapping.tpb
+++ b/source/core/types/ut_file_mapping.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_file_mapping as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_file_mapping.tps b/source/core/types/ut_file_mapping.tps
index 941d95283..8fed2df00 100644
--- a/source/core/types/ut_file_mapping.tps
+++ b/source/core/types/ut_file_mapping.tps
@@ -1,7 +1,7 @@
create or replace type ut_file_mapping as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_file_mappings.tps b/source/core/types/ut_file_mappings.tps
index 240fb8dd7..0e1653969 100644
--- a/source/core/types/ut_file_mappings.tps
+++ b/source/core/types/ut_file_mappings.tps
@@ -1,7 +1,7 @@
create or replace type ut_file_mappings as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_integer_list.tps b/source/core/types/ut_integer_list.tps
index ec9a2a78f..00bce87c4 100644
--- a/source/core/types/ut_integer_list.tps
+++ b/source/core/types/ut_integer_list.tps
@@ -1,7 +1,7 @@
create or replace type ut_integer_list as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_key_value_pair.tps b/source/core/types/ut_key_value_pair.tps
index 5a337e608..38dee5a7d 100644
--- a/source/core/types/ut_key_value_pair.tps
+++ b/source/core/types/ut_key_value_pair.tps
@@ -1,7 +1,7 @@
create or replace type ut_key_value_pair force as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_key_value_pairs.tps b/source/core/types/ut_key_value_pairs.tps
index 24bdded36..327986e19 100644
--- a/source/core/types/ut_key_value_pairs.tps
+++ b/source/core/types/ut_key_value_pairs.tps
@@ -1,7 +1,7 @@
create or replace type ut_key_value_pairs as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_logical_suite.tpb b/source/core/types/ut_logical_suite.tpb
index 036d40d51..ea9b42857 100644
--- a/source/core/types/ut_logical_suite.tpb
+++ b/source/core/types/ut_logical_suite.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_logical_suite as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_logical_suite.tps b/source/core/types/ut_logical_suite.tps
index c4f2f699b..ab2271e32 100644
--- a/source/core/types/ut_logical_suite.tps
+++ b/source/core/types/ut_logical_suite.tps
@@ -1,7 +1,7 @@
create or replace type ut_logical_suite force under ut_suite_item (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_object_name.tpb b/source/core/types/ut_object_name.tpb
index 76acc15bf..e39231b0f 100644
--- a/source/core/types/ut_object_name.tpb
+++ b/source/core/types/ut_object_name.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_object_name as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_object_name.tps b/source/core/types/ut_object_name.tps
index 5f8f724c4..dc4fe2bca 100644
--- a/source/core/types/ut_object_name.tps
+++ b/source/core/types/ut_object_name.tps
@@ -1,7 +1,7 @@
create or replace type ut_object_name as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_object_names.tps b/source/core/types/ut_object_names.tps
index 03830be17..2b42cce21 100644
--- a/source/core/types/ut_object_names.tps
+++ b/source/core/types/ut_object_names.tps
@@ -1,7 +1,7 @@
create or replace type ut_object_names as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_output_reporter_base.tpb b/source/core/types/ut_output_reporter_base.tpb
index 48970be5a..fec4ebfab 100644
--- a/source/core/types/ut_output_reporter_base.tpb
+++ b/source/core/types/ut_output_reporter_base.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_output_reporter_base is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_output_reporter_base.tps b/source/core/types/ut_output_reporter_base.tps
index 21eed9957..f5827a97d 100644
--- a/source/core/types/ut_output_reporter_base.tps
+++ b/source/core/types/ut_output_reporter_base.tps
@@ -1,7 +1,7 @@
create or replace type ut_output_reporter_base under ut_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_path_item.tpb b/source/core/types/ut_path_item.tpb
index 6cdb2b8ad..685178987 100644
--- a/source/core/types/ut_path_item.tpb
+++ b/source/core/types/ut_path_item.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_path_item as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_path_item.tps b/source/core/types/ut_path_item.tps
index c8ec81be5..5946cacbf 100644
--- a/source/core/types/ut_path_item.tps
+++ b/source/core/types/ut_path_item.tps
@@ -1,7 +1,7 @@
create or replace type ut_path_item as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_path_items.tps b/source/core/types/ut_path_items.tps
index 0c87cf28c..7ae04e0b9 100644
--- a/source/core/types/ut_path_items.tps
+++ b/source/core/types/ut_path_items.tps
@@ -1,7 +1,7 @@
create or replace type ut_path_items as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_reporter_base.tpb b/source/core/types/ut_reporter_base.tpb
index 3f8984331..445d9d351 100644
--- a/source/core/types/ut_reporter_base.tpb
+++ b/source/core/types/ut_reporter_base.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_reporter_base is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -165,52 +165,54 @@ create or replace type body ut_reporter_base is
end;
overriding member procedure on_event( self in out nocopy ut_reporter_base, a_event_name varchar2, a_event_item ut_event_item) is
+ /* Resolves issue with ORA-21779 being thrown see issue: 1309 -> ( https://github.com/utPLSQL/utPLSQL/issues/1309#issuecomment-4020289898 ) */
+ l_event_item ut_event_item := a_event_item;
begin
case a_event_name
when ut_event_manager.gc_initialize
- then self.on_initialize(treat(a_event_item as ut_run));
+ then self.on_initialize(treat(l_event_item as ut_run));
when ut_event_manager.gc_before_run
- then self.before_calling_run(treat(a_event_item as ut_run));
+ then self.before_calling_run(treat(l_event_item as ut_run));
when ut_event_manager.gc_before_suite
- then self.before_calling_suite(treat(a_event_item as ut_logical_suite));
+ then self.before_calling_suite(treat(l_event_item as ut_logical_suite));
when ut_event_manager.gc_before_before_all
- then self.before_calling_before_all(treat(a_event_item as ut_executable));
+ then self.before_calling_before_all(treat(l_event_item as ut_executable));
when ut_event_manager.gc_before_before_each
- then self.before_calling_before_each(treat(a_event_item as ut_executable));
+ then self.before_calling_before_each(treat(l_event_item as ut_executable));
when ut_event_manager.gc_before_test
- then self.before_calling_test(treat(a_event_item as ut_test));
+ then self.before_calling_test(treat(l_event_item as ut_test));
when ut_event_manager.gc_before_before_test
- then self.before_calling_before_test(treat(a_event_item as ut_executable));
+ then self.before_calling_before_test(treat(l_event_item as ut_executable));
when ut_event_manager.gc_before_test_execute
- then self.before_calling_test_execute(treat(a_event_item as ut_executable));
+ then self.before_calling_test_execute(treat(l_event_item as ut_executable));
when ut_event_manager.gc_before_after_test
- then self.before_calling_after_test(treat(a_event_item as ut_executable));
+ then self.before_calling_after_test(treat(l_event_item as ut_executable));
when ut_event_manager.gc_before_after_each
- then self.before_calling_after_each(treat(a_event_item as ut_executable));
+ then self.before_calling_after_each(treat(l_event_item as ut_executable));
when ut_event_manager.gc_before_after_all
- then self.before_calling_after_all(treat(a_event_item as ut_executable));
+ then self.before_calling_after_all(treat(l_event_item as ut_executable));
when ut_event_manager.gc_after_run
- then self.after_calling_run(treat(a_event_item as ut_run));
+ then self.after_calling_run(treat(l_event_item as ut_run));
when ut_event_manager.gc_after_suite
- then self.after_calling_suite(treat(a_event_item as ut_logical_suite));
+ then self.after_calling_suite(treat(l_event_item as ut_logical_suite));
when ut_event_manager.gc_after_before_all
- then self.after_calling_before_all(treat(a_event_item as ut_executable));
+ then self.after_calling_before_all(treat(l_event_item as ut_executable));
when ut_event_manager.gc_after_before_each
- then self.after_calling_before_each(treat(a_event_item as ut_executable));
+ then self.after_calling_before_each(treat(l_event_item as ut_executable));
when ut_event_manager.gc_after_test
- then self.after_calling_test(treat(a_event_item as ut_test));
+ then self.after_calling_test(treat(l_event_item as ut_test));
when ut_event_manager.gc_after_before_test
- then self.after_calling_before_test(treat(a_event_item as ut_executable));
+ then self.after_calling_before_test(treat(l_event_item as ut_executable));
when ut_event_manager.gc_after_test_execute
- then self.after_calling_test_execute(treat(a_event_item as ut_executable));
+ then self.after_calling_test_execute(treat(l_event_item as ut_executable));
when ut_event_manager.gc_after_after_test
- then self.after_calling_after_test(treat(a_event_item as ut_executable));
+ then self.after_calling_after_test(treat(l_event_item as ut_executable));
when ut_event_manager.gc_after_after_each
- then self.after_calling_after_each(treat(a_event_item as ut_executable));
+ then self.after_calling_after_each(treat(l_event_item as ut_executable));
when ut_event_manager.gc_after_after_all
- then self.after_calling_after_all(treat(a_event_item as ut_executable));
+ then self.after_calling_after_all(treat(l_event_item as ut_executable));
when ut_event_manager.gc_finalize
- then self.on_finalize(treat(a_event_item as ut_run));
+ then self.on_finalize(treat(l_event_item as ut_run));
else null;
end case;
end;
diff --git a/source/core/types/ut_reporter_base.tps b/source/core/types/ut_reporter_base.tps
index de157136e..9df353060 100644
--- a/source/core/types/ut_reporter_base.tps
+++ b/source/core/types/ut_reporter_base.tps
@@ -1,7 +1,7 @@
create or replace type ut_reporter_base under ut_event_listener (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_reporter_info.tps b/source/core/types/ut_reporter_info.tps
index f09c42e07..3491f7679 100644
--- a/source/core/types/ut_reporter_info.tps
+++ b/source/core/types/ut_reporter_info.tps
@@ -1,7 +1,7 @@
create or replace type ut_reporter_info as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_reporters.tps b/source/core/types/ut_reporters.tps
index a2802bb26..ab6439dce 100644
--- a/source/core/types/ut_reporters.tps
+++ b/source/core/types/ut_reporters.tps
@@ -1,7 +1,7 @@
create or replace type ut_reporters as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_reporters_info.tps b/source/core/types/ut_reporters_info.tps
index 82c264f36..3639f4c2c 100644
--- a/source/core/types/ut_reporters_info.tps
+++ b/source/core/types/ut_reporters_info.tps
@@ -1,7 +1,7 @@
create or replace type ut_reporters_info as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_results_counter.tpb b/source/core/types/ut_results_counter.tpb
index 811389e0e..87fd83cf9 100644
--- a/source/core/types/ut_results_counter.tpb
+++ b/source/core/types/ut_results_counter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_results_counter as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_results_counter.tps b/source/core/types/ut_results_counter.tps
index 913ae0967..62b3d9ffd 100644
--- a/source/core/types/ut_results_counter.tps
+++ b/source/core/types/ut_results_counter.tps
@@ -1,7 +1,7 @@
create or replace type ut_results_counter as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_run.tpb b/source/core/types/ut_run.tpb
index 660c88791..0956be32d 100644
--- a/source/core/types/ut_run.tpb
+++ b/source/core/types/ut_run.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_run as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_run.tps b/source/core/types/ut_run.tps
index 1878a2d46..ef3631082 100644
--- a/source/core/types/ut_run.tps
+++ b/source/core/types/ut_run.tps
@@ -1,7 +1,7 @@
create or replace type ut_run under ut_suite_item (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_run_info.tpb b/source/core/types/ut_run_info.tpb
index 6edc0f109..1370de3cc 100644
--- a/source/core/types/ut_run_info.tpb
+++ b/source/core/types/ut_run_info.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_run_info as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_run_info.tps b/source/core/types/ut_run_info.tps
index 4a3da691f..df82c380d 100644
--- a/source/core/types/ut_run_info.tps
+++ b/source/core/types/ut_run_info.tps
@@ -1,7 +1,7 @@
create or replace type ut_run_info under ut_event_item (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_stack.tpb b/source/core/types/ut_stack.tpb
index b5f4e8747..da0c371a6 100644
--- a/source/core/types/ut_stack.tpb
+++ b/source/core/types/ut_stack.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_stack as
/*
utPLSQL - Version 3
- Copyright 2016 - 2023 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_stack.tps b/source/core/types/ut_stack.tps
index 23112fdde..5a5f90263 100644
--- a/source/core/types/ut_stack.tps
+++ b/source/core/types/ut_stack.tps
@@ -3,7 +3,7 @@ create or replace type ut_stack as object (
tokens ut_varchar2_list,
/*
utPLSQL - Version 3
- Copyright 2016 - 2023 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite.tpb b/source/core/types/ut_suite.tpb
index e3a4687d8..9558565ed 100644
--- a/source/core/types/ut_suite.tpb
+++ b/source/core/types/ut_suite.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_suite as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite.tps b/source/core/types/ut_suite.tps
index ff7f3e171..199e05ea4 100644
--- a/source/core/types/ut_suite.tps
+++ b/source/core/types/ut_suite.tps
@@ -1,7 +1,7 @@
create or replace type ut_suite under ut_logical_suite (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite_cache_row.tps b/source/core/types/ut_suite_cache_row.tps
index c147a8757..f294b3697 100644
--- a/source/core/types/ut_suite_cache_row.tps
+++ b/source/core/types/ut_suite_cache_row.tps
@@ -1,7 +1,7 @@
create or replace type ut_suite_cache_row as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite_cache_rows.tps b/source/core/types/ut_suite_cache_rows.tps
index 9b6919df5..c69c8672f 100644
--- a/source/core/types/ut_suite_cache_rows.tps
+++ b/source/core/types/ut_suite_cache_rows.tps
@@ -1,7 +1,7 @@
create type ut_suite_cache_rows as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite_context.tpb b/source/core/types/ut_suite_context.tpb
index be92e6fc9..52e57924a 100644
--- a/source/core/types/ut_suite_context.tpb
+++ b/source/core/types/ut_suite_context.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_suite_context as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite_context.tps b/source/core/types/ut_suite_context.tps
index 5e3d20f87..51d318235 100644
--- a/source/core/types/ut_suite_context.tps
+++ b/source/core/types/ut_suite_context.tps
@@ -1,7 +1,7 @@
create or replace type ut_suite_context under ut_suite (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite_item.tpb b/source/core/types/ut_suite_item.tpb
index 648f10dd1..965d2416e 100644
--- a/source/core/types/ut_suite_item.tpb
+++ b/source/core/types/ut_suite_item.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_suite_item as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite_item.tps b/source/core/types/ut_suite_item.tps
index 8184f2a63..8ba3c6183 100644
--- a/source/core/types/ut_suite_item.tps
+++ b/source/core/types/ut_suite_item.tps
@@ -1,7 +1,7 @@
create or replace type ut_suite_item force under ut_event_item (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_suite_items.tps b/source/core/types/ut_suite_items.tps
index 615283446..ee3466c5d 100644
--- a/source/core/types/ut_suite_items.tps
+++ b/source/core/types/ut_suite_items.tps
@@ -1,7 +1,7 @@
create or replace type ut_suite_items as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_test.tpb b/source/core/types/ut_test.tpb
index 946f8990d..21ca44713 100644
--- a/source/core/types/ut_test.tpb
+++ b/source/core/types/ut_test.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_test as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_test.tps b/source/core/types/ut_test.tps
index dbba64961..215e3e9d6 100644
--- a/source/core/types/ut_test.tps
+++ b/source/core/types/ut_test.tps
@@ -1,7 +1,7 @@
create or replace type ut_test force under ut_suite_item (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_varchar2_list.tps b/source/core/types/ut_varchar2_list.tps
index f0b5df509..95a5545a8 100644
--- a/source/core/types/ut_varchar2_list.tps
+++ b/source/core/types/ut_varchar2_list.tps
@@ -1,7 +1,7 @@
create or replace type ut_varchar2_list as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/types/ut_varchar2_rows.tps b/source/core/types/ut_varchar2_rows.tps
index e7fa29c29..c6f05df86 100644
--- a/source/core/types/ut_varchar2_rows.tps
+++ b/source/core/types/ut_varchar2_rows.tps
@@ -1,7 +1,7 @@
create or replace type ut_varchar2_rows as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_dbms_output_cache.sql b/source/core/ut_dbms_output_cache.sql
index e61b403c8..802f30942 100644
--- a/source/core/ut_dbms_output_cache.sql
+++ b/source/core/ut_dbms_output_cache.sql
@@ -1,15 +1,16 @@
/*
-utPLSQL - Version 3
-Copyright 2016 - 2021 utPLSQL Project
-Licensed under the Apache License, Version 2.0 (the "License"):
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
*/
/*
* This table is not a global temporary table as it needs to allow cross-session data exchange
diff --git a/source/core/ut_expectation_processor.pkb b/source/core/ut_expectation_processor.pkb
index c165a9ee5..654a838ca 100644
--- a/source/core/ut_expectation_processor.pkb
+++ b/source/core/ut_expectation_processor.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_expectation_processor as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_expectation_processor.pks b/source/core/ut_expectation_processor.pks
index dd9187526..1837188eb 100644
--- a/source/core/ut_expectation_processor.pks
+++ b/source/core/ut_expectation_processor.pks
@@ -1,7 +1,7 @@
create or replace package ut_expectation_processor authid current_user as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_file_mapper.pkb b/source/core/ut_file_mapper.pkb
index 425360533..077319d76 100644
--- a/source/core/ut_file_mapper.pkb
+++ b/source/core/ut_file_mapper.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_file_mapper is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_file_mapper.pks b/source/core/ut_file_mapper.pks
index adc4c983f..71e045d7e 100644
--- a/source/core/ut_file_mapper.pks
+++ b/source/core/ut_file_mapper.pks
@@ -1,7 +1,7 @@
create or replace package ut_file_mapper authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_metadata.pkb b/source/core/ut_metadata.pkb
index 360b7b97d..aec9a3c8d 100644
--- a/source/core/ut_metadata.pkb
+++ b/source/core/ut_metadata.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_metadata as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_metadata.pks b/source/core/ut_metadata.pks
index 27bfa5d30..31cf4889b 100644
--- a/source/core/ut_metadata.pks
+++ b/source/core/ut_metadata.pks
@@ -1,7 +1,7 @@
create or replace package ut_metadata authid current_user as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_savepoint_seq.sql b/source/core/ut_savepoint_seq.sql
index 5b0cda35e..2026ab0e3 100644
--- a/source/core/ut_savepoint_seq.sql
+++ b/source/core/ut_savepoint_seq.sql
@@ -1,7 +1,7 @@
create sequence ut_savepoint_seq
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/ut_suite_builder.pkb b/source/core/ut_suite_builder.pkb
index ebb113370..2ebdb980c 100644
--- a/source/core/ut_suite_builder.pkb
+++ b/source/core/ut_suite_builder.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_suite_builder is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_suite_builder.pks b/source/core/ut_suite_builder.pks
index 352601a6d..7e43a720e 100644
--- a/source/core/ut_suite_builder.pks
+++ b/source/core/ut_suite_builder.pks
@@ -1,7 +1,7 @@
create or replace package ut_suite_builder authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_suite_cache.sql b/source/core/ut_suite_cache.sql
index 182caabd0..1d7389e9f 100644
--- a/source/core/ut_suite_cache.sql
+++ b/source/core/ut_suite_cache.sql
@@ -1,7 +1,7 @@
create table ut_suite_cache
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/ut_suite_cache_manager.pkb b/source/core/ut_suite_cache_manager.pkb
index 6d621c339..fb7c2c888 100644
--- a/source/core/ut_suite_cache_manager.pkb
+++ b/source/core/ut_suite_cache_manager.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_suite_cache_manager is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -306,7 +306,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 is not null and a_suite_items.count = 0 then
+ if a_suite_items is null or a_suite_items.count = 0 then
delete from ut_suite_cache t
where t.object_owner = l_object_owner
diff --git a/source/core/ut_suite_cache_manager.pks b/source/core/ut_suite_cache_manager.pks
index 81b1e0136..bd236678d 100644
--- a/source/core/ut_suite_cache_manager.pks
+++ b/source/core/ut_suite_cache_manager.pks
@@ -1,7 +1,7 @@
create or replace package ut_suite_cache_manager authid definer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_suite_cache_package.sql b/source/core/ut_suite_cache_package.sql
index 7a146ff83..40b7b8dec 100644
--- a/source/core/ut_suite_cache_package.sql
+++ b/source/core/ut_suite_cache_package.sql
@@ -1,7 +1,7 @@
create table ut_suite_cache_package (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/ut_suite_cache_schema.sql b/source/core/ut_suite_cache_schema.sql
index 636816e65..cace332e3 100644
--- a/source/core/ut_suite_cache_schema.sql
+++ b/source/core/ut_suite_cache_schema.sql
@@ -1,7 +1,7 @@
create table ut_suite_cache_schema (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/ut_suite_cache_seq.sql b/source/core/ut_suite_cache_seq.sql
index e1e560286..020c25c4d 100644
--- a/source/core/ut_suite_cache_seq.sql
+++ b/source/core/ut_suite_cache_seq.sql
@@ -1,7 +1,7 @@
create sequence ut_suite_cache_seq
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/core/ut_suite_manager.pkb b/source/core/ut_suite_manager.pkb
index c418de638..ad7f27f59 100644
--- a/source/core/ut_suite_manager.pkb
+++ b/source/core/ut_suite_manager.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_suite_manager is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_suite_manager.pks b/source/core/ut_suite_manager.pks
index 07539139a..8ac7cc8ad 100644
--- a/source/core/ut_suite_manager.pks
+++ b/source/core/ut_suite_manager.pks
@@ -1,7 +1,7 @@
create or replace package ut_suite_manager authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_suite_tag_filter.pkb b/source/core/ut_suite_tag_filter.pkb
index 2d9436301..353793bc5 100644
--- a/source/core/ut_suite_tag_filter.pkb
+++ b/source/core/ut_suite_tag_filter.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_suite_tag_filter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2023 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_suite_tag_filter.pks b/source/core/ut_suite_tag_filter.pks
index e824ae275..0493bd194 100644
--- a/source/core/ut_suite_tag_filter.pks
+++ b/source/core/ut_suite_tag_filter.pks
@@ -1,7 +1,7 @@
create or replace package ut_suite_tag_filter authid definer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2023 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/core/ut_utils.pkb b/source/core/ut_utils.pkb
index 81d47221b..9afb2ffb0 100644
--- a/source/core/ut_utils.pkb
+++ b/source/core/ut_utils.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_utils is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -23,8 +23,10 @@ create or replace package body ut_utils is
gc_invalid_xml_char constant varchar2(50) := '[^_[:alnum:]\.-]';
gc_full_valid_xml_name constant varchar2(50) := '^([[:alpha:]])([_[:alnum:]\.-])*$';
gc_owner_hash constant integer(11) := dbms_utility.get_hash_value( ut_owner(), 0, power(2,31)-1);
+ gc_open_chars constant varchar2(4):= '[{(<';
+ gc_close_chars constant varchar2(4):= ']})>';
+ gc_max_plsql_source_len constant integer := 32767;
-
function surround_with(a_value varchar2, a_quote_char varchar2) return varchar2 is
begin
return case when a_quote_char is not null then a_quote_char||a_value||a_quote_char else a_value end;
@@ -658,94 +660,234 @@ create or replace package body ut_utils is
return l_result;
end;
- function replace_multiline_comments(a_source clob) return clob is
- l_result clob;
- l_ml_comment_start binary_integer := 1;
- l_comment_start binary_integer := 1;
- l_text_start binary_integer := 1;
- l_escaped_text_start binary_integer := 1;
- l_escaped_text_end_char varchar2(1 char);
- l_end binary_integer := 1;
- l_ml_comment clob;
- l_newlines_count binary_integer;
- l_offset binary_integer := 1;
- l_length binary_integer := coalesce(dbms_lob.getlength(a_source), 0);
- begin
- l_ml_comment_start := instr(a_source,'/*');
- l_comment_start := instr(a_source,'--');
- l_text_start := instr(a_source,'''');
- l_escaped_text_start := instr(a_source,q'[q']');
- while l_offset > 0 and l_ml_comment_start > 0 loop
-
- if l_ml_comment_start > 0 and (l_ml_comment_start < l_comment_start or l_comment_start = 0)
- and (l_ml_comment_start < l_text_start or l_text_start = 0)and (l_ml_comment_start < l_escaped_text_start or l_escaped_text_start = 0)
- then
- l_end := instr(a_source,'*/',l_ml_comment_start+2);
- append_to_clob(l_result, dbms_lob.substr(a_source, l_ml_comment_start-l_offset, l_offset));
+ function scan_line(a_line in varchar2, a_in_ml_comment in out boolean) return varchar2 is
+ -- Normal scan
+ l_remaining varchar2(32767) := a_line;
+ l_line varchar2(32767);
+ l_ml_start binary_integer;
+ l_comment_start binary_integer;
+ l_text_start binary_integer;
+ l_eq_text_start binary_integer;
+ l_eq_end_char varchar2(1 char);
+ l_pos binary_integer;
+ l_end binary_integer;
+ l_ml_end binary_integer;
+ begin
+ if a_in_ml_comment then
+ l_ml_end := instr(l_remaining, '*/');
+ if l_ml_end > 0 then
+ a_in_ml_comment := false;
+ l_remaining := substr(l_remaining, l_ml_end + 2);
+ else
+ return null;
+ end if;
+ end if;
+
+ loop
+ exit when l_remaining is null;
+ l_ml_start := instr(l_remaining, '/*');
+ l_comment_start := instr(l_remaining, '--');
+ l_text_start := instr(l_remaining, '''');
+ -- q' always puts ' at l_text_start; just check the char immediately before it
+ l_eq_text_start := case
+ when l_text_start > 1 and substr(l_remaining, l_text_start - 1, 1) = 'q'
+ then l_text_start - 1
+ else 0
+ end;
+ -- Sentinel gc_max_plsql_source_len means "not present"; 32767 is beyond any VARCHAR2 position
+ l_pos := least(
+ case when l_ml_start > 0 then l_ml_start else gc_max_plsql_source_len end,
+ case when l_comment_start > 0 then l_comment_start else gc_max_plsql_source_len end,
+ case when l_text_start > 0 then l_text_start else gc_max_plsql_source_len end,
+ case when l_eq_text_start > 0 then l_eq_text_start else gc_max_plsql_source_len end
+ );
+
+ if l_pos = gc_max_plsql_source_len then
+ l_line := l_line || l_remaining;
+ exit;
+ end if;
+
+ l_line := l_line || substr(l_remaining, 1, l_pos - 1);
+ l_remaining := substr(l_remaining, l_pos);
+ -- l_remaining now starts exactly at the token; all branch offsets below are relative to 1
+ if l_pos = l_eq_text_start then
+ -- q-quoted string: l_remaining starts at 'q', delimiter is at position 3
+ l_eq_end_char := translate(substr(l_remaining, 3, 1), gc_open_chars, gc_close_chars);
+ l_end := instr(l_remaining, l_eq_end_char || '''', 4);
if l_end > 0 then
- l_ml_comment := substr(a_source, l_ml_comment_start, l_end-l_ml_comment_start);
- l_newlines_count := length( l_ml_comment ) - length( translate( l_ml_comment, 'a'||chr(10), 'a') );
- if l_newlines_count > 0 then
- append_to_clob(l_result, lpad( chr(10), l_newlines_count, chr(10) ) );
- end if;
- l_end := l_end + 2;
+ l_line := l_line || substr(l_remaining, 1, l_end + 1);
+ l_remaining := substr(l_remaining, l_end + 2);
+ else
+ l_line := l_line || l_remaining;
+ exit;
end if;
- else
- if l_comment_start > 0 and (l_comment_start < l_ml_comment_start or l_ml_comment_start = 0)
- and (l_comment_start < l_text_start or l_text_start = 0) and (l_comment_start < l_escaped_text_start or l_escaped_text_start = 0)
- then
- l_end := instr(a_source,chr(10),l_comment_start+2);
- if l_end > 0 then
- l_end := l_end + 1;
- end if;
- elsif l_text_start > 0 and (l_text_start < l_ml_comment_start or l_ml_comment_start = 0)
- and (l_text_start < l_comment_start or l_comment_start = 0) and (l_text_start < l_escaped_text_start or l_escaped_text_start = 0)
- then
- l_end := instr(a_source,q'[']',l_text_start+1);
-
- --skip double quotes while searching for end of quoted text
- while l_end > 0 and l_end = instr(a_source,q'['']',l_text_start+1) loop
- l_end := instr(a_source,q'[']',l_end+1);
- end loop;
- if l_end > 0 then
- l_end := l_end + 1;
+ elsif l_pos = l_ml_start then
+ -- Multi-line comment: l_remaining starts at '/*', so end search starts at 3
+ l_ml_end := instr(l_remaining, '*/', 3);
+ if l_ml_end > 0 then
+ l_remaining := substr(l_remaining, l_ml_end + 2);
+ else
+ a_in_ml_comment := true;
+ -- preserve trailing newline if present β it belongs to this line, not the comment
+ if substr(l_remaining, -1) = chr(10) then
+ l_line := l_line || chr(10);
end if;
+ return l_line;
+ end if;
+
+ elsif l_pos = l_comment_start then
+ -- Single-line comment: everything from here is comment, keep and stop
+ l_line := l_line || l_remaining;
+ return l_line;
- elsif l_escaped_text_start > 0 and (l_escaped_text_start < l_ml_comment_start or l_ml_comment_start = 0)
- and (l_escaped_text_start < l_comment_start or l_comment_start = 0) and (l_escaped_text_start < l_text_start or l_text_start = 0)
- then
- --translate char "[" from the start of quoted text "q'[someting]'" into "]"
- l_escaped_text_end_char := translate( substr(a_source, l_escaped_text_start + 2, 1), '[{(<', ']})>');
- l_end := instr(a_source,l_escaped_text_end_char||'''',l_escaped_text_start + 3 );
- if l_end > 0 then
- l_end := l_end + 2;
+ else
+ -- Regular string literal: l_remaining starts at the opening quote
+ -- scan from position 2 to skip the opening quote
+ l_end := 2;
+ loop
+ l_end := instr(l_remaining, '''', l_end);
+ exit when l_end = 0;
+ if substr(l_remaining, l_end, 2) = '''''' then
+ l_end := l_end + 2; -- skip escaped quote pair
+ else
+ exit; -- real closing quote
end if;
- end if;
+ end loop;
- if l_end = 0 then
- append_to_clob(l_result, substr(a_source, l_offset, l_length-l_offset));
+ if l_end > 0 then
+ l_line := l_line || substr(l_remaining, 1, l_end);
+ l_remaining := substr(l_remaining, l_end + 1);
else
- append_to_clob(l_result, substr(a_source, l_offset, l_end-l_offset));
+ l_line := l_line || l_remaining;
+ exit;
end if;
+
end if;
- l_offset := l_end;
- if l_offset >= l_ml_comment_start then
- l_ml_comment_start := instr(a_source,'/*',l_offset);
+ end loop;
+
+ return l_line;
+ end;
+
+ function replace_multiline_comments(a_source dbms_preprocessor.source_lines_t)
+ return dbms_preprocessor.source_lines_t
+ is
+ l_result dbms_preprocessor.source_lines_t;
+ l_line varchar2(32767);
+ l_remaining varchar2(32767);
+ l_in_ml_comment boolean := false;
+ l_ml_end binary_integer;
+ l_has_ml_comment boolean := false;
+ begin
+ if a_source.count = 0 then
+ return a_source;
+ end if;
+
+ -- Fast pre-scan to check for presence of multi-line comments; if none, return original source unmodified
+ for i in 1 .. a_source.count loop
+ if instr(a_source(i), '/*') > 0 then
+ l_has_ml_comment := true;
+ exit;
end if;
- if l_offset >= l_comment_start then
- l_comment_start := instr(a_source,'--',l_offset);
+ end loop;
+
+ if not l_has_ml_comment then
+ return a_source;
+ end if;
+
+ for i in 1 .. a_source.count loop
+ l_line := a_source(i);
+
+ -- Fast path: inside multi-line comment
+ if l_in_ml_comment then
+ l_ml_end := instr(l_line, '*/');
+ if l_ml_end > 0 then
+ l_in_ml_comment := false;
+ l_line := substr(l_line, l_ml_end + 2);
+ -- fall through to normal scan
+ else
+ l_result(i) := '';
+ continue;
+ end if;
end if;
- if l_offset >= l_text_start then
- l_text_start := instr(a_source,'''',l_offset);
+
+ -- Fast path: no special tokens on this line
+ if instr(l_line, '/') = 0
+ and instr(l_line, '-') = 0
+ and instr(l_line, '''') = 0
+ then
+ l_result(i) := l_line;
+ continue;
end if;
- if l_offset >= l_escaped_text_start then
- l_escaped_text_start := instr(a_source,q'[q']',l_offset);
+
+ -- Normal scan
+ l_remaining := l_line;
+ l_line := scan_line(l_remaining, l_in_ml_comment);
+ if l_line is null then
+ l_line := '';
end if;
+ l_result(i) := l_line;
end loop;
- append_to_clob(l_result, substr(a_source, l_end));
+
return l_result;
- end;
+ end replace_multiline_comments;
+
+ function strip_create_header_lines(a_source dbms_preprocessor.source_lines_t)
+ return dbms_preprocessor.source_lines_t
+ is
+ l_result dbms_preprocessor.source_lines_t := a_source;
+ l_rebased dbms_preprocessor.source_lines_t;
+ l_create_line pls_integer;
+ l_header_line pls_integer;
+ l_header_pos pls_integer := 0;
+ begin
+ if l_result.count = 0 then
+ return l_result;
+ end if;
+
+ -- remove comment lines that contain "-- create or replace" and find first CREATE
+ for i in 1..l_result.count loop
+ l_result(i) := regexp_replace(l_result(i), '^.*[-]{2,}\s*create(\s+or\s+replace).*$', null, 1, 1, 'i');
+ if l_create_line is null and regexp_like(l_result(i), '(^|[[:space:]])create([[:space:]]|$)', 'i') then
+ l_create_line := i;
+ end if;
+ end loop;
+
+ -- find first occurrence of object keyword after CREATE (may be on later line)
+ if l_create_line is not null then
+ for i in l_create_line..l_result.count loop
+ l_header_pos := regexp_instr(
+ l_result(i),
+ '(^|[[:space:]])(package|type|procedure|function)([[:space:]]|$)',
+ 1, 1, 0, 'i', 2
+ );
+ if l_header_pos > 0 then
+ l_header_line := i;
+ exit;
+ end if;
+ end loop;
+
+ if l_header_line is not null then
+ -- keep from keyword onward on the header line
+ l_result(l_header_line) := substr(l_result(l_header_line), l_header_pos);
+ -- remove "OWNER." from create or replace statement.
+ -- Owner is not supported along with AUTHID - see issue https://github.com/utPLSQL/utPLSQL/issues/1088
+ l_result(l_header_line) := regexp_replace(
+ l_result(l_header_line),
+ '^(package|type|procedure|function)\s+("?[[:alpha:]][[:alnum:]$#_]*"?\.)(.*)',
+ '\1 \3', 1, 1, 'ni'
+ );
+
+ -- rebase so header line becomes line 1 (matches preprocessor expectations)
+ for i in l_header_line .. l_result.count loop
+ l_rebased(i - l_header_line + 1) := l_result(i);
+ end loop;
+ return l_rebased;
+ end if;
+ end if;
+
+ return l_result;
+ end strip_create_header_lines;
function get_child_reporters(a_for_reporters ut_reporters_info := null) return ut_reporters_info is
l_for_reporters ut_reporters_info := a_for_reporters;
diff --git a/source/core/ut_utils.pks b/source/core/ut_utils.pks
index 463aa1604..6f9a3abfd 100644
--- a/source/core/ut_utils.pks
+++ b/source/core/ut_utils.pks
@@ -1,7 +1,7 @@
create or replace package ut_utils authid definer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@ create or replace package ut_utils authid definer is
*
*/
- gc_version constant varchar2(50) := 'v3.1.14.4197-develop';
+ gc_version constant varchar2(50) := 'v3.2.01.4375-develop';
subtype t_executable_type is varchar2(30);
gc_before_all constant t_executable_type := 'beforeall';
@@ -405,7 +405,15 @@ create or replace package ut_utils authid definer is
/**
* Replaces multi-line comments in given source-code with empty lines
*/
- function replace_multiline_comments(a_source clob) return clob;
+ function replace_multiline_comments(a_source dbms_preprocessor.source_lines_t)
+ return dbms_preprocessor.source_lines_t;
+
+ /**
+ * Strips the CREATE header (possibly split across lines) so source starts at
+ * package/type/procedure/function keyword, preserving line numbers.
+ */
+ function strip_create_header_lines(a_source dbms_preprocessor.source_lines_t)
+ return dbms_preprocessor.source_lines_t;
/**
* Returns list of sub-type reporters for given list of super-type reporters
diff --git a/source/create_grants.sql b/source/create_grants.sql
index 0e9f46cc5..0656ec82f 100644
--- a/source/create_grants.sql
+++ b/source/create_grants.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -104,6 +104,7 @@ grant execute on &&ut3_owner..ut_tfs_junit_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_documentation_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_sonar_test_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_realtime_reporter to &ut3_user;
+grant execute on &&ut3_owner..ut_tap_reporter to &ut3_user;
--reporters - coverage
grant execute on &&ut3_owner..ut_coverage_html_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_coverage_sonar_reporter to &ut3_user;
diff --git a/source/create_synonyms.sql b/source/create_synonyms.sql
index fa1c1dc45..3cc642921 100644
--- a/source/create_synonyms.sql
+++ b/source/create_synonyms.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -119,6 +119,7 @@ create &action_type. synonym &ut3_user.ut_tfs_junit_reporter for &&ut3_owner..ut
create &action_type. synonym &ut3_user.ut_documentation_reporter for &&ut3_owner..ut_documentation_reporter;
create &action_type. synonym &ut3_user.ut_sonar_test_reporter for &&ut3_owner..ut_sonar_test_reporter;
create &action_type. synonym &ut3_user.ut_realtime_reporter for &&ut3_owner..ut_realtime_reporter;
+create &action_type. synonym &ut3_user.ut_tap_reporter for &&ut3_owner..ut_tap_reporter;
--reporters - coverage
create &action_type. synonym &ut3_user.ut_coverage_html_reporter for &&ut3_owner..ut_coverage_html_reporter;
create &action_type. synonym &ut3_user.ut_coverage_sonar_reporter for &&ut3_owner..ut_coverage_sonar_reporter;
diff --git a/source/create_synonyms_and_grants_for_public.sql b/source/create_synonyms_and_grants_for_public.sql
index 050162d72..25f14217e 100644
--- a/source/create_synonyms_and_grants_for_public.sql
+++ b/source/create_synonyms_and_grants_for_public.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/create_user_grants.sql b/source/create_user_grants.sql
index 83e594884..c1b81efa4 100644
--- a/source/create_user_grants.sql
+++ b/source/create_user_grants.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/create_user_synonyms.sql b/source/create_user_synonyms.sql
index a1e7a6acc..7b0e49553 100644
--- a/source/create_user_synonyms.sql
+++ b/source/create_user_synonyms.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/create_utplsql_owner.sql b/source/create_utplsql_owner.sql
index d7e4f3040..a5b70ffda 100644
--- a/source/create_utplsql_owner.sql
+++ b/source/create_utplsql_owner.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/define_ut3_owner_param.sql b/source/define_ut3_owner_param.sql
index 259b49712..192e810b7 100644
--- a/source/define_ut3_owner_param.sql
+++ b/source/define_ut3_owner_param.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_compound_data_diff_tmp.sql b/source/expectations/data_values/ut_compound_data_diff_tmp.sql
index c10e8d2e8..edd27f766 100644
--- a/source/expectations/data_values/ut_compound_data_diff_tmp.sql
+++ b/source/expectations/data_values/ut_compound_data_diff_tmp.sql
@@ -1,7 +1,7 @@
create global temporary table ut_compound_data_diff_tmp(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/expectations/data_values/ut_compound_data_helper.pkb b/source/expectations/data_values/ut_compound_data_helper.pkb
index 4517cd43c..42feb2a47 100644
--- a/source/expectations/data_values/ut_compound_data_helper.pkb
+++ b/source/expectations/data_values/ut_compound_data_helper.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_compound_data_helper is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -300,8 +300,8 @@ create or replace package body ut_compound_data_helper is
ut_utils.append_to_clob(a_partition_stmt,' row_number() over (partition by '||l_partition_tmp||' order by '||l_partition_tmp||' ) ');
if a_pk_table.count > 0 then
- -- If key defined do the join or these and where on diffrences
- a_join_by_stmt := ut_utils.table_to_clob(l_join_by_list, ' and ');
+ -- If key defined do the join or these and where on diffrences as well as on duplicate number when rows are same.
+ a_join_by_stmt := ' e."UT3$_Dup#No" = a."UT3$_Dup#No" and '||ut_utils.table_to_clob(l_join_by_list, ' and ');
elsif a_unordered then
-- If no key defined do the join on all columns
a_join_by_stmt := ' e."UT3$_Dup#No" = a."UT3$_Dup#No" and '||ut_utils.table_to_clob(l_equal_list, ' and ');
diff --git a/source/expectations/data_values/ut_compound_data_helper.pks b/source/expectations/data_values/ut_compound_data_helper.pks
index 451cd9bac..dd2e2ec3d 100644
--- a/source/expectations/data_values/ut_compound_data_helper.pks
+++ b/source/expectations/data_values/ut_compound_data_helper.pks
@@ -1,7 +1,7 @@
create or replace package ut_compound_data_helper authid definer is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_compound_data_tmp.sql b/source/expectations/data_values/ut_compound_data_tmp.sql
index 1bfa77fca..01cedd97b 100644
--- a/source/expectations/data_values/ut_compound_data_tmp.sql
+++ b/source/expectations/data_values/ut_compound_data_tmp.sql
@@ -1,7 +1,7 @@
create global temporary table ut_compound_data_tmp(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/expectations/data_values/ut_compound_data_value.tpb b/source/expectations/data_values/ut_compound_data_value.tpb
index 2c52ff8fa..5fd3154b1 100644
--- a/source/expectations/data_values/ut_compound_data_value.tpb
+++ b/source/expectations/data_values/ut_compound_data_value.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_compound_data_value as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_compound_data_value.tps b/source/expectations/data_values/ut_compound_data_value.tps
index c14dadceb..ca2206e2a 100644
--- a/source/expectations/data_values/ut_compound_data_value.tps
+++ b/source/expectations/data_values/ut_compound_data_value.tps
@@ -1,7 +1,7 @@
create or replace type ut_compound_data_value force under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_cursor_column.tpb b/source/expectations/data_values/ut_cursor_column.tpb
index a9fb6b0f4..13fbb86b7 100644
--- a/source/expectations/data_values/ut_cursor_column.tpb
+++ b/source/expectations/data_values/ut_cursor_column.tpb
@@ -1,5 +1,21 @@
create or replace type body ut_cursor_column as
-
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
member procedure init(
self in out nocopy ut_cursor_column,
a_col_name varchar2, a_col_schema_name varchar2,
diff --git a/source/expectations/data_values/ut_cursor_column.tps b/source/expectations/data_values/ut_cursor_column.tps
index 77bf78f01..98ca78b6e 100644
--- a/source/expectations/data_values/ut_cursor_column.tps
+++ b/source/expectations/data_values/ut_cursor_column.tps
@@ -1,7 +1,7 @@
create or replace type ut_cursor_column authid current_user as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_cursor_column_tab.tps b/source/expectations/data_values/ut_cursor_column_tab.tps
index 106023d96..258624691 100644
--- a/source/expectations/data_values/ut_cursor_column_tab.tps
+++ b/source/expectations/data_values/ut_cursor_column_tab.tps
@@ -1,7 +1,7 @@
create or replace type ut_cursor_column_tab as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_cursor_details.tpb b/source/expectations/data_values/ut_cursor_details.tpb
index b823ff944..cce0751d1 100644
--- a/source/expectations/data_values/ut_cursor_details.tpb
+++ b/source/expectations/data_values/ut_cursor_details.tpb
@@ -1,4 +1,21 @@
create or replace type body ut_cursor_details as
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
member function equals( a_other ut_cursor_details, a_match_options ut_matcher_options ) return boolean is
l_diffs integer;
diff --git a/source/expectations/data_values/ut_cursor_details.tps b/source/expectations/data_values/ut_cursor_details.tps
index e7f9405eb..981fda8e5 100644
--- a/source/expectations/data_values/ut_cursor_details.tps
+++ b/source/expectations/data_values/ut_cursor_details.tps
@@ -1,7 +1,7 @@
create or replace type ut_cursor_details authid current_user as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value.tpb b/source/expectations/data_values/ut_data_value.tpb
index 6b1763dd0..6eb352b77 100644
--- a/source/expectations/data_values/ut_data_value.tpb
+++ b/source/expectations/data_values/ut_data_value.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value.tps b/source/expectations/data_values/ut_data_value.tps
index beda3d911..91a07e463 100644
--- a/source/expectations/data_values/ut_data_value.tps
+++ b/source/expectations/data_values/ut_data_value.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value force authid current_user as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_anydata.tpb b/source/expectations/data_values/ut_data_value_anydata.tpb
index f6fbdc840..189d2e032 100644
--- a/source/expectations/data_values/ut_data_value_anydata.tpb
+++ b/source/expectations/data_values/ut_data_value_anydata.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_anydata as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_anydata.tps b/source/expectations/data_values/ut_data_value_anydata.tps
index 60dba5515..ee9725d58 100644
--- a/source/expectations/data_values/ut_data_value_anydata.tps
+++ b/source/expectations/data_values/ut_data_value_anydata.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_anydata under ut_data_value_refcursor(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_blob.tpb b/source/expectations/data_values/ut_data_value_blob.tpb
index e145a8d4f..42e35fc55 100644
--- a/source/expectations/data_values/ut_data_value_blob.tpb
+++ b/source/expectations/data_values/ut_data_value_blob.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_blob as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_blob.tps b/source/expectations/data_values/ut_data_value_blob.tps
index 6df3f3273..08813371e 100644
--- a/source/expectations/data_values/ut_data_value_blob.tps
+++ b/source/expectations/data_values/ut_data_value_blob.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_blob under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_boolean.tpb b/source/expectations/data_values/ut_data_value_boolean.tpb
index 867c3c19c..84af1c34c 100644
--- a/source/expectations/data_values/ut_data_value_boolean.tpb
+++ b/source/expectations/data_values/ut_data_value_boolean.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_boolean as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_boolean.tps b/source/expectations/data_values/ut_data_value_boolean.tps
index e25b6e0fd..4d7af837b 100644
--- a/source/expectations/data_values/ut_data_value_boolean.tps
+++ b/source/expectations/data_values/ut_data_value_boolean.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_boolean under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_clob.tpb b/source/expectations/data_values/ut_data_value_clob.tpb
index f8a53a035..2dd00c023 100644
--- a/source/expectations/data_values/ut_data_value_clob.tpb
+++ b/source/expectations/data_values/ut_data_value_clob.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_clob as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_clob.tps b/source/expectations/data_values/ut_data_value_clob.tps
index 6869798d1..abcc635c9 100644
--- a/source/expectations/data_values/ut_data_value_clob.tps
+++ b/source/expectations/data_values/ut_data_value_clob.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_clob under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_date.tpb b/source/expectations/data_values/ut_data_value_date.tpb
index 20424d193..dc1c4d22f 100644
--- a/source/expectations/data_values/ut_data_value_date.tpb
+++ b/source/expectations/data_values/ut_data_value_date.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_date as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_date.tps b/source/expectations/data_values/ut_data_value_date.tps
index f64a577e0..8db1850c2 100644
--- a/source/expectations/data_values/ut_data_value_date.tps
+++ b/source/expectations/data_values/ut_data_value_date.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_date under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_dsinterval.tpb b/source/expectations/data_values/ut_data_value_dsinterval.tpb
index 026d4970f..bcfb48a2b 100644
--- a/source/expectations/data_values/ut_data_value_dsinterval.tpb
+++ b/source/expectations/data_values/ut_data_value_dsinterval.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_dsinterval as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_dsinterval.tps b/source/expectations/data_values/ut_data_value_dsinterval.tps
index 6f5cb708c..5add4adf9 100644
--- a/source/expectations/data_values/ut_data_value_dsinterval.tps
+++ b/source/expectations/data_values/ut_data_value_dsinterval.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_dsinterval under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_json.tpb b/source/expectations/data_values/ut_data_value_json.tpb
index b703af181..9f65ef618 100644
--- a/source/expectations/data_values/ut_data_value_json.tpb
+++ b/source/expectations/data_values/ut_data_value_json.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_json as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_json.tps b/source/expectations/data_values/ut_data_value_json.tps
index 3b77e54eb..46a78e00e 100644
--- a/source/expectations/data_values/ut_data_value_json.tps
+++ b/source/expectations/data_values/ut_data_value_json.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_json under ut_compound_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_number.tpb b/source/expectations/data_values/ut_data_value_number.tpb
index 382e6e9aa..53b8ce413 100644
--- a/source/expectations/data_values/ut_data_value_number.tpb
+++ b/source/expectations/data_values/ut_data_value_number.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_number as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_number.tps b/source/expectations/data_values/ut_data_value_number.tps
index 86d68f356..914252b9f 100644
--- a/source/expectations/data_values/ut_data_value_number.tps
+++ b/source/expectations/data_values/ut_data_value_number.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_number under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_refcursor.tpb b/source/expectations/data_values/ut_data_value_refcursor.tpb
index a4f0cf7a0..ee1408b56 100644
--- a/source/expectations/data_values/ut_data_value_refcursor.tpb
+++ b/source/expectations/data_values/ut_data_value_refcursor.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_refcursor as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_refcursor.tps b/source/expectations/data_values/ut_data_value_refcursor.tps
index 594695e32..7d336bd78 100644
--- a/source/expectations/data_values/ut_data_value_refcursor.tps
+++ b/source/expectations/data_values/ut_data_value_refcursor.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_refcursor under ut_compound_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_timestamp.tpb b/source/expectations/data_values/ut_data_value_timestamp.tpb
index 318f799a3..bfb0ab734 100644
--- a/source/expectations/data_values/ut_data_value_timestamp.tpb
+++ b/source/expectations/data_values/ut_data_value_timestamp.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_timestamp as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_timestamp.tps b/source/expectations/data_values/ut_data_value_timestamp.tps
index c047e3c79..5c1f0b879 100644
--- a/source/expectations/data_values/ut_data_value_timestamp.tps
+++ b/source/expectations/data_values/ut_data_value_timestamp.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_timestamp under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_timestamp_ltz.tpb b/source/expectations/data_values/ut_data_value_timestamp_ltz.tpb
index 6127de5f1..ba1610d31 100644
--- a/source/expectations/data_values/ut_data_value_timestamp_ltz.tpb
+++ b/source/expectations/data_values/ut_data_value_timestamp_ltz.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_timestamp_ltz as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_timestamp_ltz.tps b/source/expectations/data_values/ut_data_value_timestamp_ltz.tps
index 7bb296bc9..51bf615af 100644
--- a/source/expectations/data_values/ut_data_value_timestamp_ltz.tps
+++ b/source/expectations/data_values/ut_data_value_timestamp_ltz.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_timestamp_ltz under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_timestamp_tz.tpb b/source/expectations/data_values/ut_data_value_timestamp_tz.tpb
index d5d5cdd13..ea0d28090 100644
--- a/source/expectations/data_values/ut_data_value_timestamp_tz.tpb
+++ b/source/expectations/data_values/ut_data_value_timestamp_tz.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_timestamp_tz as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_timestamp_tz.tps b/source/expectations/data_values/ut_data_value_timestamp_tz.tps
index 01cf11124..435dc8df0 100644
--- a/source/expectations/data_values/ut_data_value_timestamp_tz.tps
+++ b/source/expectations/data_values/ut_data_value_timestamp_tz.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_timestamp_tz under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_varchar2.tpb b/source/expectations/data_values/ut_data_value_varchar2.tpb
index d04398697..923ef7b9e 100644
--- a/source/expectations/data_values/ut_data_value_varchar2.tpb
+++ b/source/expectations/data_values/ut_data_value_varchar2.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_varchar2 as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_varchar2.tps b/source/expectations/data_values/ut_data_value_varchar2.tps
index 3fbeb378b..8db175d90 100644
--- a/source/expectations/data_values/ut_data_value_varchar2.tps
+++ b/source/expectations/data_values/ut_data_value_varchar2.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_varchar2 under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_xmltype.tpb b/source/expectations/data_values/ut_data_value_xmltype.tpb
index 4b21a8937..dc518da54 100644
--- a/source/expectations/data_values/ut_data_value_xmltype.tpb
+++ b/source/expectations/data_values/ut_data_value_xmltype.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_xmltype as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_xmltype.tps b/source/expectations/data_values/ut_data_value_xmltype.tps
index 9ba738b88..3929b4d7c 100644
--- a/source/expectations/data_values/ut_data_value_xmltype.tps
+++ b/source/expectations/data_values/ut_data_value_xmltype.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_xmltype under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_yminterval.tpb b/source/expectations/data_values/ut_data_value_yminterval.tpb
index a3a1e7a2f..abba0bc20 100644
--- a/source/expectations/data_values/ut_data_value_yminterval.tpb
+++ b/source/expectations/data_values/ut_data_value_yminterval.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_data_value_yminterval as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_data_value_yminterval.tps b/source/expectations/data_values/ut_data_value_yminterval.tps
index c9ad2e776..734ed545d 100644
--- a/source/expectations/data_values/ut_data_value_yminterval.tps
+++ b/source/expectations/data_values/ut_data_value_yminterval.tps
@@ -1,7 +1,7 @@
create or replace type ut_data_value_yminterval under ut_data_value(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_json_data_diff_tmp.sql b/source/expectations/data_values/ut_json_data_diff_tmp.sql
index 5ff3440d8..4eda07d7c 100644
--- a/source/expectations/data_values/ut_json_data_diff_tmp.sql
+++ b/source/expectations/data_values/ut_json_data_diff_tmp.sql
@@ -1,7 +1,7 @@
create global temporary table ut_json_data_diff_tmp(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
diff --git a/source/expectations/data_values/ut_json_leaf.tpb b/source/expectations/data_values/ut_json_leaf.tpb
index 83f1009ef..b7a20f11b 100644
--- a/source/expectations/data_values/ut_json_leaf.tpb
+++ b/source/expectations/data_values/ut_json_leaf.tpb
@@ -1,5 +1,21 @@
create or replace type body ut_json_leaf as
-
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
member procedure init( self in out nocopy ut_json_leaf,
a_element_name varchar2, a_element_value varchar2,a_parent_name varchar2,
a_access_path varchar2, a_hierarchy_level integer, a_index_position integer, a_json_type in varchar2,
diff --git a/source/expectations/data_values/ut_json_leaf.tps b/source/expectations/data_values/ut_json_leaf.tps
index 8aa8afd6a..70d4df71d 100644
--- a/source/expectations/data_values/ut_json_leaf.tps
+++ b/source/expectations/data_values/ut_json_leaf.tps
@@ -1,7 +1,7 @@
create or replace type ut_json_leaf authid current_user as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_json_leaf_tab.tps b/source/expectations/data_values/ut_json_leaf_tab.tps
index 395ab5d9e..10fd3eef6 100644
--- a/source/expectations/data_values/ut_json_leaf_tab.tps
+++ b/source/expectations/data_values/ut_json_leaf_tab.tps
@@ -1,7 +1,7 @@
create or replace type ut_json_leaf_tab as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_json_tree_details.tpb b/source/expectations/data_values/ut_json_tree_details.tpb
index a333ea71c..f82aac5a0 100644
--- a/source/expectations/data_values/ut_json_tree_details.tpb
+++ b/source/expectations/data_values/ut_json_tree_details.tpb
@@ -1,4 +1,20 @@
create or replace type body ut_json_tree_details as
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
member function get_json_type(a_json_piece json_element_t) return varchar2 is
begin
diff --git a/source/expectations/data_values/ut_json_tree_details.tps b/source/expectations/data_values/ut_json_tree_details.tps
index 20ac2fdcc..9c37f99ea 100644
--- a/source/expectations/data_values/ut_json_tree_details.tps
+++ b/source/expectations/data_values/ut_json_tree_details.tps
@@ -1,7 +1,7 @@
create or replace type ut_json_tree_details force as object (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_key_anyval_pair.tps b/source/expectations/data_values/ut_key_anyval_pair.tps
index d1068f109..7935ffa09 100644
--- a/source/expectations/data_values/ut_key_anyval_pair.tps
+++ b/source/expectations/data_values/ut_key_anyval_pair.tps
@@ -1,7 +1,7 @@
create or replace type ut_key_anyval_pair force as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_key_anyval_pairs.tps b/source/expectations/data_values/ut_key_anyval_pairs.tps
index 7e10bf50f..2cc1ff225 100644
--- a/source/expectations/data_values/ut_key_anyval_pairs.tps
+++ b/source/expectations/data_values/ut_key_anyval_pairs.tps
@@ -1,7 +1,7 @@
create or replace type ut_key_anyval_pairs as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_key_anyvalues.tpb b/source/expectations/data_values/ut_key_anyvalues.tpb
index d30d8a841..67b877874 100644
--- a/source/expectations/data_values/ut_key_anyvalues.tpb
+++ b/source/expectations/data_values/ut_key_anyvalues.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_key_anyvalues as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/data_values/ut_key_anyvalues.tps b/source/expectations/data_values/ut_key_anyvalues.tps
index 8c672bd00..df14a8101 100644
--- a/source/expectations/data_values/ut_key_anyvalues.tps
+++ b/source/expectations/data_values/ut_key_anyvalues.tps
@@ -1,7 +1,7 @@
create or replace type ut_key_anyvalues under ut_event_item (
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_between.tpb b/source/expectations/matchers/ut_be_between.tpb
index 6aea96f55..787be701b 100644
--- a/source/expectations/matchers/ut_be_between.tpb
+++ b/source/expectations/matchers/ut_be_between.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_between is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_between.tps b/source/expectations/matchers/ut_be_between.tps
index 9e984085b..a08d7a823 100644
--- a/source/expectations/matchers/ut_be_between.tps
+++ b/source/expectations/matchers/ut_be_between.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_between under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_empty.tpb b/source/expectations/matchers/ut_be_empty.tpb
index e5e02f6b2..bac77166a 100644
--- a/source/expectations/matchers/ut_be_empty.tpb
+++ b/source/expectations/matchers/ut_be_empty.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_empty as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_empty.tps b/source/expectations/matchers/ut_be_empty.tps
index 9e9f899d0..948e771a3 100644
--- a/source/expectations/matchers/ut_be_empty.tps
+++ b/source/expectations/matchers/ut_be_empty.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_empty under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_false.tpb b/source/expectations/matchers/ut_be_false.tpb
index 4cc88600a..5a5421e8b 100644
--- a/source/expectations/matchers/ut_be_false.tpb
+++ b/source/expectations/matchers/ut_be_false.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_false as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_false.tps b/source/expectations/matchers/ut_be_false.tps
index ede510719..b6906ece8 100644
--- a/source/expectations/matchers/ut_be_false.tps
+++ b/source/expectations/matchers/ut_be_false.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_false under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_greater_or_equal.tpb b/source/expectations/matchers/ut_be_greater_or_equal.tpb
index 1c2a19c09..fbd165b1d 100644
--- a/source/expectations/matchers/ut_be_greater_or_equal.tpb
+++ b/source/expectations/matchers/ut_be_greater_or_equal.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_greater_or_equal AS
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_greater_or_equal.tps b/source/expectations/matchers/ut_be_greater_or_equal.tps
index b3ab54ff1..e87740134 100644
--- a/source/expectations/matchers/ut_be_greater_or_equal.tps
+++ b/source/expectations/matchers/ut_be_greater_or_equal.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_greater_or_equal under ut_comparison_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_greater_than.tpb b/source/expectations/matchers/ut_be_greater_than.tpb
index 9cce79119..f59c2f0be 100644
--- a/source/expectations/matchers/ut_be_greater_than.tpb
+++ b/source/expectations/matchers/ut_be_greater_than.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_greater_than AS
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_greater_than.tps b/source/expectations/matchers/ut_be_greater_than.tps
index a5a44692d..b66009bab 100644
--- a/source/expectations/matchers/ut_be_greater_than.tps
+++ b/source/expectations/matchers/ut_be_greater_than.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_greater_than under ut_comparison_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_less_or_equal.tpb b/source/expectations/matchers/ut_be_less_or_equal.tpb
index 6acec1dda..24c1f9c96 100644
--- a/source/expectations/matchers/ut_be_less_or_equal.tpb
+++ b/source/expectations/matchers/ut_be_less_or_equal.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_less_or_equal AS
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_less_or_equal.tps b/source/expectations/matchers/ut_be_less_or_equal.tps
index 118611a41..5114644b0 100644
--- a/source/expectations/matchers/ut_be_less_or_equal.tps
+++ b/source/expectations/matchers/ut_be_less_or_equal.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_less_or_equal under ut_comparison_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_less_than.tpb b/source/expectations/matchers/ut_be_less_than.tpb
index 7608e4917..011ad392f 100644
--- a/source/expectations/matchers/ut_be_less_than.tpb
+++ b/source/expectations/matchers/ut_be_less_than.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_less_than as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_less_than.tps b/source/expectations/matchers/ut_be_less_than.tps
index b652de789..81a25144d 100644
--- a/source/expectations/matchers/ut_be_less_than.tps
+++ b/source/expectations/matchers/ut_be_less_than.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_less_than under ut_comparison_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_like.tpb b/source/expectations/matchers/ut_be_like.tpb
index 6865c2942..953adbe5b 100644
--- a/source/expectations/matchers/ut_be_like.tpb
+++ b/source/expectations/matchers/ut_be_like.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_like as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_like.tps b/source/expectations/matchers/ut_be_like.tps
index dae93a1d9..1d907ed03 100644
--- a/source/expectations/matchers/ut_be_like.tps
+++ b/source/expectations/matchers/ut_be_like.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_like under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_not_null.tpb b/source/expectations/matchers/ut_be_not_null.tpb
index 194e2ea32..df9366fa7 100644
--- a/source/expectations/matchers/ut_be_not_null.tpb
+++ b/source/expectations/matchers/ut_be_not_null.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_not_null as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_not_null.tps b/source/expectations/matchers/ut_be_not_null.tps
index 196aac9fb..6cd11fc64 100644
--- a/source/expectations/matchers/ut_be_not_null.tps
+++ b/source/expectations/matchers/ut_be_not_null.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_not_null under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_null.tpb b/source/expectations/matchers/ut_be_null.tpb
index 8c672791b..d806bba34 100644
--- a/source/expectations/matchers/ut_be_null.tpb
+++ b/source/expectations/matchers/ut_be_null.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_null as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_null.tps b/source/expectations/matchers/ut_be_null.tps
index 3b2d6ac84..28f3ac796 100644
--- a/source/expectations/matchers/ut_be_null.tps
+++ b/source/expectations/matchers/ut_be_null.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_null under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_true.tpb b/source/expectations/matchers/ut_be_true.tpb
index fe78b4e22..442e57d7f 100644
--- a/source/expectations/matchers/ut_be_true.tpb
+++ b/source/expectations/matchers/ut_be_true.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_true as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_true.tps b/source/expectations/matchers/ut_be_true.tps
index 8b5491e39..b55fa484d 100644
--- a/source/expectations/matchers/ut_be_true.tps
+++ b/source/expectations/matchers/ut_be_true.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_true under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_within.tpb b/source/expectations/matchers/ut_be_within.tpb
index e2aa792d0..f77e9feec 100644
--- a/source/expectations/matchers/ut_be_within.tpb
+++ b/source/expectations/matchers/ut_be_within.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_within as
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_within.tps b/source/expectations/matchers/ut_be_within.tps
index 576f9ff37..06a685832 100644
--- a/source/expectations/matchers/ut_be_within.tps
+++ b/source/expectations/matchers/ut_be_within.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_within force under ut_be_within_pct(
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_within_helper.pkb b/source/expectations/matchers/ut_be_within_helper.pkb
index 5dd82baa2..561bf230b 100644
--- a/source/expectations/matchers/ut_be_within_helper.pkb
+++ b/source/expectations/matchers/ut_be_within_helper.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_be_within_helper as
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_within_helper.pks b/source/expectations/matchers/ut_be_within_helper.pks
index 41737cc8f..b8480e249 100644
--- a/source/expectations/matchers/ut_be_within_helper.pks
+++ b/source/expectations/matchers/ut_be_within_helper.pks
@@ -1,7 +1,7 @@
create or replace package ut_be_within_helper authid definer as
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_within_pct.tpb b/source/expectations/matchers/ut_be_within_pct.tpb
index 8b280ffff..ad821d72c 100644
--- a/source/expectations/matchers/ut_be_within_pct.tpb
+++ b/source/expectations/matchers/ut_be_within_pct.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_be_within_pct as
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_be_within_pct.tps b/source/expectations/matchers/ut_be_within_pct.tps
index 499e9a2d8..645e9c485 100644
--- a/source/expectations/matchers/ut_be_within_pct.tps
+++ b/source/expectations/matchers/ut_be_within_pct.tps
@@ -1,7 +1,7 @@
create or replace type ut_be_within_pct force under ut_comparison_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@ create or replace type ut_be_within_pct force under ut_comparison_matcher(
limitations under the License.
*/
-
/**
* Holds information about mather options
*/
diff --git a/source/expectations/matchers/ut_comparison_matcher.tpb b/source/expectations/matchers/ut_comparison_matcher.tpb
index 20ed35927..b7cef4f59 100644
--- a/source/expectations/matchers/ut_comparison_matcher.tpb
+++ b/source/expectations/matchers/ut_comparison_matcher.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_comparison_matcher as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_comparison_matcher.tps b/source/expectations/matchers/ut_comparison_matcher.tps
index 68ecb4462..11b46d47c 100644
--- a/source/expectations/matchers/ut_comparison_matcher.tps
+++ b/source/expectations/matchers/ut_comparison_matcher.tps
@@ -1,7 +1,7 @@
create or replace type ut_comparison_matcher under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_contain.tpb b/source/expectations/matchers/ut_contain.tpb
index c9691f731..a8eb71ecd 100644
--- a/source/expectations/matchers/ut_contain.tpb
+++ b/source/expectations/matchers/ut_contain.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_contain as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_contain.tps b/source/expectations/matchers/ut_contain.tps
index e572edf62..6d7c525c6 100644
--- a/source/expectations/matchers/ut_contain.tps
+++ b/source/expectations/matchers/ut_contain.tps
@@ -1,7 +1,7 @@
create or replace type ut_contain under ut_equal(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_equal.tpb b/source/expectations/matchers/ut_equal.tpb
index d514e34d0..f5932b2ad 100644
--- a/source/expectations/matchers/ut_equal.tpb
+++ b/source/expectations/matchers/ut_equal.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_equal as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_equal.tps b/source/expectations/matchers/ut_equal.tps
index e48b797ed..e23eaf23b 100644
--- a/source/expectations/matchers/ut_equal.tps
+++ b/source/expectations/matchers/ut_equal.tps
@@ -1,7 +1,7 @@
create or replace type ut_equal force under ut_comparison_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_have_count.tpb b/source/expectations/matchers/ut_have_count.tpb
index 457cd6272..0d4cfbcc0 100644
--- a/source/expectations/matchers/ut_have_count.tpb
+++ b/source/expectations/matchers/ut_have_count.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_have_count as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_have_count.tps b/source/expectations/matchers/ut_have_count.tps
index d48dc44c8..bd075e8f4 100644
--- a/source/expectations/matchers/ut_have_count.tps
+++ b/source/expectations/matchers/ut_have_count.tps
@@ -1,7 +1,7 @@
create or replace type ut_have_count under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_match.tpb b/source/expectations/matchers/ut_match.tpb
index 3c7a71402..de645a135 100644
--- a/source/expectations/matchers/ut_match.tpb
+++ b/source/expectations/matchers/ut_match.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_match as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_match.tps b/source/expectations/matchers/ut_match.tps
index ee51a4c28..ababff18f 100644
--- a/source/expectations/matchers/ut_match.tps
+++ b/source/expectations/matchers/ut_match.tps
@@ -1,7 +1,7 @@
create or replace type ut_match under ut_matcher(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_matcher.tpb b/source/expectations/matchers/ut_matcher.tpb
index 6b5b98465..07e082a71 100644
--- a/source/expectations/matchers/ut_matcher.tpb
+++ b/source/expectations/matchers/ut_matcher.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_matcher as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_matcher.tps b/source/expectations/matchers/ut_matcher.tps
index a034e4ed2..2551ce003 100644
--- a/source/expectations/matchers/ut_matcher.tps
+++ b/source/expectations/matchers/ut_matcher.tps
@@ -1,7 +1,7 @@
create or replace type ut_matcher under ut_matcher_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_matcher_base.tps b/source/expectations/matchers/ut_matcher_base.tps
index ef7fd98a2..c6d44468d 100644
--- a/source/expectations/matchers/ut_matcher_base.tps
+++ b/source/expectations/matchers/ut_matcher_base.tps
@@ -1,4 +1,21 @@
create or replace type ut_matcher_base force authid current_user as object(
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
self_type varchar2(250)
)
not final not instantiable
diff --git a/source/expectations/matchers/ut_matcher_options.tpb b/source/expectations/matchers/ut_matcher_options.tpb
index 8730c204b..1acb4405b 100644
--- a/source/expectations/matchers/ut_matcher_options.tpb
+++ b/source/expectations/matchers/ut_matcher_options.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_matcher_options as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_matcher_options.tps b/source/expectations/matchers/ut_matcher_options.tps
index 276cad2ec..835316e7c 100644
--- a/source/expectations/matchers/ut_matcher_options.tps
+++ b/source/expectations/matchers/ut_matcher_options.tps
@@ -1,7 +1,7 @@
create or replace type ut_matcher_options authid current_user as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_matcher_options_items.tpb b/source/expectations/matchers/ut_matcher_options_items.tpb
index 92da588ce..921d3ecd2 100644
--- a/source/expectations/matchers/ut_matcher_options_items.tpb
+++ b/source/expectations/matchers/ut_matcher_options_items.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_matcher_options_items is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/matchers/ut_matcher_options_items.tps b/source/expectations/matchers/ut_matcher_options_items.tps
index 53787070d..73c2bb92d 100644
--- a/source/expectations/matchers/ut_matcher_options_items.tps
+++ b/source/expectations/matchers/ut_matcher_options_items.tps
@@ -1,7 +1,7 @@
create or replace type ut_matcher_options_items authid current_user as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/ut_expectation.tpb b/source/expectations/ut_expectation.tpb
index 309759d48..12aef603a 100644
--- a/source/expectations/ut_expectation.tpb
+++ b/source/expectations/ut_expectation.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_expectation as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/ut_expectation.tps b/source/expectations/ut_expectation.tps
index 30fe985d3..b015a95a7 100644
--- a/source/expectations/ut_expectation.tps
+++ b/source/expectations/ut_expectation.tps
@@ -1,7 +1,7 @@
create or replace type ut_expectation force under ut_expectation_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/ut_expectation_base.tpb b/source/expectations/ut_expectation_base.tpb
index 20b3e7a95..3d6e9b469 100644
--- a/source/expectations/ut_expectation_base.tpb
+++ b/source/expectations/ut_expectation_base.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_expectation_base as
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@ create or replace type body ut_expectation_base as
See the License for the specific language governing permissions and
limitations under the License.
*/
+
member procedure to_(self in ut_expectation_base, a_matcher ut_matcher_base) is
l_expectation_result boolean;
l_matcher ut_matcher := treat(a_matcher as ut_matcher);
diff --git a/source/expectations/ut_expectation_base.tps b/source/expectations/ut_expectation_base.tps
index a542d26ea..24e180b92 100644
--- a/source/expectations/ut_expectation_base.tps
+++ b/source/expectations/ut_expectation_base.tps
@@ -1,7 +1,7 @@
create or replace type ut_expectation_base authid current_user as object(
/*
utPLSQL - Version 3
- Copyright 2016 - 2019 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@ create or replace type ut_expectation_base authid current_user as object(
See the License for the specific language governing permissions and
limitations under the License.
*/
+
actual_data ut_data_value,
description varchar2(4000 char),
diff --git a/source/expectations/ut_expectation_compound.tpb b/source/expectations/ut_expectation_compound.tpb
index 6fc2e2647..1131885b0 100644
--- a/source/expectations/ut_expectation_compound.tpb
+++ b/source/expectations/ut_expectation_compound.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_expectation_compound as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/ut_expectation_compound.tps b/source/expectations/ut_expectation_compound.tps
index 46da23fea..ebf534222 100644
--- a/source/expectations/ut_expectation_compound.tps
+++ b/source/expectations/ut_expectation_compound.tps
@@ -1,7 +1,7 @@
create or replace type ut_expectation_compound under ut_expectation(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/ut_expectation_json.tpb b/source/expectations/ut_expectation_json.tpb
index b71e8ea83..90a3a3d31 100644
--- a/source/expectations/ut_expectation_json.tpb
+++ b/source/expectations/ut_expectation_json.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_expectation_json as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/expectations/ut_expectation_json.tps b/source/expectations/ut_expectation_json.tps
index 561c5d11f..d873cc99c 100644
--- a/source/expectations/ut_expectation_json.tps
+++ b/source/expectations/ut_expectation_json.tps
@@ -1,7 +1,7 @@
create or replace type ut_expectation_json under ut_expectation(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/install.sql b/source/install.sql
index 827213e6c..a2c73ef17 100644
--- a/source/install.sql
+++ b/source/install.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
@@ -346,6 +346,8 @@ prompt Installing DBMSPLSQL Tables objects into &&ut3_owner schema
@@install_component.sql 'reporters/ut_xunit_reporter.tpb'
@@install_component.sql 'reporters/ut_sonar_test_reporter.tps'
@@install_component.sql 'reporters/ut_sonar_test_reporter.tpb'
+@@install_component.sql 'reporters/ut_tap_reporter.tps'
+@@install_component.sql 'reporters/ut_tap_reporter.tpb'
@@install_component.sql 'reporters/ut_coverage_html_reporter.tps'
@@install_component.sql 'reporters/ut_coverage_report_html_helper.pks'
diff --git a/source/install_above_12_1.sql b/source/install_above_12_1.sql
index 69e47ce9a..5a1943358 100644
--- a/source/install_above_12_1.sql
+++ b/source/install_above_12_1.sql
@@ -1,3 +1,20 @@
+/*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
def FILE_NAME = '&&1'
column SCRIPT_NAME new_value SCRIPT_NAME noprint
diff --git a/source/install_component.sql b/source/install_component.sql
index 373c85c54..1189df496 100644
--- a/source/install_component.sql
+++ b/source/install_component.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/install_ddl_trigger.sql b/source/install_ddl_trigger.sql
index bc147c2be..b23b4bc63 100644
--- a/source/install_ddl_trigger.sql
+++ b/source/install_ddl_trigger.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/install_headless.sql b/source/install_headless.sql
index 183262675..be1e5becf 100644
--- a/source/install_headless.sql
+++ b/source/install_headless.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/install_headless_with_trigger.sql b/source/install_headless_with_trigger.sql
index 76ae48ccb..2c05403c5 100644
--- a/source/install_headless_with_trigger.sql
+++ b/source/install_headless_with_trigger.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_ansiconsole_helper.pkb b/source/reporters/ut_ansiconsole_helper.pkb
index 53e6bc6aa..46960cf5c 100644
--- a/source/reporters/ut_ansiconsole_helper.pkb
+++ b/source/reporters/ut_ansiconsole_helper.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_ansiconsole_helper as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_ansiconsole_helper.pks b/source/reporters/ut_ansiconsole_helper.pks
index 217d36a49..fd4549965 100644
--- a/source/reporters/ut_ansiconsole_helper.pks
+++ b/source/reporters/ut_ansiconsole_helper.pks
@@ -1,7 +1,7 @@
create or replace package ut_ansiconsole_helper as
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_cobertura_reporter.tpb b/source/reporters/ut_coverage_cobertura_reporter.tpb
index d833ac0aa..833ca09be 100644
--- a/source/reporters/ut_coverage_cobertura_reporter.tpb
+++ b/source/reporters/ut_coverage_cobertura_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_coverage_cobertura_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_cobertura_reporter.tps b/source/reporters/ut_coverage_cobertura_reporter.tps
index 1292e60fb..ee2d9b71d 100644
--- a/source/reporters/ut_coverage_cobertura_reporter.tps
+++ b/source/reporters/ut_coverage_cobertura_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_coverage_cobertura_reporter under ut_coverage_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_html_reporter.tpb b/source/reporters/ut_coverage_html_reporter.tpb
index b1f9f6651..253c067e5 100644
--- a/source/reporters/ut_coverage_html_reporter.tpb
+++ b/source/reporters/ut_coverage_html_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_coverage_html_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_html_reporter.tps b/source/reporters/ut_coverage_html_reporter.tps
index 42f2fd4e3..db65e1e00 100644
--- a/source/reporters/ut_coverage_html_reporter.tps
+++ b/source/reporters/ut_coverage_html_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_coverage_html_reporter under ut_coverage_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_report_html_helper.pkb b/source/reporters/ut_coverage_report_html_helper.pkb
index f7e0b5ed0..7ebf891f9 100644
--- a/source/reporters/ut_coverage_report_html_helper.pkb
+++ b/source/reporters/ut_coverage_report_html_helper.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_coverage_report_html_helper is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_report_html_helper.pks b/source/reporters/ut_coverage_report_html_helper.pks
index 42a59c123..c028168a8 100644
--- a/source/reporters/ut_coverage_report_html_helper.pks
+++ b/source/reporters/ut_coverage_report_html_helper.pks
@@ -1,7 +1,7 @@
create or replace package ut_coverage_report_html_helper authid current_user is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_sonar_reporter.tpb b/source/reporters/ut_coverage_sonar_reporter.tpb
index 1861a9be3..8148fc7fc 100644
--- a/source/reporters/ut_coverage_sonar_reporter.tpb
+++ b/source/reporters/ut_coverage_sonar_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_coverage_sonar_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coverage_sonar_reporter.tps b/source/reporters/ut_coverage_sonar_reporter.tps
index 715bdefd2..b5e964a3a 100644
--- a/source/reporters/ut_coverage_sonar_reporter.tps
+++ b/source/reporters/ut_coverage_sonar_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_coverage_sonar_reporter under ut_coverage_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coveralls_reporter.tpb b/source/reporters/ut_coveralls_reporter.tpb
index 14672303e..fc459c906 100644
--- a/source/reporters/ut_coveralls_reporter.tpb
+++ b/source/reporters/ut_coveralls_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_coveralls_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_coveralls_reporter.tps b/source/reporters/ut_coveralls_reporter.tps
index 74363b751..e547793d1 100644
--- a/source/reporters/ut_coveralls_reporter.tps
+++ b/source/reporters/ut_coveralls_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_coveralls_reporter under ut_coverage_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_debug_reporter.tpb b/source/reporters/ut_debug_reporter.tpb
index 879725172..b17f039ea 100644
--- a/source/reporters/ut_debug_reporter.tpb
+++ b/source/reporters/ut_debug_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_debug_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_debug_reporter.tps b/source/reporters/ut_debug_reporter.tps
index 2123f19cc..85c0eeb54 100644
--- a/source/reporters/ut_debug_reporter.tps
+++ b/source/reporters/ut_debug_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_debug_reporter under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_documentation_reporter.tpb b/source/reporters/ut_documentation_reporter.tpb
index e8c0a4e31..489b6efd2 100644
--- a/source/reporters/ut_documentation_reporter.tpb
+++ b/source/reporters/ut_documentation_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_documentation_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_documentation_reporter.tps b/source/reporters/ut_documentation_reporter.tps
index 422225117..23b86226f 100644
--- a/source/reporters/ut_documentation_reporter.tps
+++ b/source/reporters/ut_documentation_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_documentation_reporter under ut_console_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_junit_reporter.tpb b/source/reporters/ut_junit_reporter.tpb
index 3bceb52a4..a2cffd287 100644
--- a/source/reporters/ut_junit_reporter.tpb
+++ b/source/reporters/ut_junit_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_junit_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_junit_reporter.tps b/source/reporters/ut_junit_reporter.tps
index 6cdaff1b9..5999c33f5 100644
--- a/source/reporters/ut_junit_reporter.tps
+++ b/source/reporters/ut_junit_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_junit_reporter force under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_realtime_reporter.tpb b/source/reporters/ut_realtime_reporter.tpb
index 9c2af57ec..fac7cd9b8 100644
--- a/source/reporters/ut_realtime_reporter.tpb
+++ b/source/reporters/ut_realtime_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_realtime_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_realtime_reporter.tps b/source/reporters/ut_realtime_reporter.tps
index 0501006e4..5ab350162 100644
--- a/source/reporters/ut_realtime_reporter.tps
+++ b/source/reporters/ut_realtime_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_realtime_reporter force under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_sonar_test_reporter.tpb b/source/reporters/ut_sonar_test_reporter.tpb
index 7c46879d2..dfa6a7421 100644
--- a/source/reporters/ut_sonar_test_reporter.tpb
+++ b/source/reporters/ut_sonar_test_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_sonar_test_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_sonar_test_reporter.tps b/source/reporters/ut_sonar_test_reporter.tps
index ac3b16bd1..d9f98071d 100644
--- a/source/reporters/ut_sonar_test_reporter.tps
+++ b/source/reporters/ut_sonar_test_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_sonar_test_reporter under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_tap_reporter.tpb b/source/reporters/ut_tap_reporter.tpb
new file mode 100644
index 000000000..02246b97e
--- /dev/null
+++ b/source/reporters/ut_tap_reporter.tpb
@@ -0,0 +1,139 @@
+create or replace type body ut_tap_reporter is
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+ constructor function ut_tap_reporter(self in out nocopy ut_tap_reporter) return self as result is
+ begin
+ self.init($$plsql_unit);
+ self.lvl := 0;
+ return;
+ end ut_tap_reporter;
+
+ member procedure print_comment(self in out nocopy ut_tap_reporter, a_comment clob) as
+ begin
+ self.print_clob(regexp_replace(a_comment, '^', '# ', 1, 0, 'm'));
+ end print_comment;
+
+ member function escape_special_chars(self in out nocopy ut_tap_reporter, a_string_to_escape clob) return clob as
+ begin
+ return regexp_replace(a_string_to_escape, '([\\#])', '\\\1');
+ end escape_special_chars;
+
+ overriding member procedure before_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as
+ begin
+ self.print_text('# Subtest: ' || self.escape_special_chars(coalesce(a_suite.description, a_suite.name)));
+ lvl := lvl + 2;
+ self.print_text('1..' || a_suite.items.count);
+ end before_calling_suite;
+
+
+ overriding member procedure after_calling_test(self in out nocopy ut_tap_reporter, a_test ut_test) as
+ l_message varchar2(4000);
+ l_test_name varchar2(4000) := self.escape_special_chars(coalesce(a_test.description, a_test.name));
+
+ procedure print_failed_expectation(a_test ut_test) is
+ l_lines ut_varchar2_list;
+ l_failed boolean;
+ begin
+ if a_test.get_error_stack_traces().count = 0 then
+ -- If no error occurred, print failed expectation
+ l_lines := a_test.all_expectations(a_test.all_expectations.last).get_result_lines();
+ l_failed := a_test.all_expectations(a_test.all_expectations.last).status >= ut_utils.gc_success;
+ if l_failed then
+ self.print_text('message: ''' || l_lines(1) || '''');
+ self.print_text('severity: fail');
+ end if;
+ else
+ -- Print multi-line YAML-String with implicit newline characters
+ self.print_text('message: |');
+ self.lvl := self.lvl + 1;
+ self.print_text(ut_utils.table_to_clob(a_test.get_error_stack_traces()));
+ self.lvl := self.lvl - 1;
+ self.print_text('severity: error');
+ end if;
+ end print_failed_expectation;
+
+ begin
+
+ if a_test.result = ut_utils.gc_disabled then
+ self.print_text('ok - ' || l_test_name || ' # SKIP'||
+ case when a_test.disabled_reason is not null
+ then ': '|| self.escape_special_chars(a_test.disabled_reason)
+ else null
+ end );
+ elsif a_test.result = ut_utils.gc_success then
+ self.print_text('ok - ' || l_test_name);
+ elsif a_test.result > ut_utils.gc_success then
+ if self.lvl = 0 then
+ self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || l_test_name);
+ else
+ self.print_text('not ok - ' || l_test_name);
+ end if;
+ self.lvl := self.lvl + 1;
+ self.print_text('---');
+ print_failed_expectation(a_test);
+ self.print_text('...');
+ self.lvl := self.lvl - 1;
+ end if;
+
+ self.print_comment(a_test.get_serveroutputs);
+
+ end after_calling_test;
+
+ overriding member procedure after_calling_before_all(self in out nocopy ut_tap_reporter, a_executable in ut_executable) is
+ begin
+ if a_executable.serveroutput is not null and a_executable.serveroutput != empty_clob() then
+ self.print_comment(a_executable.serveroutput);
+ end if;
+ end after_calling_before_all;
+
+ overriding member procedure after_calling_after_all(self in out nocopy ut_tap_reporter, a_executable in ut_executable) is
+ begin
+ if a_executable.serveroutput is not null and a_executable.serveroutput != empty_clob() then
+ self.print_comment(a_executable.serveroutput);
+ end if;
+ end after_calling_after_all;
+
+ overriding member procedure after_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as
+ l_suite_name varchar2(4000) := coalesce(a_suite.description, a_suite.name);
+ begin
+ lvl := lvl - 2;
+ if lvl = 0 then
+ if a_suite.result = ut_utils.gc_success or a_suite.result = ut_utils.gc_disabled then
+ self.print_text('ok - ' || self.escape_special_chars(l_suite_name));
+ elsif a_suite.result > ut_utils.gc_success then
+ self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || self.escape_special_chars(l_suite_name));
+ end if;
+
+ self.print_text(' ');
+ end if;
+
+ end after_calling_suite;
+
+ overriding member procedure before_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as
+ begin
+ self.print_text('TAP version 14');
+ self.print_text('1..' || a_run.items.count);
+ self.print_text(' ');
+ end before_calling_run;
+
+ overriding member procedure after_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as
+ begin
+ self.lvl := 0;
+ end;
+end;
+/
diff --git a/source/reporters/ut_tap_reporter.tps b/source/reporters/ut_tap_reporter.tps
new file mode 100644
index 000000000..94423b6fc
--- /dev/null
+++ b/source/reporters/ut_tap_reporter.tps
@@ -0,0 +1,34 @@
+create or replace type ut_tap_reporter under ut_documentation_reporter(
+ /*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+ constructor function ut_tap_reporter(self in out nocopy ut_tap_reporter) return self as result,
+ member procedure print_comment(self in out nocopy ut_tap_reporter, a_comment clob),
+ member function escape_special_chars(self in out nocopy ut_tap_reporter, a_string_to_escape clob) return clob,
+ overriding member procedure before_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite),
+
+ overriding member procedure after_calling_test(self in out nocopy ut_tap_reporter, a_test ut_test),
+
+ overriding member procedure after_calling_before_all (self in out nocopy ut_tap_reporter, a_executable in ut_executable),
+ overriding member procedure after_calling_after_all (self in out nocopy ut_tap_reporter, a_executable in ut_executable),
+ overriding member procedure before_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run),
+ overriding member procedure after_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite),
+ overriding member procedure after_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run)
+
+)
+not final
+/
diff --git a/source/reporters/ut_teamcity_reporter.tpb b/source/reporters/ut_teamcity_reporter.tpb
index e05dc994f..2e09c7103 100644
--- a/source/reporters/ut_teamcity_reporter.tpb
+++ b/source/reporters/ut_teamcity_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_teamcity_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_teamcity_reporter.tps b/source/reporters/ut_teamcity_reporter.tps
index e03fa3643..e5c43b59e 100644
--- a/source/reporters/ut_teamcity_reporter.tps
+++ b/source/reporters/ut_teamcity_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_teamcity_reporter under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_teamcity_reporter_helper.pkb b/source/reporters/ut_teamcity_reporter_helper.pkb
index 1633d10aa..575af645d 100644
--- a/source/reporters/ut_teamcity_reporter_helper.pkb
+++ b/source/reporters/ut_teamcity_reporter_helper.pkb
@@ -1,7 +1,7 @@
create or replace package body ut_teamcity_reporter_helper is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_teamcity_reporter_helper.pks b/source/reporters/ut_teamcity_reporter_helper.pks
index d7fa86cdc..727d02913 100644
--- a/source/reporters/ut_teamcity_reporter_helper.pks
+++ b/source/reporters/ut_teamcity_reporter_helper.pks
@@ -1,7 +1,7 @@
create or replace package ut_teamcity_reporter_helper is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_tfs_junit_reporter.tpb b/source/reporters/ut_tfs_junit_reporter.tpb
index 5e36aad17..8c2bd6333 100644
--- a/source/reporters/ut_tfs_junit_reporter.tpb
+++ b/source/reporters/ut_tfs_junit_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_tfs_junit_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_tfs_junit_reporter.tps b/source/reporters/ut_tfs_junit_reporter.tps
index 61cbc3fd8..3af2226a5 100644
--- a/source/reporters/ut_tfs_junit_reporter.tps
+++ b/source/reporters/ut_tfs_junit_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_tfs_junit_reporter under ut_output_reporter_base(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_xunit_reporter.tpb b/source/reporters/ut_xunit_reporter.tpb
index 4612fb640..164703917 100644
--- a/source/reporters/ut_xunit_reporter.tpb
+++ b/source/reporters/ut_xunit_reporter.tpb
@@ -1,7 +1,7 @@
create or replace type body ut_xunit_reporter is
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/reporters/ut_xunit_reporter.tps b/source/reporters/ut_xunit_reporter.tps
index 6c530fee4..970e4d162 100644
--- a/source/reporters/ut_xunit_reporter.tps
+++ b/source/reporters/ut_xunit_reporter.tps
@@ -1,7 +1,7 @@
create or replace type ut_xunit_reporter under ut_junit_reporter(
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/set_install_params.sql b/source/set_install_params.sql
index 34a23dc93..b559b8023 100644
--- a/source/set_install_params.sql
+++ b/source/set_install_params.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/uninstall.sql b/source/uninstall.sql
index ced7b8dc4..712845fb7 100644
--- a/source/uninstall.sql
+++ b/source/uninstall.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/uninstall_all.sql b/source/uninstall_all.sql
index cfaaaa29f..d3d3f3fbe 100644
--- a/source/uninstall_all.sql
+++ b/source/uninstall_all.sql
@@ -1,6 +1,6 @@
/*
utPLSQL - Version 3
- Copyright 2016 - 2021 utPLSQL Project
+ Copyright 2016 - 2026 utPLSQL Project
Licensed under the Apache License, Version 2.0 (the "License"):
you may not use this file except in compliance with the License.
diff --git a/source/uninstall_coverage_tables.sql b/source/uninstall_coverage_tables.sql
index 890aa7090..df3c19627 100644
--- a/source/uninstall_coverage_tables.sql
+++ b/source/uninstall_coverage_tables.sql
@@ -1,3 +1,20 @@
+/*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
set echo off
set feedback off
begin
diff --git a/source/uninstall_objects.sql b/source/uninstall_objects.sql
index dde9a824f..8ef644aa9 100644
--- a/source/uninstall_objects.sql
+++ b/source/uninstall_objects.sql
@@ -1,3 +1,20 @@
+/*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
set echo off
declare
procedure drop_if_exists(a_object_type varchar2, a_object_name varchar2) is
@@ -273,6 +290,8 @@ drop type ut_stack force;
drop sequence ut_savepoint_seq;
+drop type ut_tap_reporter force;
+
drop type ut_documentation_reporter force;
drop type ut_debug_reporter force;
diff --git a/source/uninstall_synonyms.sql b/source/uninstall_synonyms.sql
index 2c96c03a4..4a12340f6 100644
--- a/source/uninstall_synonyms.sql
+++ b/source/uninstall_synonyms.sql
@@ -1,3 +1,20 @@
+/*
+ utPLSQL - Version 3
+ Copyright 2016 - 2026 utPLSQL Project
+
+ Licensed under the Apache License, Version 2.0 (the "License"):
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
set echo off
set feedback off
declare
diff --git a/test/install_and_run_tests.sh b/test/install_and_run_tests.sh
index 04f51fb3c..1719f137a 100755
--- a/test/install_and_run_tests.sh
+++ b/test/install_and_run_tests.sh
@@ -1,9 +1,11 @@
#!/bin/bash
set -ev
+. ./development/env.sh
+
#goto git root directory
git rev-parse && cd "$(git rev-parse --show-cdup)"
cd test
-time . ./${DIR}/install_tests.sh
-time . ./${DIR}/run_tests.sh
+time . ./install_tests.sh
+time . ./run_tests.sh
diff --git a/test/install_ut3_user_tests.sql b/test/install_ut3_user_tests.sql
index ad7f014bc..518e07841 100644
--- a/test/install_ut3_user_tests.sql
+++ b/test/install_ut3_user_tests.sql
@@ -43,6 +43,7 @@ set define off
@@ut3_user/reporters/test_documentation_reporter.pks
@@ut3_user/reporters/test_debug_reporter.pks
@@ut3_user/reporters/test_realtime_reporter.pks
+@@ut3_user/reporters/test_tap_reporter.pks
@@ut3_user/reporters/test_coverage.pks
@@ut3_user/reporters/test_coverage/test_coverage_standalone.pks
set define on
@@ -86,6 +87,7 @@ set define off
@@ut3_user/reporters/test_documentation_reporter.pkb
@@ut3_user/reporters/test_debug_reporter.pkb
@@ut3_user/reporters/test_realtime_reporter.pkb
+@@ut3_user/reporters/test_tap_reporter.pkb
@@ut3_user/reporters/test_coverage/test_coverage_standalone.pkb
set define on
@@ut3_user/reporters/test_coverage/test_extended_coverage.pkb
diff --git a/test/run_tests.sh b/test/run_tests.sh
index 118bab920..7d0431aec 100755
--- a/test/run_tests.sh
+++ b/test/run_tests.sh
@@ -4,7 +4,9 @@ set -ev
#goto git root directory
git rev-parse && cd "$(git rev-parse --show-cdup)"
-time utPLSQL-cli/bin/utplsql run UT3_TESTER_HELPER/ut3@${CONNECTION_STR} \
+export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
+
+time utPLSQL-cli/bin/utplsql run UT3_TESTER_HELPER/ut3@//${CONNECTION_STR} -D \
-source_path=source -owner=ut3_develop \
-p='ut3_tester,ut3_user' \
-test_path=test -c \
diff --git a/test/ut3_tester/core/annotations/test_annotation_parser.pkb b/test/ut3_tester/core/annotations/test_annotation_parser.pkb
index bc789c377..beb526863 100644
--- a/test/ut3_tester/core/annotations/test_annotation_parser.pkb
+++ b/test/ut3_tester/core/annotations/test_annotation_parser.pkb
@@ -1,27 +1,28 @@
create or replace package body test_annotation_parser is
procedure test_proc_comments is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
-
begin
- l_source := 'PACKAGE test_tt AS
- -- %suite
- -- %displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- -- %ann1(Name of suite)
- -- wrong line
- -- %ann2(some_value)
- procedure foo;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' -- %ann1(Name of suite)' || chr(10),
+ ' -- wrong line' || chr(10),
+ ' -- %ann2(some_value)' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
-
l_expected := ut3_develop.ut_annotations(
ut3_develop.ut_annotation(2,'suite',null, null),
ut3_develop.ut_annotation(3,'displayname','Name of suite',null),
@@ -34,30 +35,33 @@ create or replace package body test_annotation_parser is
end;
procedure include_floating_annotations is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- -- %suite
- -- %displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- -- %ann1(Name of suite)
- -- %ann2(all.globaltests)
-
- --%test
- procedure foo;
-
- -- %ann3(Name of suite)
- -- %ann4(all.globaltests)
-
- --%test
- procedure bar;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' -- %ann1(Name of suite)' || chr(10),
+ ' -- %ann2(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' --%test' || chr(10),
+ ' procedure foo;' || chr(10),
+ '' || chr(10),
+ ' -- %ann3(Name of suite)' || chr(10),
+ ' -- %ann4(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' --%test' || chr(10),
+ ' procedure bar;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -77,40 +81,41 @@ create or replace package body test_annotation_parser is
end;
procedure parse_complex_with_functions is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- -- %suite
- -- %displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- --%test
- procedure foo;
-
-
- --%beforeeach
- procedure foo2;
-
- --test comment
- -- wrong comment
-
-
- /*
- describtion of the procedure
- */
- --%beforeeach(key=testval)
- PROCEDURE foo3(a_value number default null);
-
- --%all
- function foo4(a_val number default null
- , a_par varchar2 default := ''asdf'');
- END;';
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' --%test' || chr(10),
+ ' procedure foo;' || chr(10),
+ '' || chr(10),
+ '' || chr(10),
+ ' --%beforeeach' || chr(10),
+ ' procedure foo2;' || chr(10),
+ '' || chr(10),
+ ' --test comment' || chr(10),
+ ' -- wrong comment' || chr(10),
+ '' || chr(10),
+ '' || chr(10),
+ '/*' || chr(10),
+ ' describtion of the procedure' || chr(10),
+ ' */' || chr(10),
+ ' --%beforeeach(key=testval)' || chr(10),
+ ' PROCEDURE foo3(a_value number default null);' || chr(10),
+ '' || chr(10),
+ ' --%all' || chr(10),
+ ' function foo4(a_val number default null' || chr(10),
+ ' , a_par varchar2 default := ''asdf'');' || chr(10),
+ 'END;'));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -128,21 +133,24 @@ create or replace package body test_annotation_parser is
end;
procedure no_procedure_annotation is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- -- %suite
- -- %displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- procedure foo;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -156,21 +164,24 @@ create or replace package body test_annotation_parser is
end;
procedure parse_accessible_by is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt accessible by (foo) AS
- -- %suite
- -- %displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- procedure foo;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt accessible by (foo) AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -184,24 +195,27 @@ create or replace package body test_annotation_parser is
end;
procedure complex_package_declaration is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt
- ACCESSIBLE BY (calling_proc)
- authid current_user
- AS
- -- %suite
- -- %displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- procedure foo;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt' || chr(10),
+ ' ACCESSIBLE BY (calling_proc)' || chr(10),
+ ' authid current_user' || chr(10),
+ ' AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -215,21 +229,24 @@ create or replace package body test_annotation_parser is
end;
procedure complex_text is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- -- %suite
- --%displayname(name = Name of suite)
- -- %suitepath(key=all.globaltests,key2=foo,"--%some text")
-
- procedure foo;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' --%displayname(name = Name of suite)' || chr(10),
+ ' -- %suitepath(key=all.globaltests,key2=foo,"--%some text")' || chr(10),
+ '' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -243,26 +260,29 @@ create or replace package body test_annotation_parser is
end;
procedure ignore_annotations_in_comments is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- /*
- Some comment
- -- inlined
- -- %ignored
- */
- -- %suite
- --%displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- procedure foo;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' /*' || chr(10),
+ ' Some comment' || chr(10),
+ ' -- inlined' || chr(10),
+ ' -- %ignored' || chr(10),
+ ' */' || chr(10),
+ ' -- %suite' || chr(10),
+ ' --%displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -311,17 +331,19 @@ v58yvbLAXLi9gYHwoIvAgccti+Cmpg0DKLY=
end;
procedure brackets_in_desc is
-
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- -- %suite(Name of suite (including some brackets) and some more text)
-END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite(Name of suite (including some brackets) and some more text)' || chr(10),
+ 'END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -332,24 +354,27 @@ END;';
end;
procedure test_space_before_annot_params is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
- l_expected ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- /*
- Some comment
- -- inlined
- */
- -- %suite
- -- %suitepath (all.globaltests)
-
- procedure foo;
-END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' /*' || chr(10),
+ ' Some comment' || chr(10),
+ ' -- inlined' || chr(10),
+ ' */' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %suitepath (all.globaltests)'|| chr(10),
+ '' || chr(10),
+ ' procedure foo;' || chr(10),
+ 'END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -362,18 +387,21 @@ END;';
procedure test_windows_newline
as
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- -- %suite
- -- %displayname(Name of suite)' || chr(13) || chr(10)
- || ' -- %suitepath(all.globaltests)
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(13) || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -387,21 +415,24 @@ END;';
procedure test_annot_very_long_name
as
- l_source clob;
- l_actual ut3_develop.ut_annotations;
- l_expected ut3_develop.ut_annotations;
+ l_source dbms_preprocessor.source_lines_t;
+ l_actual ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE very_long_procedure_name_valid_for_oracle_12_so_utPLSQL_should_allow_it_definitely_well_still_not_reached_128_but_wait_we_did_it AS
- -- %suite
- -- %displayname(Name of suite)
- -- %suitepath(all.globaltests)
-
- --%test
- procedure very_long_procedure_name_valid_for_oracle_12_so_utPLSQL_should_allow_it_definitely_well_still_not_reached_128_but_wait_we_dit_it;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE very_long_procedure_name_valid_for_oracle_12_so_utPLSQL_should_allow_it_definitely_well_still_not_reached_128_but_wait_we_did_it AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(Name of suite)' || chr(10),
+ ' -- %suitepath(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' --%test' || chr(10),
+ ' procedure very_long_procedure_name_valid_for_oracle_12_so_utPLSQL_should_allow_it_definitely_well_still_not_reached_128_but_wait_we_dit_it;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -415,30 +446,33 @@ END;';
end;
procedure test_upper_annot is
- l_source clob;
+ l_source dbms_preprocessor.source_lines_t;
l_actual ut3_develop.ut_annotations;
l_expected ut3_develop.ut_annotations;
begin
- l_source := 'PACKAGE test_tt AS
- -- %SUITE
- -- %DISPLAYNAME(Name of suite)
- -- %SUITEPATH(all.globaltests)
-
- -- %ANN1(Name of suite)
- -- %ANN2(all.globaltests)
-
- --%TEST
- procedure foo;
-
- -- %ANN3(Name of suite)
- -- %ANN4(all.globaltests)
-
- --%TEST
- procedure bar;
- END;';
+ --Arrange
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %SUITE' || chr(10),
+ ' -- %DISPLAYNAME(Name of suite)' || chr(10),
+ ' -- %SUITEPATH(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' -- %ANN1(Name of suite)' || chr(10),
+ ' -- %ANN2(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' --%TEST' || chr(10),
+ ' procedure foo;' || chr(10),
+ '' || chr(10),
+ ' -- %ANN3(Name of suite)' || chr(10),
+ ' -- %ANN4(all.globaltests)' || chr(10),
+ '' || chr(10),
+ ' --%TEST' || chr(10),
+ ' procedure bar;' || chr(10),
+ ' END;' || chr(10)
+ ));
--Act
- l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source);
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
--Assert
l_expected := ut3_develop.ut_annotations(
@@ -457,5 +491,414 @@ END;';
end;
+ ------------------------------------------------------------
+ -- replace_multiline_comments coverage tests
+ ------------------------------------------------------------
+
+ procedure test_rmc_empty_source is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result.count).to_equal(0);
+ end;
+
+ procedure test_rmc_no_ml_comment_marker is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'procedure foo is' || chr(10),
+ 'begin' || chr(10),
+ ' null;' || chr(10),
+ 'end;' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(ut3_tester_helper.main_helper.lines_to_str(l_result)).to_equal(ut3_tester_helper.main_helper.lines_to_str(l_input));
+ end;
+
+ procedure test_rmc_line_inside_ml_comment is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'x := 1; /* start' || chr(10),
+ 'this whole line is comment' || chr(10),
+ 'end comment */ x := 2;' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('x := 1; ' || chr(10));
+ ut.expect(l_result(2)).to_equal('');
+ ut.expect(l_result(3)).to_equal(' x := 2;' || chr(10));
+ end;
+
+ procedure test_rmc_ml_comment_closed_midline is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ '/* open' || chr(10),
+ 'still inside' || chr(10),
+ '*/ code /* remove this too */ kept' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(2)).to_equal('');
+ ut.expect(l_result(3)).to_equal(' code kept' || chr(10));
+ end;
+
+ procedure test_rmc_fast_path_no_tokens is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ -- line 2 has none of / - ' so hits fast path B; line 1 needed to pass pre-scan
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ '/* comment */' || chr(10),
+ 'begin' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(2)).to_equal('begin' || chr(10));
+ end;
+
+ procedure test_rmc_ml_comment_single_line is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'x := /* inline comment */ 42;' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('x := 42;' || chr(10));
+ end;
+
+ procedure test_rmc_single_line_comment_preserved is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ '/* marker */' || chr(10),
+ ' -- %test annotation' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(2)).to_equal(' -- %test annotation' || chr(10));
+ end;
+
+ procedure test_rmc_string_literal_protects_markers is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'v := ''val /* not a comment */ here'';' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('v := ''val /* not a comment */ here'';' || chr(10));
+ end;
+
+ procedure test_rmc_string_literal_escaped_quotes is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'v := ''it''''s a /* test */'';' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('v := ''it''''s a /* test */'';' || chr(10));
+ end;
+
+ procedure test_rmc_q_quoted_string_literal is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'v := q''[/* not a comment */]'';' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('v := q''[/* not a comment */]'';' || chr(10));
+ end;
+
+ procedure test_rmc_unclosed_string_literal is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'v := ''hello /* inside unclosed' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('v := ''hello /* inside unclosed' || chr(10));
+ end;
+
+ procedure test_rmc_unclosed_q_string is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ c_line constant varchar2(100) := q'(v := q'[/* unclosed q-string)' || chr(10);
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(c_line));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal(c_line);
+ end;
+
+ procedure test_rmc_multiple_ml_comments_one_line is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'a /* one */ := /* two */ 1;' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('a := 1;' || chr(10));
+ end;
+
+ procedure test_rmc_comment_after_string_with_slash is
+ l_input dbms_preprocessor.source_lines_t;
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ --Arrange
+ l_input := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'v := ''a/b''; -- this is /* not */ a ml comment' || chr(10)
+ ));
+
+ --Act
+ l_result := ut3_develop.ut_utils.replace_multiline_comments(l_input);
+
+ --Assert
+ ut.expect(l_result(1)).to_equal('v := ''a/b''; -- this is /* not */ a ml comment' || chr(10));
+ end;
+
+ procedure test_multiline_proc_header_lines is
+ l_source dbms_preprocessor.source_lines_t;
+ l_actual ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
+ begin
+ --Arrange
+ -- procedure header spans multiple lines before terminating ;
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ '' || chr(10),
+ ' --%test' || chr(10),
+ ' procedure foo(' || chr(10),
+ ' a_param1 varchar2' || chr(10),
+ ' ,a_param2 number default null' || chr(10),
+ ' );' || chr(10),
+ ' END;' || chr(10)
+ ));
+
+ --Act
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
+
+ --Assert
+ l_expected := ut3_develop.ut_annotations(
+ ut3_develop.ut_annotation( 2, 'suite', null, null ),
+ ut3_develop.ut_annotation( 4, 'test', null, 'foo' )
+ );
+
+ ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected));
+ end;
+
+ procedure test_non_comment_line_resets_block_lines is
+ l_source dbms_preprocessor.source_lines_t;
+ l_actual ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
+ begin
+ --Arrange
+ -- a non-comment non-proc line between annotation and procedure breaks the association
+ -- %test becomes a floating top-level annotation with no subobject
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ '' || chr(10),
+ ' --%test' || chr(10),
+ ' pragma serially_reusable;' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
+
+ --Act
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
+
+ --Assert
+ -- %test is NOT associated with foo β accumulator was reset by pragma line
+ -- it surfaces as a top-level annotation with no subobject_name
+ l_expected := ut3_develop.ut_annotations(
+ ut3_develop.ut_annotation( 2, 'suite', null, null ),
+ ut3_develop.ut_annotation( 4, 'test', null, null )
+ );
+
+ ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected));
+ end;
+
+ procedure test_annotation_not_at_line_start_ignored_lines is
+ l_source dbms_preprocessor.source_lines_t;
+ l_actual ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
+ begin
+ --Arrange
+ -- code before -- means it is not at start of line and must be ignored
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' x := 1; -- %not_an_annotation' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
+
+ --Act
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
+
+ --Assert
+ l_expected := ut3_develop.ut_annotations(
+ ut3_develop.ut_annotation( 2, 'suite', null, null )
+ );
+
+ ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected));
+ end;
+
+ procedure test_whitespace_line_between_comment_and_proc_lines is
+ l_source dbms_preprocessor.source_lines_t;
+ l_actual ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
+ begin
+ --Arrange
+ -- space-only line between annotation comment and procedure declaration is tolerated
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ '' || chr(10),
+ ' --%test' || chr(10),
+ ' ' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
+
+ --Act
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
+
+ --Assert
+ l_expected := ut3_develop.ut_annotations(
+ ut3_develop.ut_annotation( 2, 'suite', null, null ),
+ ut3_develop.ut_annotation( 4, 'test', null, 'foo' )
+ );
+
+ ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected));
+ end;
+
+ procedure test_space_between_dashes_and_qualifier_lines is
+ l_source dbms_preprocessor.source_lines_t;
+ l_actual ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
+ begin
+ --Arrange
+ -- spaces between -- and % are skipped and annotation is still recognised
+ -- annotations are not adjacent to a procedure so they are top-level
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- %displayname(my suite)' || chr(10),
+ '' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
+
+ --Act
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
+
+ --Assert
+ l_expected := ut3_develop.ut_annotations(
+ ut3_develop.ut_annotation( 2, 'suite', null, null ),
+ ut3_develop.ut_annotation( 3, 'displayname', 'my suite', null )
+ );
+
+ ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected));
+ end;
+
+ procedure test_percent_not_after_dashes_ignored_lines is
+ l_source dbms_preprocessor.source_lines_t;
+ l_actual ut3_develop.ut_annotations;
+ l_expected ut3_develop.ut_annotations;
+ begin
+ --Arrange
+ -- -- present and % present on line but % is not immediately after --
+ -- e.g. a regular comment that happens to mention 100%
+ l_source := ut3_tester_helper.main_helper.make_source(ut3_develop.ut_varchar2_list(
+ 'PACKAGE test_tt AS' || chr(10),
+ ' -- %suite' || chr(10),
+ ' -- coverage is 100% on this module' || chr(10),
+ ' procedure foo;' || chr(10),
+ ' END;' || chr(10)
+ ));
+
+ --Act
+ l_actual := ut3_develop.ut_annotation_parser.parse_object_annotations(l_source, 'PACKAGE');
+
+ --Assert
+ l_expected := ut3_develop.ut_annotations(
+ ut3_develop.ut_annotation( 2, 'suite', null, null )
+ );
+
+ ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected));
+ end;
+
end test_annotation_parser;
-/
+/
\ No newline at end of file
diff --git a/test/ut3_tester/core/annotations/test_annotation_parser.pks b/test/ut3_tester/core/annotations/test_annotation_parser.pks
index a4fe3ed70..c61c14d3a 100644
--- a/test/ut3_tester/core/annotations/test_annotation_parser.pks
+++ b/test/ut3_tester/core/annotations/test_annotation_parser.pks
@@ -19,24 +19,57 @@ create or replace package test_annotation_parser is
procedure complex_text;
--%test(Ignores content of multi-line comments)
procedure ignore_annotations_in_comments;
-
- --%test(Ignores wrapped package and does not raise exception)
+ -- %test(ignore wrapped package source)
procedure ignore_wrapped_package;
-
--%test(Parses package level annotations with annotation params containing brackets)
procedure brackets_in_desc;
-
--%test(Parses annotation text even with spaces before brackets)
procedure test_space_before_annot_params;
-
-- %test(Parses source-code with Windows-style newline)
procedure test_windows_newline;
-
- -- %test(Parses annotations with very long object names)
+ -- %test(parse annotations with very long procedure name)
procedure test_annot_very_long_name;
-
-- %test(Parses upper case annotations)
procedure test_upper_annot;
+ -- %test(empty source returns immediately without processing)
+ procedure test_rmc_empty_source;
+ -- %test(source with no multiline comment markers returned unchanged)
+ procedure test_rmc_no_ml_comment_marker;
+ -- %test(line entirely inside multiline comment is blanked)
+ procedure test_rmc_line_inside_ml_comment;
+ -- %test(closing delimiter mid-line falls through to scan remainder)
+ procedure test_rmc_ml_comment_closed_midline;
+ -- %test(fast path line with no slash dash or quote copied unchanged)
+ procedure test_rmc_fast_path_no_tokens;
+ -- %test(single-line block comment removed on same line)
+ procedure test_rmc_ml_comment_single_line;
+ -- %test(single-line comment preserved intact)
+ procedure test_rmc_single_line_comment_preserved;
+ -- %test(string literal containing comment markers not stripped)
+ procedure test_rmc_string_literal_protects_markers;
+ -- %test(string literal with escaped quotes handled correctly)
+ procedure test_rmc_string_literal_escaped_quotes;
+ -- %test(q-quoted string literal protects interior comment markers)
+ procedure test_rmc_q_quoted_string_literal;
+ -- %test(unclosed string literal copies remainder and exits scan)
+ procedure test_rmc_unclosed_string_literal;
+ -- %test(unclosed q-quoted string copies remainder and exits scan)
+ procedure test_rmc_unclosed_q_string;
+ -- %test(multiple block comments on single line all removed)
+ procedure test_rmc_multiple_ml_comments_one_line;
+ -- %test(comment markers after string with slash handled correctly)
+ procedure test_rmc_comment_after_string_with_slash;
+ --%test(Procedure header spanning multiple lines is handled correctly)
+ procedure test_multiline_proc_header_lines;
+ --%test(Non-comment line between annotation and procedure resets association)
+ procedure test_non_comment_line_resets_block_lines;
+ --%test(Comment with non-whitespace before dashes is not treated as annotation)
+ procedure test_annotation_not_at_line_start_ignored_lines;
+ --%test(Spaces between dashes and annotation qualifier are skipped correctly)
+ procedure test_space_between_dashes_and_qualifier_lines;
+ --%test(Percent sign not immediately after dashes is not treated as annotation)
+ procedure test_percent_not_after_dashes_ignored_lines;
+
end test_annotation_parser;
-/
+/
\ No newline at end of file
diff --git a/test/ut3_tester/core/test_suite_manager.pks b/test/ut3_tester/core/test_suite_manager.pks
index ac7818f4f..44f102716 100644
--- a/test/ut3_tester/core/test_suite_manager.pks
+++ b/test/ut3_tester/core/test_suite_manager.pks
@@ -163,7 +163,7 @@ create or replace package test_suite_manager is
--%context(get_schema_ut_packages)
- --%test(returns list of all unit test packages in given schema)
+ --%test(returns list of all unit test packages in given schema excluding packages that are not suites)
--%beforetest(create_ut3_suite)
--%aftertest(drop_ut3_suite)
procedure test_get_schema_ut_packages;
diff --git a/test/ut3_tester/core/test_ut_utils.pkb b/test/ut3_tester/core/test_ut_utils.pkb
index 433987c01..4dc10492b 100644
--- a/test/ut3_tester/core/test_ut_utils.pkb
+++ b/test/ut3_tester/core/test_ut_utils.pkb
@@ -375,8 +375,8 @@ end;';
procedure replace_multiline_comments
is
l_source clob;
- l_actual clob;
- l_expected clob;
+ l_actual dbms_preprocessor.source_lines_t;
+ l_expected dbms_preprocessor.source_lines_t;
begin
--Arrange
l_source := q'[
@@ -390,11 +390,11 @@ create or replace package dummy as
gv_text2 varchar2(200) := '/* multi-line comment
in a multi-line
string*/';
- -- ignored start of multi-line comment with multi-byte text οΏ½ /*
- -- ignored end of multi-line comment with multi-byte text οΏ½ */
+ -- ignored start of multi-line comment with multi-byte text βΊ /*
+ -- ignored end of multi-line comment with multi-byte text βΊ */
/* multi-line comment
with
- multi-byte characters οΏ½οΏ½οΏ½
+ multi-byte characters βΊβΊβΊ
in it */
gv_text3 varchar2(200) := 'some text'; /* multiline comment*/ --followed by single-line comment
/* multi-line comment in one line*/
@@ -403,7 +403,14 @@ create or replace package dummy as
string*/}';
end;
]';
- l_expected := q'[
+
+ --Act
+ l_actual := ut3_develop.ut_utils.replace_multiline_comments(
+ ut3_tester_helper.main_helper.make_source( ut3_develop.ut_utils.clob_to_table(l_source) )
+ );
+
+ --Assert
+ l_expected := ut3_tester_helper.main_helper.make_source( ut3_develop.ut_utils.clob_to_table( q'[
create or replace package dummy as
-- single line comment with disabled /* multi-line comment */
@@ -414,8 +421,8 @@ create or replace package dummy as
gv_text2 varchar2(200) := '/* multi-line comment
in a multi-line
string*/';
- -- ignored start of multi-line comment with multi-byte text οΏ½ /*
- -- ignored end of multi-line comment with multi-byte text οΏ½ */
+ -- ignored start of multi-line comment with multi-byte text βΊ /*
+ -- ignored end of multi-line comment with multi-byte text βΊ */
]'||q'[
@@ -426,11 +433,9 @@ create or replace package dummy as
in escaped q'multi-line
string*/}';
end;
-]';
+]' ) );
--Act
- l_actual := ut3_develop.ut_utils.replace_multiline_comments(l_source);
- --Assert
- ut.expect(l_actual).to_equal(l_expected);
+ ut.expect(ut3_tester_helper.main_helper.lines_to_str(l_actual)).to_equal(ut3_tester_helper.main_helper.lines_to_str(l_expected));
end;
procedure int_conv_ds_sec is
diff --git a/test/ut3_tester_helper/main_helper.pkb b/test/ut3_tester_helper/main_helper.pkb
index f1dadec66..f60ce796c 100644
--- a/test/ut3_tester_helper/main_helper.pkb
+++ b/test/ut3_tester_helper/main_helper.pkb
@@ -155,6 +155,24 @@ create or replace package body main_helper is
begin
ut3_develop.ut_session_context.clear_all_context;
end;
+
+ function lines_to_str(a_lines dbms_preprocessor.source_lines_t) return varchar2 is
+ l_result varchar2(32767);
+ begin
+ for i in 1 .. a_lines.count loop
+ l_result := l_result || a_lines(i);
+ end loop;
+ return l_result;
+ end;
+
+ function make_source(a_lines ut3_develop.ut_varchar2_list) return dbms_preprocessor.source_lines_t is
+ l_result dbms_preprocessor.source_lines_t;
+ begin
+ for i in 1 .. a_lines.count loop
+ l_result(i) := a_lines(i);
+ end loop;
+ return l_result;
+ end;
end;
/
diff --git a/test/ut3_tester_helper/main_helper.pks b/test/ut3_tester_helper/main_helper.pks
index 7decad88d..71575e145 100644
--- a/test/ut3_tester_helper/main_helper.pks
+++ b/test/ut3_tester_helper/main_helper.pks
@@ -47,5 +47,9 @@ create or replace package main_helper is
procedure clear_ut_run_context;
+ function lines_to_str(a_lines dbms_preprocessor.source_lines_t) return varchar2;
+
+ function make_source(a_lines ut3_develop.ut_varchar2_list) return dbms_preprocessor.source_lines_t;
+
end;
/
diff --git a/test/ut3_tester_helper/run_helper.pkb b/test/ut3_tester_helper/run_helper.pkb
index 6289b1642..9d65d6667 100644
--- a/test/ut3_tester_helper/run_helper.pkb
+++ b/test/ut3_tester_helper/run_helper.pkb
@@ -855,12 +855,23 @@ create or replace package body run_helper is
--%test
procedure some_test;
+ end;]';
+ execute immediate q'[
+ create or replace package ut3_develop.package_that_is_not_a_test
+ as
+ --%parameter(a comment inside)
+ --%parameters( description )
+
+ --%test
+ procedure some_test;
+
end;]';
end;
procedure drop_ut3_suite is
pragma autonomous_transaction;
begin
+ execute immediate q'[drop package ut3_develop.package_that_is_not_a_test]';
execute immediate q'[drop package ut3_develop.some_test_package]';
end;
diff --git a/test/ut3_user/api/test_ut_runner.pkb b/test/ut3_user/api/test_ut_runner.pkb
index b6b7c67e7..d665718e1 100644
--- a/test/ut3_user/api/test_ut_runner.pkb
+++ b/test/ut3_user/api/test_ut_runner.pkb
@@ -393,7 +393,8 @@ end;';
select 'UT3_DEVELOP.UT_SONAR_TEST_REPORTER', 'Y' from dual union all
select 'UT3_DEVELOP.UT_TEAMCITY_REPORTER', 'Y' from dual union all
select 'UT3_DEVELOP.UT_TFS_JUNIT_REPORTER', 'Y' from dual union all
- select 'UT3_DEVELOP.UT_XUNIT_REPORTER', 'Y' from dual
+ select 'UT3_DEVELOP.UT_XUNIT_REPORTER', 'Y' from dual union all
+ select 'UT3_DEVELOP.UT_TAP_REPORTER', 'Y' from dual
order by 1;
--Act
open l_actual for select * from table(ut3_develop.ut_runner.GET_REPORTERS_LIST()) order by 1;
diff --git a/test/ut3_user/expectations/test_expectations_cursor.pkb b/test/ut3_user/expectations/test_expectations_cursor.pkb
index 847cce9a0..a4ef4e8f2 100644
--- a/test/ut3_user/expectations/test_expectations_cursor.pkb
+++ b/test/ut3_user/expectations/test_expectations_cursor.pkb
@@ -2950,5 +2950,47 @@ Rows: [ 2 differences ]
);
end;
+ procedure cr_joinby_compare_issue_1293 is
+ l_actual sys_refcursor;
+ l_expected sys_refcursor;
+ begin
+ --Arrange
+ open l_expected for
+ select 'FOO' username, 12 from dual union all
+ select 'TEST' username, -600 user_id from dual
+ order by 1 desc;
+ open l_actual for
+ select 'FOO' username, 12 from dual union all
+ select 'TEST' username, -600 user_id from dual union all
+ -- DUPLICATE!!!
+ select 'TEST' username, -600 user_id from dual
+ order by 1 asc;
+ --Act
+ ut3_develop.ut.expect(l_actual).to_equal(l_expected).join_by('USERNAME');
+ --Assert
+ ut.expect(ut3_tester_helper.main_helper.get_failed_expectations_num).to_be_greater_than(0);
+ end;
+
+ procedure cr_not_joinby_comp_issue_1293 is
+ l_actual sys_refcursor;
+ l_expected sys_refcursor;
+ begin
+ --Arrange
+ open l_expected for
+ select 'FOO' username, 12 from dual union all
+ select 'TEST' username, -600 user_id from dual
+ order by 1 desc;
+ open l_actual for
+ select 'FOO' username, 12 from dual union all
+ select 'TEST' username, -600 user_id from dual union all
+ -- DUPLICATE!!!
+ select 'TEST' username, -600 user_id from dual
+ order by 1 asc;
+ --Act
+ ut3_develop.ut.expect(l_actual).to_equal(l_expected);
+ --Assert
+ ut.expect(ut3_tester_helper.main_helper.get_failed_expectations_num).to_be_greater_than(0);
+ end;
+
end;
/
diff --git a/test/ut3_user/expectations/test_expectations_cursor.pks b/test/ut3_user/expectations/test_expectations_cursor.pks
index 0f34486a9..8cceb5e01 100644
--- a/test/ut3_user/expectations/test_expectations_cursor.pks
+++ b/test/ut3_user/expectations/test_expectations_cursor.pks
@@ -485,5 +485,11 @@ create or replace package test_expectations_cursor is
--%test( Multiple failures reported correctly - Issue #998 )
procedure multiple_cursor_expectations;
+ --%test( Compares cursors with duplicate rows using join by - Issue #1293 )
+ procedure cr_joinby_compare_issue_1293;
+
+ --%test( Compares cursors with duplicate rows - Issue #1293 )
+ procedure cr_not_joinby_comp_issue_1293;
+
end;
/
diff --git a/test/ut3_user/reporters/test_documentation_reporter.pkb b/test/ut3_user/reporters/test_documentation_reporter.pkb
index 2a05679ff..016cec256 100644
--- a/test/ut3_user/reporters/test_documentation_reporter.pkb
+++ b/test/ut3_user/reporters/test_documentation_reporter.pkb
@@ -34,7 +34,6 @@ Failures:
"Fails as values are different"
Actual: 'number [1] ' (varchar2) was expected to equal: 'number [2] ' (varchar2)%
at "UT3_USER.TEST_REPORTERS%", line 36 ut3_develop.ut.expect('number [1] ','Fails as values are different').to_equal('number [2] ');
-%
%
2) erroring_test
ORA-06502: PL/SQL: %: character to number conversion error
diff --git a/test/ut3_user/reporters/test_realtime_reporter.pkb b/test/ut3_user/reporters/test_realtime_reporter.pkb
index 2dafa71d0..84053c3c9 100644
--- a/test/ut3_user/reporters/test_realtime_reporter.pkb
+++ b/test/ut3_user/reporters/test_realtime_reporter.pkb
@@ -408,7 +408,7 @@ create or replace package body test_realtime_reporter as
from table(g_events) t
where t.event_doc.extract('/event[@type="post-test"]/test/@id').getstringval()
= 'realtime_reporting.check_realtime_reporting3.test_6_with_runtime_error';
- ut3_tester_helper.main_helper.append_to_list(l_expected_list, '');
l_expected := ut3_tester_helper.main_helper.table_to_clob(l_expected_list);
diff --git a/test/ut3_user/reporters/test_tap_reporter.pkb b/test/ut3_user/reporters/test_tap_reporter.pkb
new file mode 100644
index 000000000..786c53ee0
--- /dev/null
+++ b/test/ut3_user/reporters/test_tap_reporter.pkb
@@ -0,0 +1,254 @@
+create or replace package body test_tap_reporter as
+
+ gc_boilerplate_suitepath_expression constant varchar2(300) := 'TAP version 14\s*1..1\s*# Subtest: org\s{5}1..1\s{5}# Subtest: utplsql\s{9}1..1\s{9}# Subtest: tests\s{13}1..1\s{13}# Subtest: helpers\s{17}1..1\s{17}# Subtest: A suite for testing different outcomes from reporters';
+
+
+ procedure compile_tests as
+ pragma autonomous_transaction;
+ begin
+
+ execute immediate q'[
+ create or replace package test_tap_escaping as
+ --%suite(Some \ and # to be escaped)
+
+ --%test(Even more \\ and multiple ###)
+ procedure more_escaping;
+
+ --%test(Disabled test)
+ --%disabled(With \ and # in skip reason)
+ procedure not_skipping_escapes;
+
+ --%test(Escaped Comments)
+ procedure escaped_comments;
+
+ --%context(Some context)
+
+ --%test(Another disabled test)
+ --%disabled
+ procedure another_disabled_test;
+
+ --%endcontext
+ end test_tap_escaping;
+ ]';
+
+ execute immediate q'[
+ create or replace package body test_tap_escaping as
+
+ procedure more_escaping as
+ begin
+ ut.expect(1).to_equal(1);
+ end more_escaping;
+
+
+ procedure not_skipping_escapes as
+ begin
+ ut.expect(10).to_equal(1);
+ end not_skipping_escapes;
+
+ procedure escaped_comments as
+ begin
+ dbms_output.put_line('This \ and # should not be escaped, and this not as well!!!');
+ ut.expect(1).to_equal(1);
+ end escaped_comments;
+
+ procedure another_disabled_test as
+ begin
+ ut.expect(10).to_equal(1);
+ end;
+ end test_tap_escaping;
+ ]';
+
+ end compile_tests;
+
+
+ procedure simple_succeeding_test as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := gc_boilerplate_suitepath_expression || '\s{21}1..1\s{21}# \s{21}# Subtest: A description of some context\s{25}1..1\s{25}ok - passing_test\s{25}# \s{25}# \s{25}# \s{25}# \s{25}# \s{21}# \sok - org\s*';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters.passing_test',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_match(l_expected);
+ end simple_succeeding_test;
+
+ procedure simple_failing_test as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := gc_boilerplate_suitepath_expression || q'[\s{21}1..1\s{21}# \s{21}not ok - a test with failing assertion\s{23}---\s{23}message: '"Fails as values are different"'\s{23}severity: fail\s{23}...\s{21}# \s{21}# \s{21}# \s{21}# \snot ok - org\s*]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters.failing_test',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_match(l_expected);
+ end simple_failing_test;
+
+
+ procedure simple_erroring_test as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := gc_boilerplate_suitepath_expression || q'[\s{21}1..1\s{21}# \s{21}not ok - a test raising unhandled exception\s{23}---\s{23}message: |\s{25ORA-06502: .*\s{25}ORA-06512: at line [[:digit:]]+\s{23}severity: error\s{23}...\s{21}# \s{21}# \s{21}# \s{21}# \snot ok - org\s*]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters.erroring_test',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_match(l_expected);
+ end simple_erroring_test;
+
+
+ procedure disabled_test as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := gc_boilerplate_suitepath_expression || q'[\s{21}1..1\s{21}# \s{21}ok - a disabled test # SKIP: Disabled for testing purpose\s{21}# \sok - org\s*]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters.disabled_test',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_match(l_expected);
+ end disabled_test;
+
+
+ procedure disabled_test_no_description as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := gc_boilerplate_suitepath_expression || q'[\s{21}1..1\s{21}# \s{21}ok - a disabled test with no reason # SKIP\s{21}# \sok - org\s*]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters.disabled_test_no_reason',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_match(l_expected);
+ end disabled_test_no_description;
+
+
+ procedure multiple_tests_different_outcome as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[TAP version 14\s*1..1\s*# Subtest: org.*# Subtest: A suite.*\s{21}1..5\s{21}# \s{21}# Subtest: A desc.*\s{25}1..1\s{25}ok - passing_test\s{25}# \s{25}# \s{21}not ok - a test w.*\s{23}---\s{23}message:.*\s{21}# .*\s{21}# not ok - a test rai.*\s{23}---\s{23}message: |.*ok - a disabled test # SKIP: Disabled for testing purpose.*ok - a dis.* # SKIP\s{21}# \snot ok - org\s*]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_match(l_expected, 'n');
+ end multiple_tests_different_outcome;
+
+
+ procedure escape_suite_name as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[%# Subtest: Some \\ and \# to be escaped%ok - Some \\ and \# to be escaped%]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_tap_escaping.more_escaping',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_be_like(l_expected);
+ end escape_suite_name;
+
+
+ procedure escape_multiple_characters_test_name as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[%ok - Even more \\\\ and multiple \#\#\#%]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_tap_escaping.more_escaping',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_be_like(l_expected);
+ end escape_multiple_characters_test_name;
+
+
+ procedure special_characters_in_disabled_reason as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[%ok - Disabled test # SKIP: With \\ and \# in skip reason%]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_tap_escaping.not_skipping_escapes',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_be_like(l_expected);
+ end special_characters_in_disabled_reason;
+
+
+ procedure special_characters_in_comment as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[%ok - Escaped Comments%# This \ and # should not be escaped, and this not as well!!!%]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_tap_escaping.escaped_comments',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_be_like(l_expected);
+ end special_characters_in_comment;
+
+
+ procedure context_as_commented_subtests as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[%# Subtest: A suite for testing different outcomes from reporters%# Subtest: A description of some context%]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters.passing_test',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_be_like(l_expected);
+
+ end context_as_commented_subtests;
+
+
+ procedure suitepath_as_chopped_subtests as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[.*# Subtest: org.*1\s{5}# Subtest: utplsql.*1\s{9}# Subtest: tests.*1\s{13}# Subtest: helpers.*1\s{17}# Subtest: A suite for testing different outcomes from reporters.*]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_reporters.passing_test',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_match(l_expected, 'n');
+
+ end suitepath_as_chopped_subtests;
+
+
+ procedure include_context_with_skipped_tests as
+ l_output_data ut3_develop.ut_varchar2_list;
+ l_expected varchar2(32767);
+ begin
+ l_expected := q'[%# Subtest: Some context%]';
+
+ select *
+ bulk collect into l_output_data
+ from table(ut3_develop.ut.run('test_tap_escaping.another_disabled_test',ut3_develop.ut_tap_reporter()));
+
+ ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_output_data)).to_be_like(l_expected);
+
+ end include_context_with_skipped_tests;
+
+
+ procedure drop_help_tests as
+ pragma autonomous_transaction;
+ begin
+ execute immediate 'drop package test_tap_escaping';
+ end drop_help_tests;
+end test_tap_reporter;
+/
\ No newline at end of file
diff --git a/test/ut3_user/reporters/test_tap_reporter.pks b/test/ut3_user/reporters/test_tap_reporter.pks
new file mode 100644
index 000000000..27f9651bc
--- /dev/null
+++ b/test/ut3_user/reporters/test_tap_reporter.pks
@@ -0,0 +1,53 @@
+create or replace package test_tap_reporter as
+
+ --%suite(ut_tap_reporter)
+ --%suitepath(utplsql.test_user.reporters)
+
+ --%beforeall
+ procedure compile_tests;
+
+ --%test(Simple succeeding test)
+ procedure simple_succeeding_test;
+
+ --%test(Simple failing test)
+ procedure simple_failing_test;
+
+ --%test(Simple erroring test)
+ procedure simple_erroring_test;
+
+ --%test(Skipped test)
+ procedure disabled_test;
+
+ --%test(Skipped test without description)
+ procedure disabled_test_no_description;
+
+ --%test(Multiple tests with different outcome)
+ procedure multiple_tests_different_outcome;
+
+ --%test(Escape special characters in suite name)
+ procedure escape_suite_name;
+
+ --%test(Escape multiple special characters in test name)
+ procedure escape_multiple_characters_test_name;
+
+ --%test(Disabled Test with special characters in disable reason)
+ procedure special_characters_in_disabled_reason;
+
+ --%test(Don't escape special characters in comment)
+ procedure special_characters_in_comment;
+
+ --%test(Include context as commented subtests)
+ procedure context_as_commented_subtests;
+
+ --%test(Suitepath as chopped subtests)
+ procedure suitepath_as_chopped_subtests;
+
+ --%test(Include context with only skipped tests in output)
+ procedure include_context_with_skipped_tests;
+
+
+ --%afterall
+ procedure drop_help_tests;
+
+end test_tap_reporter;
+/
\ No newline at end of file