This file is indexed.

/usr/share/logol/prolog/unitTest/plunittest.pro is in logol 1.6.10-1build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
%% plunittest Unit testing framwork
%
% Used for unit testing of prolog predicates and XML JUNIT like report genration, it generates an XML JUNIT like report for unit testing some predicates.
% This module provides functions validate or unvalidate some predicate results and to generate a report.
%
% @author Olivier Sallou
% @license CeCILL
% @version 1.0.0 Set doc for swi-prolog

:- module(plunittest,[assertEqual/2,begin_suite/1,end_suite/1,begin_test/1,end_test/0,assertTrue/1,assertFalse/1,assertTrue/0,assertFalse/0]).

:- use_module(library(dynamic)).
:- use_module(library(lists)).

:- meta_predicate(assertTrue(:)).
:- meta_predicate(assertFalse(:)).


:-dynamic testResult/2.
:-dynamic dumpFile/1.
:-dynamic currentTest/1.
:-dynamic testdata/1.

%% setDumpFile(+FilePath:char-list)
%
% Sets the file name for report
%  @param FilePath  Path to the output file
%

setDumpFile(FilePath):-assert(dumpFile(FilePath)).

%% begin_suite(+FilePath:char-list)
%
% Starts a new suite of tests e.g. a report.
%  @param FilePath  Path to the output file
%
begin_suite(FilePath):-retractall(currentTest(_)),retractall(testResult(_,_)),setDumpFile(FilePath),initTmpDumpFile.

%% end_suite(+Name:char-list)
%
% Ends a suite of tests e.g. a report.
%  @param Name  Name or description of the test suite
%
end_suite(Name):-initDumpFile(Name),closeDumpFile,halt.

%% begin_test(+Name:char-list)
%
% Starts a new test, can enclose multiple predicate calls but will be seen as a single test in report.
%  @param Name  Name or description of the test
%
begin_test(Testname) :- assert(currentTest(Testname)),statistics(walltime,[_,_]).

%% end_test
%
% Ends a test.
%
end_test :- dumpResults,retractall(currentTest(_)).

%WARNING: predicate must be able to run with current predicates, not with caller predicates.
:-comment(assertTrue/1,"Test a predicate. Results in success if predicate returns True, else generate error. @p Description: @begin{itemize} @item @bf{assertTrue(PredInfo) , char-list => char-list }. @end{itemize} @p Input: @begin{itemize} @item @var{PredInfo} Predicate to test. Must be able to execute with current runtime, cannot use other libraries. @end{itemize}").
%assertTrue(PredInfo) :- Pred=..PredInfo,(Pred -> success;(error,fail)).
assertTrue(Goal) :- (call(Goal) -> success;(error,fail)).
:-comment(assertFalse/1,"Test a predicate. Results in error if predicate returns True, else generate success. @p Description: @begin{itemize} @item @bf{assertFalse(PredInfo) , char-list => char-list }. @end{itemize} @p Input: @begin{itemize} @item @var{PredInfo} Predicate to test. Must be able to execute with current runtime, cannot use other libraries. @end{itemize}").
%assertFalse(PredInfo) :- Pred=..PredInfo,(Pred -> (error,fail);success).
assertFalse(Goal):-(call(Goal) -> (error,fail);success).
:-comment(assertTrue/1,"Sets success for the test. @p Description: @begin{itemize} @item @bf{assertTrue}. @end{itemize} ").
assertTrue :-  success.
:-comment(assertFalse/1,"Sets error for the test. @p Description: @begin{itemize} @item @bf{assertFalse}. @end{itemize} ").
assertFalse :- error.
:-comment(assertEqual/1,"Test equality between two entities. @p Description: @begin{itemize} @item @bf{assertEqual(X,Y) , char-list => char-list }. @end{itemize} @p Input: @begin{itemize} @item @var{X} First value to compare. @item @var{Y} Second value to compare. @end{itemize}").
assertEqual(X,Y) :- ( X=Y -> success;(error,fail)).


success :- isTestPresent(Pred),assert(testResult(Pred,1)).
error :- isTestPresent(Pred),assert(testResult(Pred,0)).

isTestPresent(Pred):- currentTest(Pred),(testResult(Pred,Status) -> (Status=1 -> retract(testResult(Pred,Status));fail) ; 1=1).

%read tmpfile,store then write final with header
initDumpFile(Name):-total(OKLength,KOLength),
				 dumpFile(File),open(File,read,InStream),
                 repeat,
                 read_line(InStream,T), ((T == end_of_file);(assert(testdata(T)))), 
                 (T == end_of_file),     % Loop back if not at end of file       
                  !,
                close(InStream),!,             
				dumpFile(File),open(File,write,OutStream),
				format(OutStream,'<?xml version="1.0" encoding="UTF-8"?>~N<testsuite name="~p" tests="~p" errors="~p">~N',[Name,OKLength,KOLength]),
				findall(X, testdata(X), R),formatTests(R,OutStream),
				%testdata(T1)->(format(OutStream,'~p~N',[T1]));(close(OutStream)),1=1.
				close(OutStream).


formatTests([],_).
formatTests([X|Y],OutStream):- formatTest(X,OutStream),formatTests(Y,OutStream).

formatTest(X,OutStream):-atom_codes(Data,X),format(OutStream,'~p~N',[Data]).

initTmpDumpFile:-dumpFile(File),open(File,write,OutStream),format(OutStream,'~N',[]),close(OutStream).
addPropertiesDumpFile(1):-dumpFile(File),open(File,append,OutStream),format(OutStream,'<properties/>~N',[]),close(OutStream).
closeDumpFile:-dumpFile(File),open(File,append,OutStream),
			format(OutStream,'<system-out><![CDATA[]]></system-out><system-out><![CDATA[]]></system-out>~N',[]),
			format(OutStream,'</testsuite>~N',[]),close(OutStream).

addTestDumpFile(TestCase,TestResult,TestTime):-dumpFile(File),open(File,append,OutStream),
			format(OutStream,'<testcase classname="~p" name="~p"  time="~p">~N',[TestCase,TestCase,TestTime]),
			(TestResult=0 -> format(OutStream,'<error message="Error at predicate ~p" type="Assertion error"/>~N',[TestCase]);1=1),
			format(OutStream,'</testcase>~N',[]),
			close(OutStream).
			
dumpResults:- statistics(walltime,[_,Time]),currentTest(Pred),testResult(Pred,Status),addTestDumpFile(Pred,Status,Time).


total(OKLength,KOLength):-findall(X, testResult(X,_), OK), length(OK,OKLength),findall(X, testResult(X,0), KO), length(KO,KOLength).