File: CReasonerTestfileErrorEvaluator.cpp

package info (click to toggle)
konclude 0.7.0%2B1137~dfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 48,824 kB
  • sloc: cpp: 378,238; xml: 116,067; makefile: 38; sh: 8; ansic: 3
file content (120 lines) | stat: -rw-r--r-- 4,206 bytes parent folder | download | duplicates (2)
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
115
116
117
118
119
120
/*
 *		Copyright (C) 2013-2015, 2019 by the Konclude Developer Team.
 *
 *		This file is part of the reasoning system Konclude.
 *		For details and support, see <http://konclude.com/>.
 *
 *		Konclude is free software: you can redistribute it and/or modify
 *		it under the terms of version 3 of the GNU Lesser General Public
 *		License (LGPLv3) as published by the Free Software Foundation.
 *
 *		Konclude is distributed in the hope that it will be useful,
 *		but WITHOUT ANY WARRANTY; without even the implied warranty of
 *		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *		GNU (Lesser) General Public License for more details.
 *
 *		You should have received a copy of the GNU (Lesser) General Public
 *		License along with Konclude. If not, see <http://www.gnu.org/licenses/>.
 *
 */

#include "CReasonerTestfileErrorEvaluator.h"


namespace Konclude {

	namespace Test {



		CReasonerTestfileErrorEvaluator::CReasonerTestfileErrorEvaluator() : CLogIdentifier("::Konclude::Test::ReasonerTestfileErrorEvaluator",this) {
		}


		CReasonerTestfileErrorEvaluator::~CReasonerTestfileErrorEvaluator() {
		}


		CReasonerTestfileEvaluator *CReasonerTestfileErrorEvaluator::evaluateTestfile(CReasonerTestfileTest *test, const QByteArray &resultingByteArray) {
			QDomDocument document;
			if (document.setContent(resultingByteArray,true)) {
				QDomElement documentEl(document.documentElement());
				checkTestResponseErrors(test->getTestResults(),&documentEl);
			} else {
				test->getTestResults()->addTestResult(false,false,false,false,0);
			}
			return this;
		}


		CReasonerTestfileErrorEvaluator *CReasonerTestfileErrorEvaluator::checkTestResponseErrors(CReasonerTestfileTestResult *testResult, QDomElement *node) {

			QDomElement documentElement(*node);

			QString docElemName = documentElement.tagName();
			if (docElemName == "ox:ResponseMessage" || docElemName == "ResponseMessage") {
				QDomElement responseElement = documentElement.firstChildElement();
				
				double totalResponseTime = 0;
				bool responseError = false;
				bool wrongResult = false;

				while (!responseElement.isNull()) {
					bool unknownElement = false;
					bool errorElement = false;
					bool hasResponseTime = false;
					qint64 responseTime = 0;
					QString respElemName = responseElement.tagName();
					if (respElemName == "ox:KB" || respElemName == "KB") {						
					} else if (respElemName == "ox:OK" || respElemName == "OK") {
					} else if (respElemName == "ox:Error" || respElemName == "Error") {
						QDomElement errResult = responseElement.firstChildElement("BooleanResponse");
						if (errResult.isNull()) {
							errResult = responseElement.firstChildElement("ox:BooleanResponse");
						}
						if (errResult.isNull()) {
							errorElement = true;
						} else {
							wrongResult = true;
							QString boolRespString = errResult.attribute("result");
							LOG(WARNING,getLogDomain(),logTr("WRONG result of tested reasoner is '%1'.").arg(boolRespString),this);
						}
					} else if (respElemName == "ox:BooleanResponse" || respElemName == "BooleanResponse") {
						QString respTimeString = responseElement.attribute("response-time","");
						if (!respTimeString.isEmpty()) {
							bool convertResponseTimeSuccess = false;
							responseTime = respTimeString.toLongLong(&convertResponseTimeSuccess);
							if (convertResponseTimeSuccess) {
								hasResponseTime = true;
							}
						}
						QString boolRespString = responseElement.attribute("result");
						LOG(INFO,getLogDomain(),logTr("Reasoner calculated correct result: '%1'.").arg(boolRespString),this);

					} else if (respElemName == "#text") {
						// ignoring text nodes
					} else if (respElemName == "#comment") {
						// ignoring comment nodes
					} else {
						unknownElement = true;
					}

					if (unknownElement || errorElement) {
						responseError = true;
					} 
					if (hasResponseTime) {
						totalResponseTime += responseTime;
					}
					responseElement = responseElement.nextSiblingElement();
				}

				testResult->addTestResult(false,false,responseError,!wrongResult,totalResponseTime);
			}
			return this;

		}


	}; // end namespace Test

}; // end namespace Konclude