Prolog "diagnose"

Admin User, created Dec 04. 2023
         
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Dogelog is a deposited trademark of XLOG Technologies AG.
*/
:- ensure_loaded(library(tester/runner)).
/*************************************************************/
/* Results Interface */
/*************************************************************/
% result_summary(-Atom, -Data)
:- multifile result_summary/2.
:- dynamic result_summary/2.
% result_suite(-Atom, -Atom, -Data)
:- multifile result_suite/3.
:- dynamic result_suite/3.
% result_tests(-Atom, -Atom, -Atom, -Data)
:- multifile result_tests/4.
:- dynamic result_tests/4.
% result_pred(-Atom, -Integer, -Atom, -Atom, -Atom, -Data)
:- multifile result_pred/6.
:- dynamic result_pred/6.
% result(-Atom, -Integer, -Atom, -Atom, -Case, -Atom, -Data)
:- multifile result/7.
:- dynamic result/7.
/*************************************************************/
/* Diagnose Online */
/*************************************************************/
/**
* diagnose_online(L):
* The predicate starts a terminal based drill down of the
* test results for the tag list L.
*/
% diagnose_online(+List)
diagnose_online(Tags) :-
sys_list_suites(Tags),
write('Folder: '), flush_output,
read(E), once(runner_folder(E, _)),
sys_list_tests(E, Tags),
write('File: '), flush_output,
read(D), once(runner_file(E, D, _)),
sys_list_pred(E, D, Tags),
write('Predicate: '), flush_output,
read(F/N), once(runner_pred(F, N, E, D, _)),
sys_list_result(F, N, E, D, Tags), !.
diagnose_online(_).
/*************************************************************/
/* List Suites */
/*************************************************************/
% sys_list_suites(+List)
sys_list_suites(Tags) :-
(member(Tag, Tags),
write(Tag), write('\t'), fail; true),
write('Folder'), nl,
runner_folder(E, _),
(member(Tag, Tags),
result_suite(E, Tag, Z),
sys_list_data(Z), fail; true),
write(E), nl,
fail.
sys_list_suites(Tags) :-
(member(Tag, Tags),
result_summary(Tag, Z),
sys_list_data(Z), fail; true),
write('Total'), nl.
/*************************************************************/
/* List Tests */
/*************************************************************/
% sys_list_tests(+Atom, +List)
sys_list_tests(E, Tags) :-
(member(Tag, Tags),
write(Tag), write('\t'), fail; true),
write('File'), nl,
runner_file(E, D, _),
(member(Tag, Tags),
result_tests(E, D, Tag, Z),
sys_list_data(Z), fail; true),
write(D), nl,
fail.
sys_list_tests(E, Tags) :-
(member(Tag, Tags),
result_suite(E, Tag, Z),
sys_list_data(Z), fail; true),
write('Total'), nl.
/*************************************************************/
/* List Predicates */
/*************************************************************/
% sys_list_pred(+Atom, +Atom, +List)
sys_list_pred(E, D, Tags) :-
(member(Tag, Tags),
write(Tag), write('\t'), fail; true),
write('Predicate'), nl,
runner_pred(F, N, E, D, _),
(member(Tag, Tags),
result_pred(F, N, E, D, Tag, Z),
sys_list_data(Z), fail; true),
write(F), write('/'), write(N), nl,
fail.
sys_list_pred(E, D, Tags) :-
(member(Tag, Tags),
result_tests(E, D, Tag, Z),
sys_list_data(Z), fail; true),
write('Total'), nl.
/*************************************************************/
/* List Cases */
/*************************************************************/
% sys_list_result(+Atom, +Integer. +Atom, +Atom, +List)
sys_list_result(F, N, E, D, Tags) :-
(member(Tag, Tags),
write(Tag), write('\t'), fail; true),
write('Case'), nl,
clause(runner_case(F, N, E, D, C), _),
(member(Tag, Tags),
result(F, N, E, D, C, Tag, Z),
sys_list_data(Z), fail; true),
write(C), nl,
fail.
sys_list_result(F, N, E, D, Tags) :-
(member(Tag, Tags),
result_pred(F, N, E, D, Tag, Z),
sys_list_data(Z), fail; true),
write('Total'), nl.
/***************************************************************/
/* List Styling */
/***************************************************************/
% sys_list_data(+OkNok)
sys_list_data(A - B) :- !,
write(A), write(' '),
write(B), write('\t').
sys_list_data(A) :-
write(A),
write('\t').