From 8cf17b401dc3414a95054f55829cb2e519ed5ec2 Mon Sep 17 00:00:00 2001 From: Javier <10879637+javiertuya@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:41:50 +0200 Subject: [PATCH] Review style of class html reports --- .../Giis.Qacover.Report/BaseHtmlWriter.cs | 44 ++ .../Giis.Qacover.Report/ClassHtmlWriter.cs | 123 ++-- .../Giis.Qacover.Report/IndextHtmlWriter.cs | 28 +- .../Giis.Qacover.Report/ReportManager.cs | 50 +- .../Giis.Qacover.Report/SharedHtmlWriter.cs | 41 -- net/resources/qacover-report/index.html | 95 +-- .../test4giis.qacoverapp.AppSimpleJdbc.html | 593 +++++++++++++----- .../test4giis.qacoverapp.AppSimpleJdbc2.html | 257 ++++++-- ...4giis.qacoverapp.AppSimpleJdbc3Errors.html | 388 +++++++++--- .../test/resources/qacover-report/index.html | 95 +-- .../test4giis.qacoverapp.AppSimpleJdbc.html | 593 +++++++++++++----- .../test4giis.qacoverapp.AppSimpleJdbc2.html | 257 ++++++-- ...4giis.qacoverapp.AppSimpleJdbc3Errors.html | 378 ++++++++--- .../giis/qacover/report/BaseHtmlWriter.java | 50 ++ .../giis/qacover/report/ClassHtmlWriter.java | 258 +++++--- .../giis/qacover/report/IndextHtmlWriter.java | 58 +- .../giis/qacover/report/ReportManager.java | 54 +- .../giis/qacover/report/SharedHtmlWriter.java | 50 -- 18 files changed, 2381 insertions(+), 1031 deletions(-) create mode 100644 net/QACover/Translated/Giis.Qacover.Report/BaseHtmlWriter.cs delete mode 100644 net/QACover/Translated/Giis.Qacover.Report/SharedHtmlWriter.cs create mode 100644 qacover-model/src/main/java/giis/qacover/report/BaseHtmlWriter.java delete mode 100644 qacover-model/src/main/java/giis/qacover/report/SharedHtmlWriter.java diff --git a/net/QACover/Translated/Giis.Qacover.Report/BaseHtmlWriter.cs b/net/QACover/Translated/Giis.Qacover.Report/BaseHtmlWriter.cs new file mode 100644 index 0000000..6a5858c --- /dev/null +++ b/net/QACover/Translated/Giis.Qacover.Report/BaseHtmlWriter.cs @@ -0,0 +1,44 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +/////// THIS FILE HAS BEEN AUTOMATICALLY CONVERTED FROM THE JAVA SOURCES. DO NOT EDIT /////// +///////////////////////////////////////////////////////////////////////////////////////////// +using Giis.Portable.Xml.Tiny; +using Giis.Qacover.Model; + + +namespace Giis.Qacover.Report +{ + public abstract class BaseHtmlWriter + { + protected internal virtual string GetHeader(string title) + { + return "\n" + "\n" + "\n" + "" + title + "\n" + GetCommonHeaders() + GetStyles() + GetScripts() + "\n\n"; + } + + protected internal virtual string GetCommonHeaders() + { + return "\n" + "\n" + "\n" + + "\n" + "\n" + + "\n"; + } + + protected internal abstract string GetScripts(); + + protected internal abstract string GetStyles(); + + protected internal virtual string GetFooter() + { + Variability variab = new Variability(); + return "\n
" + "\n" + "Generated by: QACover " + variab.GetPlatformName() + " - [version " + variab.GetVersion() + "]" + " - [Submit a problem report]\n" + "
\n"; + } + + protected internal virtual string Encode(string text) + { + return XNodeAbstract.EncodeText(text); + } + + public static string Percent(int count, int dead) + { + return count == 0 ? string.Empty : ((dead * 100) / count).ToString() + "%"; + } + } +} diff --git a/net/QACover/Translated/Giis.Qacover.Report/ClassHtmlWriter.cs b/net/QACover/Translated/Giis.Qacover.Report/ClassHtmlWriter.cs index c10e0e8..665b21c 100644 --- a/net/QACover/Translated/Giis.Qacover.Report/ClassHtmlWriter.cs +++ b/net/QACover/Translated/Giis.Qacover.Report/ClassHtmlWriter.cs @@ -1,103 +1,110 @@ ///////////////////////////////////////////////////////////////////////////////////////////// /////// THIS FILE HAS BEEN AUTOMATICALLY CONVERTED FROM THE JAVA SOURCES. DO NOT EDIT /////// ///////////////////////////////////////////////////////////////////////////////////////////// -using System.Text; -using Giis.Portable.Xml.Tiny; using Giis.Qacover.Model; +using Giis.Qacover.Reader; namespace Giis.Qacover.Report { - public class ClassHtmlWriter + public class ClassHtmlWriter : BaseHtmlWriter { - private const string HtmlNewline = "
"; + protected internal override string GetScripts() + { + return "\n"; + } - public virtual string GetHeader(string className) + protected internal override string GetStyles() { - return SharedHtmlWriter.GetHtmlBegin(className, true) + "\n

" + className + "

" + "\n
"; + return "\n"; } - public virtual string GetQueryBody(QueryModel rules, string methodIdentifier, string queryId) + public virtual string GetBodyContent(string title, string content) { - StringBuilder sb = new StringBuilder(); - sb.Append(GetRuleHeader(rules, methodIdentifier, queryId)); - foreach (RuleModel rule in rules.GetRules()) - { - sb.Append(GetRuleBody(rule)); - } - sb.Append(GetRuleFooter()); - return sb.ToString(); + return "\n" + "
\n" + "
\n" + "

[Index] " + title + "

\n" + "
\n" + "
\n" + + " \n" + " \n" + "
\n" + "
\n" + " \n" + + " \n" + "
\n" + "
\n" + " \n" + " \n" + + "
\n" + "
\n" + "
\n" + "\n" + "
\n" + "\n" + " \n" + content + "\n" + "
LineCoverageSource code/method, queries and rules
\n" + "
\n" + GetFooter() + + "
\n" + "\n"; } - public virtual string GetFooter() + public virtual string GetLineContent(QueryReader query) { - return "\n
" + SharedHtmlWriter.GetHtmlEnd(); + string template = " \n" + " $lineNumber$\n" + " $percentCoverage$ ($deadCount$/$runCount$)\n" + " \n" + " $methodName$\n" + + " $sourceCode$\n" + " \n" + " \n"; + return template.Replace("$lineNumber$", query.GetKey().GetClassLine()).Replace("$deadCount$", query.GetModel().GetDead().ToString()).Replace("$runCount$", query.GetModel().GetCount().ToString()).Replace("$percentCoverage$", Percent(query.GetModel().GetCount(), query.GetModel().GetDead + ())).Replace("$methodName$", query.GetKey().GetMethodName()).Replace("$sourceCode$", "(source code not available) (source code not available) (source code not available)"); } - // Details of each rule - private string GetRuleHeader(QueryModel rules, string methodIdentifier, string queryId) + public virtual string GetQueryContent(QueryReader query) { - string sql = rules.GetSql(); - return "\n\n
" + "\n
" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n
" + methodIdentifier + "" + "\n
" - + SharedHtmlWriter.Percent(rules.GetCount(), rules.GetDead()) + " (" + rules.GetDead() + "/" + rules.GetCount() + ")" + " " + rules.GetQrun() + " run(s)" + (rules.GetError() > 0 ? " " + rules.GetError() + " rule(s) with error" : string.Empty - ) + "\n
" + GetSqlToHtml(XNodeAbstract.EncodeText(sql)) + GetErrorsHtml(rules) + "\n
" + "\n
" + "\n
" + "\n" + "\n"; + string template = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; + return template.Replace("$runCount$", query.GetModel().GetQrun().ToString()).Replace("$sqlQuery$", GetSqlHtml(Encode(query.GetSql()))).Replace("$errorsQuery$", GetErrorsHtml(Encode(query.GetModel().GetErrorString()), query.GetModel().GetError())); } - public virtual string GetRuleBody(RuleModel rule) + public virtual string GetRulesContent(string rulesContent) { - bool covered = rule.GetDead() != 0; - string template = "\n" + "\n" + "\n"; - return template.Replace("$id", rule.GetId()).Replace("$count", rule.GetCount().ToString()).Replace("$dead", rule.GetDead().ToString()).Replace("$category", rule.GetCategory()).Replace("$subtype", rule.GetSubtype()).Replace("$type", rule.GetMainType()).Replace("$location", rule.GetLocation - ()).Replace("$description", XNodeAbstract.EncodeText(rule.GetDescription()).Replace("\n", HtmlNewline)).Replace("$sql", GetSqlToHtml(rule.GetSql())).Replace("$error", GetErrorsHtml(rule)).Replace("$style", covered ? Bgcolor("palegreen") : Bgcolor("lightyellow")); + return " \n" + rulesContent + " \n" + " \n\n"; } - private string GetErrorsHtml(QueryModel rule) + // just to give a little separation after rules + public virtual string GetRuleContent(RuleModel rule) { - string errors = rule.GetErrorString().Replace("\n", HtmlNewline); - if (!string.Empty.Equals(errors)) + string template = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + + " \n" + " $ruleErrors$"; + // needs a complete row to allow error message span across description and sql columns + return template.Replace("$ruleId$", rule.GetId()).Replace("$ruleDead$", rule.GetDead().ToString()).Replace("$ruleCount$", rule.GetCount().ToString()).Replace("$ruleCategory$", rule.GetCategory()).Replace("$ruleType$", rule.GetMainType()).Replace("$ruleSubtype$", rule.GetSubtype()) + .Replace("$ruleLocation$", Encode(rule.GetLocation())).Replace("$ruleStatus$", rule.GetDead() > 0 ? "covered" : "uncovered").Replace("$ruleDescription$", GetDescriptionHtml(Encode(rule.GetDescription()))).Replace("$ruleSql$", GetSqlHtml(Encode(rule.GetSql()))).Replace("$ruleErrors$" + , GetErrorsHtml(Encode(rule.GetErrorString()))); + } + + private string GetErrorsHtml(string queryErrors, int ruleErrorCount) + { + if (!string.Empty.Equals(queryErrors)) { - return "
" + errors + ""; + // error in query execution + return "\n
Query error: " + queryErrors + "\n"; + } + if (ruleErrorCount > 0) + { + // error in any rule(s) + return "\n
" + ruleErrorCount + " rule(s) with error\n"; } return string.Empty; } - //no error - private string GetErrorsHtml(RuleModel rule) + // no error + private string GetErrorsHtml(string errors) { - string errors = rule.GetErrorString().Replace("\n", HtmlNewline); if (!string.Empty.Equals(errors)) { - return "
" + errors + ""; + return "\n"; } return string.Empty; } - //no error - private string GetRuleFooter() + // no error + private string GetSqlHtml(string sql) { - return "\n
IDdeadcountcategorytypesubtypelocation
\n" + " \n" + " $runCount$ run(s)\n" + + " \n" + " \n" + "
(run params not available)
\n" + " $sqlQuery$ $errorsQuery$" + + "
$id$dead$count$category$type$subtype$location
" + "
" + "
$description
" + "
$sql$error
" - + "
" + "
$ruleId$ - dead: $ruleDead$ count: $ruleCount$\n" + " category: $ruleCategory$ type: $ruleType$ subtype: $ruleSubtype$ location: $ruleLocation$\n" + + "
(run params not available)
\n" + "
$ruleDescription$$ruleSql$
" + "Rule error: " + errors.Replace("\n", "\n
") + "
"; - } - - // - private string Bgcolor(string color) - { - return " style=\"background:" + color + ";\""; + string br = "
"; + sql = sql.Replace("SELECT ", "SELECT ").Replace("FROM ", br + "FROM ").Replace("LEFT JOIN ", br + "LEFT JOIN ").Replace("RIGHT JOIN ", br + "RIGHT JOIN ").Replace("INNER JOIN ", br + "INNER JOIN " + ).Replace("WHERE ", br + "WHERE ").Replace("GROUP BY ", br + "GROUP BY ").Replace("HAVING ", br + "HAVING ").Replace("ORDER BY ", br + "ORDER BY ").Replace("UNION ", br + "UNION "); + return sql; } - /// A simple formating of SQL to display in html - private string GetSqlToHtml(string sql) + private string GetDescriptionHtml(string desc) { - sql = sql.Replace("SELECT ", "SELECT "); - sql = sql.Replace("FROM ", "
FROM "); - sql = sql.Replace("LEFT JOIN ", "
LEFT JOIN "); - sql = sql.Replace("RIGHT JOIN ", "
RIGHT JOIN "); - sql = sql.Replace("INNER JOIN ", "
INNER JOIN "); - sql = sql.Replace("WHERE ", "
WHERE "); - sql = sql.Replace("GROUP BY ", "
GROUP BY "); - sql = sql.Replace("HAVING ", "
HAVING "); - sql = sql.Replace("ORDER BY ", "
ORDER BY "); - return sql; + return desc.Replace("\n", "
"); } } } diff --git a/net/QACover/Translated/Giis.Qacover.Report/IndextHtmlWriter.cs b/net/QACover/Translated/Giis.Qacover.Report/IndextHtmlWriter.cs index 4374997..f412cc5 100644 --- a/net/QACover/Translated/Giis.Qacover.Report/IndextHtmlWriter.cs +++ b/net/QACover/Translated/Giis.Qacover.Report/IndextHtmlWriter.cs @@ -5,25 +5,31 @@ namespace Giis.Qacover.Report { - public class IndextHtmlWriter + public class IndextHtmlWriter : BaseHtmlWriter { - public virtual string GetHeader() + protected internal override string GetScripts() { - return SharedHtmlWriter.GetHtmlBegin("SQL Query Fpc Coverage", false) + "\n

SQL Query Fpc Coverage

" + "\n" + "\n"; + return string.Empty; } - public virtual string GetBody(string className, int qrun, int qcount, int qerror, int count, int dead, int error) + protected internal override string GetStyles() { - string template = "\n\n" + "\n" + "\n" + "\n"; - return template.Replace("$classLink", "TOTAL".Equals(className) ? className : "" + className + "").Replace("$percent", SharedHtmlWriter.Percent(count, dead)).Replace("$progbarvalue", SharedHtmlWriter.Percent(count, dead).Replace("%", string.Empty - )).Replace("$qrun", qrun.ToString()).Replace("$qcount", qcount.ToString()).Replace("$qerror", qerror > 0 ? "" + qerror + "" : qerror.ToString()).Replace("$count", count.ToString()).Replace("$dead", dead.ToString()).Replace("$error", error > 0 ? "" - + error + "" : error.ToString()); + return "\n"; } - public virtual string GetFooter() + public virtual string GetBodyContent(string title, string content) { - return "\n
Class%qrunqcountqerrordeadcounterror
$classLink$percent
" + "\n
" - + "\n
$qrun$qcount$qerror$dead$count$error
" + SharedHtmlWriter.GetHtmlFooter() + SharedHtmlWriter.GetHtmlEnd(); + return "\n" + "
\n" + "

" + title + "

\n" + " \n" + " \n" + content + + "
Class%qrunqcountqerrordeadcounterror
\n" + GetFooter() + "
\n" + "\n"; + } + + public virtual string GetBodyRow(string className, int qrun, int qcount, int qerror, int count, int dead, int error) + { + string template = " \n" + " $classLink\n" + " $percent\n" + "
\n" + "
\n" + + "
\n" + " $qrun$qcount$qerror$dead$count$error\n" + " \n"; + return template.Replace("$classLink", "TOTAL".Equals(className) ? className : "" + className + "").Replace("$percent", Percent(count, dead)).Replace("$progbarvalue", Percent(count, dead).Replace("%", string.Empty)).Replace("$qrun", qrun.ToString + ()).Replace("$qcount", qcount.ToString()).Replace("$qerror", qerror > 0 ? "" + qerror + "" : qerror.ToString()).Replace("$count", count.ToString()).Replace("$dead", dead.ToString()).Replace("$error", error > 0 ? "" + error + + "" : error.ToString()); } } } diff --git a/net/QACover/Translated/Giis.Qacover.Report/ReportManager.cs b/net/QACover/Translated/Giis.Qacover.Report/ReportManager.cs index 00fe2f6..a05d375 100644 --- a/net/QACover/Translated/Giis.Qacover.Report/ReportManager.cs +++ b/net/QACover/Translated/Giis.Qacover.Report/ReportManager.cs @@ -25,40 +25,48 @@ public virtual void Run(string rulesFolder, string reportFolder) ConsoleWrite("Report folder: " + FileUtil.GetFullPath(reportFolder)); FileUtil.CreateDirectory(reportFolder); // Report index - IndextHtmlWriter ihw = new IndextHtmlWriter(); - StringBuilder isb = new StringBuilder(); - isb.Append(ihw.GetHeader()); + IndextHtmlWriter indexWriter = new IndextHtmlWriter(); // Using a CoverageReader to access the store by class and then by query CoverageCollection classes = new CoverageReader(rulesFolder).GetByClass(); - StringBuilder ibodysb = new StringBuilder(); + StringBuilder indexRowsSb = new StringBuilder(); for (int i = 0; i < classes.Size(); i++) { QueryCollection query = classes.Get(i); + // a line of the index report string className = query.GetName(); CoverageSummary summary = query.GetSummary(); ConsoleWrite("Report for class: " + className + " " + summary.ToString()); - ibodysb.Append(ihw.GetBody(className, summary.GetQrun(), summary.GetQcount(), summary.GetQerror(), summary.GetCount(), summary.GetDead(), summary.GetError())); + indexRowsSb.Append(indexWriter.GetBodyRow(className, summary.GetQrun(), summary.GetQcount(), summary.GetQerror(), summary.GetCount(), summary.GetDead(), summary.GetError())); // Generates a file for this class - ClassHtmlWriter writer = new ClassHtmlWriter(); - StringBuilder qsb = new StringBuilder(); - qsb.Append(writer.GetHeader(className)); - // Includes each query - for (int j = 0; j < query.Size(); j++) - { - string methodIdentifier = query.Get(j).GetKey().GetMethodName(true); - QueryModel rules = query.Get(j).GetModel(); - qsb.Append(writer.GetQueryBody(rules, methodIdentifier, "query" + j)); - } - qsb.Append(writer.GetFooter()); - FileUtil.FileWrite(reportFolder, className + ".html", qsb.ToString()); + ClassHtmlWriter classWriter = new ClassHtmlWriter(); + string htmlCoverage = GetClassCoverage(query, classWriter); + string htmlCoverageContent = classWriter.GetHeader(className) + classWriter.GetBodyContent(className, htmlCoverage); + FileUtil.FileWrite(reportFolder, className + ".html", htmlCoverageContent); } // Puts everything, with totals as first line CoverageSummary totals = classes.GetSummary(); - isb.Append(ihw.GetBody("TOTAL", totals.GetQrun(), totals.GetQcount(), totals.GetQerror(), totals.GetCount(), totals.GetDead(), totals.GetError())); - isb.Append(ibodysb.ToString()); - isb.Append(ihw.GetFooter()); - FileUtil.FileWrite(reportFolder, "index.html", isb.ToString()); + string indexRowsHeader = indexWriter.GetBodyRow("TOTAL", totals.GetQrun(), totals.GetQcount(), totals.GetQerror(), totals.GetCount(), totals.GetDead(), totals.GetError()); + string indexContent = indexWriter.GetHeader("SQL Query Fpc Coverage") + indexWriter.GetBodyContent("SQL Query Fpc Coverage", indexRowsHeader + indexRowsSb.ToString()); + //htmlClasses += indexWriter.getFooter(); + FileUtil.FileWrite(reportFolder, "index.html", indexContent); ConsoleWrite(classes.Size() + " classes generated, see index.html at reports folder"); } + + private string GetClassCoverage(QueryCollection query, ClassHtmlWriter writer) + { + StringBuilder csb = new StringBuilder(); + for (int j = 0; j < query.Size(); j++) + { + QueryReader thisQuery = query.Get(j); + csb.Append(writer.GetLineContent(thisQuery)).Append(writer.GetQueryContent(query.Get(j))); + StringBuilder rsb = new StringBuilder(); + for (int k = 0; k < thisQuery.GetModel().GetRules().Count; k++) + { + rsb.Append(writer.GetRuleContent(thisQuery.GetModel().GetRules()[k])); + } + csb.Append(writer.GetRulesContent(rsb.ToString())); + } + return csb.ToString(); + } } } diff --git a/net/QACover/Translated/Giis.Qacover.Report/SharedHtmlWriter.cs b/net/QACover/Translated/Giis.Qacover.Report/SharedHtmlWriter.cs deleted file mode 100644 index 8d7c4cf..0000000 --- a/net/QACover/Translated/Giis.Qacover.Report/SharedHtmlWriter.cs +++ /dev/null @@ -1,41 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////////// -/////// THIS FILE HAS BEEN AUTOMATICALLY CONVERTED FROM THE JAVA SOURCES. DO NOT EDIT /////// -///////////////////////////////////////////////////////////////////////////////////////////// -using System; -using Giis.Qacover.Model; - - -namespace Giis.Qacover.Report -{ - public class SharedHtmlWriter - { - private SharedHtmlWriter() - { - throw new InvalidOperationException("Utility class"); - } - - public static string GetHtmlBegin(string title, bool fullWidth) - { - string bootstrap = "\n" + "\n" - + "\n" + "\n"; - return "" + "\n" + "\n" + "\n" + title + "" + "\n" + "\n" + bootstrap + "\n" - + "\n" + "\n" + "\n
"; - } - - public static string GetHtmlFooter() - { - Variability variab = new Variability(); - return "\n
" + "" + "Generated by: QACover " + variab.GetPlatformName() + " - [version " + variab.GetVersion() + "]" + " - [Submit a problem report]" + "" + "
"; - } - - public static string GetHtmlEnd() - { - return "\n
" + "\n" + "\n"; - } - - public static string Percent(int count, int dead) - { - return count == 0 ? string.Empty : ((dead * 100) / count).ToString() + "%"; - } - } -} diff --git a/net/resources/qacover-report/index.html b/net/resources/qacover-report/index.html index 5ae3d67..28ef935 100644 --- a/net/resources/qacover-report/index.html +++ b/net/resources/qacover-report/index.html @@ -1,50 +1,61 @@ - + SQL Query Fpc Coverage - - - - - - - + + + + + + + - -
-

SQL Query Fpc Coverage

- - - - - - - - - - - - - - - - + +
+

SQL Query Fpc Coverage

+
Class%qrunqcountqerrordeadcounterror
TOTAL38%
-
-
2012112312
Test4giis.Qacoverapp.AppSimpleJdbc41%
-
-
11607170
Test4giis.Qacoverapp.AppSimpleJdbc266%
-
-
420460
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Class%qrunqcountqerrordeadcounterror
TOTAL38%
+
+
2012112312
Test4giis.Qacoverapp.AppSimpleJdbc41%
+
+
11607170
Test4giis.Qacoverapp.AppSimpleJdbc266%
+
+
420460
Test4giis.Qacoverapp.AppSimpleJdbc3Errors12%
+
+
541182
-
Test4giis.Qacoverapp.AppSimpleJdbc3Errors -12% -
-
-
-541182 - -
Generated by: QACover netcore - [version 1.6.3-SNAPSHOT] - [Submit a problem report]
+
+Generated by: QACover netcore - [version 1.6.4-SNAPSHOT+8901d054b150fc2fa3dc32f168b69f020cb5a437] - [Submit a problem report] +
- \ No newline at end of file diff --git a/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html b/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html index 04b40a5..f1aa1ab 100644 --- a/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html +++ b/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html @@ -1,173 +1,450 @@ - + Test4giis.Qacoverapp.AppSimpleJdbc - - - - - - - + + + + + + + + - -
-

Test4giis.Qacoverapp.AppSimpleJdbc

-
-
-
- - - - - -
QueryDifferentSingleLine:51 -
50% (1/2) 2 run(s) -
SELECT *
FROM test
WHERE num = ?1? -
+ +
+
+

[Index] Test4giis.Qacoverapp.AppSimpleJdbc

+
+
+ + +
+
+ + +
+
+ + +
+
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
102STFF1.w.1.[WHERE num = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(num = ?1?)
222STTF1.w.1.[WHERE num = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num = ?1? is TRUE
SELECT *
FROM test
WHERE (num = ?1?)
-
-
- - - - - -
QueryDifferentSingleLine:56 -
33% (1/3) 1 run(s) -
SELECT *
FROM test
WHERE text = ?1? -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101STFF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(text = ?1?)
211STTF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE
SELECT *
FROM test
WHERE (text = ?1?)
301SNNF1.w.1.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
SELECT *
FROM test
WHERE (text IS NULL)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
-
-
LineCoverageSource code/method, queries and rules
5150% (1/2) + QueryDifferentSingleLine + (source code not available) (source code not available) (source code not available) +
+ + 2 run(s) + + +
(run params not available)
+ SELECT *
FROM test
WHERE num = ?1?
1 - dead: 0 count: 2 + category: S type: T subtype: FF location: 1.w.1.[WHERE num = ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(num = ?1?)
2 - dead: 2 count: 2 + category: S type: T subtype: TF location: 1.w.1.[WHERE num = ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num = ?1? is TRUE
SELECT *
FROM test
WHERE (num = ?1?)
- - - - -
QueryEqualDifferentLine:72 -
33% (1/3) 2 run(s) -
SELECT *
FROM test
WHERE text = ?1? -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
102STFF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(text = ?1?)
222STTF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE
SELECT *
FROM test
WHERE (text = ?1?)
302SNNF1.w.1.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
SELECT *
FROM test
WHERE (text IS NULL)
+ + 56 + 33% (1/3) + + QueryDifferentSingleLine + (source code not available) (source code not available) (source code not available) + + + + + + + + 1 run(s) + + + +
(run params not available)
+ SELECT *
FROM test
WHERE text = ?1? + + + + + + 1 - dead: 0 count: 1 + + category: S type: T subtype: FF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE + SELECT *
FROM test
WHERE NOT(text = ?1?) + + + + 2 - dead: 1 count: 1 + + category: S type: T subtype: TF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE + SELECT *
FROM test
WHERE (text = ?1?) + + + + 3 - dead: 0 count: 1 + + category: S type: N subtype: NF location: 1.w.1.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL + SELECT *
FROM test
WHERE (text IS NULL) + + + -
-
- - - - - -
QueryEqualDifferentLine:75 -
33% (1/3) 2 run(s) -
SELECT *
FROM test
WHERE text = ?1? -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
122STFF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(text = ?1?)
202STTF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE
SELECT *
FROM test
WHERE (text = ?1?)
302SNNF1.w.1.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
SELECT *
FROM test
WHERE (text IS NULL)
+ + 72 + 33% (1/3) + + QueryEqualDifferentLine + (source code not available) (source code not available) (source code not available) + + + + + + + + 2 run(s) + + + +
(run params not available)
+ SELECT *
FROM test
WHERE text = ?1? + + + + + + 1 - dead: 0 count: 2 + + category: S type: T subtype: FF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE + SELECT *
FROM test
WHERE NOT(text = ?1?) + + + + 2 - dead: 2 count: 2 + + category: S type: T subtype: TF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE + SELECT *
FROM test
WHERE (text = ?1?) + + + + 3 - dead: 0 count: 2 + + category: S type: N subtype: NF location: 1.w.1.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL + SELECT *
FROM test
WHERE (text IS NULL) + + + + + + 75 + 33% (1/3) + + QueryEqualDifferentLine + (source code not available) (source code not available) (source code not available) + + + + + + + + 2 run(s) + + + +
(run params not available)
+ SELECT *
FROM test
WHERE text = ?1? + + + + + + 1 - dead: 2 count: 2 + + category: S type: T subtype: FF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE + SELECT *
FROM test
WHERE NOT(text = ?1?) + + + + 2 - dead: 0 count: 2 + + category: S type: T subtype: TF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE + SELECT *
FROM test
WHERE (text = ?1?) + + + + 3 - dead: 0 count: 2 + + category: S type: N subtype: NF location: 1.w.1.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL + SELECT *
FROM test
WHERE (text IS NULL) + + + + + + 29 + 50% (1/2) + + QueryNoParameters1Condition + (source code not available) (source code not available) (source code not available) + + + + + + + + 1 run(s) + + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num >= ?1? + + + + + + 1 - dead: 0 count: 1 + + category: S type: T subtype: FF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE + SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?) + + + + 2 - dead: 1 count: 1 + + category: S type: T subtype: TF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE + SELECT id , num , text
FROM test
WHERE (num >= ?1?) + + + + + + 35 + 50% (2/4) + + QueryNoParameters2Condition + (source code not available) (source code not available) (source code not available) + + + + + + + + 3 run(s) + + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2? + + + + + + 1 - dead: 1 count: 3 + + category: S type: T subtype: TT location: 1.w.1.[num > ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE + SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?) + + + + 2 - dead: 0 count: 3 + + category: S type: T subtype: FT location: 1.w.1.[num > ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE + SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?) + + + + 3 - dead: 2 count: 3 + + category: S type: T subtype: FT location: 1.w.2.[text = ?2?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE + SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?) + + + + 4 - dead: 0 count: 3 + + category: S type: N subtype: NT location: 1.w.2.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE + SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?) + + + -
-
- - - - - -
QueryNoParameters1Condition:29 -
50% (1/2) 1 run(s) -
SELECT id , num , text
FROM test
WHERE num >= ?1? -
-
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101STFF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?)
211STTF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (num >= ?1?)
-
-
- - - - -
QueryNoParameters2Condition:35 -
50% (2/4) 3 run(s) -
SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2? -
-
- - - - - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
113STTT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?)
203STFT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?)
323STFT1.w.2.[text = ?2?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?)
403SNNT1.w.2.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?)
-
+ +
+Generated by: QACover netcore - [version 1.6.4-SNAPSHOT+8901d054b150fc2fa3dc32f168b69f020cb5a437] - [Submit a problem report] +
- \ No newline at end of file diff --git a/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html b/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html index e8bdbfa..7867512 100644 --- a/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html +++ b/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html @@ -1,72 +1,207 @@ - + Test4giis.Qacoverapp.AppSimpleJdbc2 - - - - - - - + + + + + + + + - -
-

Test4giis.Qacoverapp.AppSimpleJdbc2

-
-
-
- - - - - -
QueryNoParameters1Condition:22 -
50% (1/2) 3 run(s) -
SELECT id , num , text
FROM test
WHERE num >= ?1? -
+ +
+
+

[Index] Test4giis.Qacoverapp.AppSimpleJdbc2

+
+
+ + +
+
+ + +
+
+ + +
+
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
103STFF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?)
233STTF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (num >= ?1?)
-
-
- - - - - +
+
QueryNoParameters2Condition:28 -
75% (3/4) 1 run(s) -
SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2? -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LineCoverageSource code/method, queries and rules
2250% (1/2) + QueryNoParameters1Condition + (source code not available) (source code not available) (source code not available) +
+ + 3 run(s) + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num >= ?1?
1 - dead: 0 count: 3 + category: S type: T subtype: FF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?)
2 - dead: 3 count: 3 + category: S type: T subtype: TF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (num >= ?1?)
2875% (3/4) + QueryNoParameters2Condition + (source code not available) (source code not available) (source code not available) +
+ + 1 run(s) + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2?
1 - dead: 0 count: 1 + category: S type: T subtype: TT location: 1.w.1.[num > ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?)
2 - dead: 1 count: 1 + category: S type: T subtype: FT location: 1.w.1.[num > ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?)
3 - dead: 1 count: 1 + category: S type: T subtype: FT location: 1.w.2.[text = ?2?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?)
4 - dead: 1 count: 1 + category: S type: N subtype: NT location: 1.w.2.[text] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?)
-
- - - - - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101STTT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?)
211STFT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?)
311STFT1.w.2.[text = ?2?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?)
411SNNT1.w.2.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?)
-
+ +
+Generated by: QACover netcore - [version 1.6.4-SNAPSHOT+8901d054b150fc2fa3dc32f168b69f020cb5a437] - [Submit a problem report] +
- \ No newline at end of file diff --git a/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html b/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html index 40b8bf4..5c4e842 100644 --- a/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html +++ b/net/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html @@ -1,112 +1,302 @@ - + Test4giis.Qacoverapp.AppSimpleJdbc3Errors - - - - - - - + + + + + + + + - -
-

Test4giis.Qacoverapp.AppSimpleJdbc3Errors

-
-
-
- - - - - -
Query0Errors:22 -
50% (1/2) 1 run(s) -
select id,num,text from test where num<9 -
+ +
+
+

[Index] Test4giis.Qacoverapp.AppSimpleJdbc3Errors

+
+
+ + +
+
+ + +
+
+ + +
+
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
111STFF1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num < 9 is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num < 9)
201STTF1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num < 9 is TRUE
SELECT id , num , text
FROM test
WHERE (num < 9)
-
-
- - - - - -
Query1ErrorAtQuery:28 -
(0/0) 0 run(s) -
select id,num,text from test where num<10
Error at Get query table names: Giis.Tdrules.Openapi.Client.ApiException: Error calling QueryEntitiesPost:
404 Not Found

404 Not Found



nginx



Code 404
-
-
-
- - -
IDdeadcountcategorytypesubtypelocation
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
-
-
LineCoverageSource code/method, queries and rules
2250% (1/2) + Query0Errors + (source code not available) (source code not available) (source code not available) +
+ + 1 run(s) + + +
(run params not available)
+ select id,num,text from test where num<9
1 - dead: 1 count: 1 + category: S type: T subtype: FF location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num < 9 is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num < 9)
2 - dead: 0 count: 1 + category: S type: T subtype: TF location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num < 9 is TRUE
SELECT id , num , text
FROM test
WHERE (num < 9)
28 (0/0) + Query1ErrorAtQuery + (source code not available) (source code not available) (source code not available) +
+ + 0 run(s) + + +
(run params not available)
+ select id,num,text from test where num<10 +
Query error: Error at Get query table names: Giis.Tdrules.Openapi.Client.ApiException: Error calling QueryEntitiesPost: <html> +<head><title>404 Not Found</title></head> +<body> +<center><h1>404 Not Found</h1></center> +<hr><center>nginx</center> +</body> +</html> + Code 404 +
340% (0/3) + Query1ErrorAtRule + (source code not available) (source code not available) (source code not available) +
+ + 1 run(s) + + +
(run params not available)
+ select id,num,text from test where num < 11 +
1 rule(s) with error +
1 - dead: 0 count: 1 + category: S type: B subtype: B+F location: 1.w.1.[WHERE num < 11] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 12
selectar id,num,text from test where num < 9
Rule error: Giis.Qacover.Portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: System.Data.SQLite.SQLiteException: SQL logic error +
near "selectar": syntax error
2 - dead: 0 count: 1 + category: S type: B subtype: B=F location: 1.w.1.[WHERE num < 11] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 11
SELECT id , num , text
FROM test
WHERE (num = 11)
3 - dead: 0 count: 1 + category: S type: B subtype: B-F location: 1.w.1.[WHERE num < 11] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 10
SELECT id , num , text
FROM test
WHERE (num = 10)
400% (0/3) + QueryMultipleErrors + (source code not available) (source code not available) (source code not available) +
+ + 3 run(s) + + +
(run params not available)
+ select id,num,text from test where num<9 +
1 rule(s) with error +
1 - dead: 0 count: 3 + category: S type: B subtype: B+F location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 10
select id,num,text from notable where num < 9
Rule error: Giis.Qacover.Portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: System.Data.SQLite.SQLiteException: SQL logic error +
near "selectar": syntax error +
Giis.Qacover.Portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: System.Data.SQLite.SQLiteException: SQL logic error +
no such table: notable
2 - dead: 0 count: 3 + category: S type: B subtype: B=F location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 9
SELECT id , num , text
FROM test
WHERE (num = 9)
3 - dead: 0 count: 3 + category: S type: B subtype: B-F location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 8
SELECT id , num , text
FROM test
WHERE (num = 8)
- - - - -
Query1ErrorAtRule:34 -
0% (0/3) 1 run(s) 1 rule(s) with error -
select id,num,text from test where num < 11 -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101SBB+F1.w.1.[WHERE num < 11]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 12
selectar id,num,text from test where num < 9
Giis.Qacover.Portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: System.Data.SQLite.SQLiteException: SQL logic error
near "selectar": syntax error
201SBB=F1.w.1.[WHERE num < 11]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 11
SELECT id , num , text
FROM test
WHERE (num = 11)
301SBB-F1.w.1.[WHERE num < 11]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 10
SELECT id , num , text
FROM test
WHERE (num = 10)
-
-
- - - - -
QueryMultipleErrors:40 -
0% (0/3) 3 run(s) 1 rule(s) with error -
select id,num,text from test where num<9 -
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
103SBB+F1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 10
select id,num,text from notable where num < 9
Giis.Qacover.Portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: System.Data.SQLite.SQLiteException: SQL logic error
near "selectar": syntax error
Giis.Qacover.Portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: System.Data.SQLite.SQLiteException: SQL logic error
no such table: notable
203SBB=F1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 9
SELECT id , num , text
FROM test
WHERE (num = 9)
303SBB-F1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 8
SELECT id , num , text
FROM test
WHERE (num = 8)
-
+ +
+Generated by: QACover netcore - [version 1.6.4-SNAPSHOT+8901d054b150fc2fa3dc32f168b69f020cb5a437] - [Submit a problem report] +
- \ No newline at end of file diff --git a/qacover-core/src/test/resources/qacover-report/index.html b/qacover-core/src/test/resources/qacover-report/index.html index 39d8326..23e78fa 100644 --- a/qacover-core/src/test/resources/qacover-report/index.html +++ b/qacover-core/src/test/resources/qacover-report/index.html @@ -1,50 +1,61 @@ - + SQL Query Fpc Coverage - - - - - - - + + + + + + + - -
-

SQL Query Fpc Coverage

- - - - - - - - - - - - - - - - + +
+

SQL Query Fpc Coverage

+
Class%qrunqcountqerrordeadcounterror
TOTAL38%
-
-
2012112312
test4giis.qacoverapp.AppSimpleJdbc41%
-
-
11607170
test4giis.qacoverapp.AppSimpleJdbc266%
-
-
420460
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Class%qrunqcountqerrordeadcounterror
TOTAL38%
+
+
2012112312
test4giis.qacoverapp.AppSimpleJdbc41%
+
+
11607170
test4giis.qacoverapp.AppSimpleJdbc266%
+
+
420460
test4giis.qacoverapp.AppSimpleJdbc3Errors12%
+
+
541182
-test4giis.qacoverapp.AppSimpleJdbc3Errors -12% -
-
-
-541182 - -
Generated by: QACover java - [version 1.5.0-SNAPSHOT] - [Submit a problem report]
+
- \ No newline at end of file diff --git a/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html b/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html index 293c189..84fd40b 100644 --- a/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html +++ b/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc.html @@ -1,173 +1,450 @@ - + test4giis.qacoverapp.AppSimpleJdbc - - - - - - - + + + + + + + + - -
-

test4giis.qacoverapp.AppSimpleJdbc

-
-
-
- - - - - -
queryDifferentSingleLine:35 -
50% (1/2) 2 run(s) -
SELECT *
FROM test
WHERE num = ?1? -
+ +
+
+

[Index] test4giis.qacoverapp.AppSimpleJdbc

+
+
+ + +
+
+ + +
+
+ + +
+
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
102STFF1.w.1.[WHERE num = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(num = ?1?)
222STTF1.w.1.[WHERE num = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num = ?1? is TRUE
SELECT *
FROM test
WHERE (num = ?1?)
-
-
- - - - - -
queryDifferentSingleLine:35 -
33% (1/3) 1 run(s) -
SELECT *
FROM test
WHERE text = ?1? -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101STFF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(text = ?1?)
211STTF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE
SELECT *
FROM test
WHERE (text = ?1?)
301SNNF1.w.1.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
SELECT *
FROM test
WHERE (text IS NULL)
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
-
-
LineCoverageSource code/method, queries and rules
3550% (1/2) + queryDifferentSingleLine + (source code not available) (source code not available) (source code not available) +
+ + 2 run(s) + + +
(run params not available)
+ SELECT *
FROM test
WHERE num = ?1?
1 - dead: 0 count: 2 + category: S type: T subtype: FF location: 1.w.1.[WHERE num = ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(num = ?1?)
2 - dead: 2 count: 2 + category: S type: T subtype: TF location: 1.w.1.[WHERE num = ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num = ?1? is TRUE
SELECT *
FROM test
WHERE (num = ?1?)
- - - - -
queryEqualDifferentLine:41 -
33% (1/3) 2 run(s) -
SELECT *
FROM test
WHERE text = ?1? -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
102STFF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(text = ?1?)
222STTF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE
SELECT *
FROM test
WHERE (text = ?1?)
302SNNF1.w.1.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
SELECT *
FROM test
WHERE (text IS NULL)
+ + 35 + 33% (1/3) + + queryDifferentSingleLine + (source code not available) (source code not available) (source code not available) + + + + + + + + 1 run(s) + + + +
(run params not available)
+ SELECT *
FROM test
WHERE text = ?1? + + + + + + 1 - dead: 0 count: 1 + + category: S type: T subtype: FF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE + SELECT *
FROM test
WHERE NOT(text = ?1?) + + + + 2 - dead: 1 count: 1 + + category: S type: T subtype: TF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE + SELECT *
FROM test
WHERE (text = ?1?) + + + + 3 - dead: 0 count: 1 + + category: S type: N subtype: NF location: 1.w.1.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL + SELECT *
FROM test
WHERE (text IS NULL) + + + -
-
- - - - - -
queryEqualDifferentLine:44 -
33% (1/3) 2 run(s) -
SELECT *
FROM test
WHERE text = ?1? -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
122STFF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE
SELECT *
FROM test
WHERE NOT(text = ?1?)
202STTF1.w.1.[WHERE text = ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE
SELECT *
FROM test
WHERE (text = ?1?)
302SNNF1.w.1.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
SELECT *
FROM test
WHERE (text IS NULL)
+ + 41 + 33% (1/3) + + queryEqualDifferentLine + (source code not available) (source code not available) (source code not available) + + + + + + + + 2 run(s) + + + +
(run params not available)
+ SELECT *
FROM test
WHERE text = ?1? + + + + + + 1 - dead: 0 count: 2 + + category: S type: T subtype: FF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE + SELECT *
FROM test
WHERE NOT(text = ?1?) + + + + 2 - dead: 2 count: 2 + + category: S type: T subtype: TF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE + SELECT *
FROM test
WHERE (text = ?1?) + + + + 3 - dead: 0 count: 2 + + category: S type: N subtype: NF location: 1.w.1.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL + SELECT *
FROM test
WHERE (text IS NULL) + + + + + + 44 + 33% (1/3) + + queryEqualDifferentLine + (source code not available) (source code not available) (source code not available) + + + + + + + + 2 run(s) + + + +
(run params not available)
+ SELECT *
FROM test
WHERE text = ?1? + + + + + + 1 - dead: 2 count: 2 + + category: S type: T subtype: FF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?1? is FALSE + SELECT *
FROM test
WHERE NOT(text = ?1?) + + + + 2 - dead: 0 count: 2 + + category: S type: T subtype: TF location: 1.w.1.[WHERE text = ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) text = ?1? is TRUE + SELECT *
FROM test
WHERE (text = ?1?) + + + + 3 - dead: 0 count: 2 + + category: S type: N subtype: NF location: 1.w.1.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL + SELECT *
FROM test
WHERE (text IS NULL) + + + + + + 23 + 50% (1/2) + + queryNoParameters1Condition + (source code not available) (source code not available) (source code not available) + + + + + + + + 1 run(s) + + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num >= ?1? + + + + + + 1 - dead: 0 count: 1 + + category: S type: T subtype: FF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE + SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?) + + + + 2 - dead: 1 count: 1 + + category: S type: T subtype: TF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE + SELECT id , num , text
FROM test
WHERE (num >= ?1?) + + + + + + 26 + 50% (2/4) + + queryNoParameters2Condition + (source code not available) (source code not available) (source code not available) + + + + + + + + 3 run(s) + + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2? + + + + + + 1 - dead: 1 count: 3 + + category: S type: T subtype: TT location: 1.w.1.[num > ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE + SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?) + + + + 2 - dead: 0 count: 3 + + category: S type: T subtype: FT location: 1.w.1.[num > ?1?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE + SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?) + + + + 3 - dead: 2 count: 3 + + category: S type: T subtype: FT location: 1.w.2.[text = ?2?] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE + SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?) + + + + 4 - dead: 0 count: 3 + + category: S type: N subtype: NT location: 1.w.2.[text] +
(run params not available)
+ + + + + --Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE + SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?) + + + -
-
- - - - - -
queryNoParameters1Condition:23 -
50% (1/2) 1 run(s) -
SELECT id , num , text
FROM test
WHERE num >= ?1? -
-
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101STFF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?)
211STTF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (num >= ?1?)
-
-
- - - - -
queryNoParameters2Condition:26 -
50% (2/4) 3 run(s) -
SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2? -
-
- - - - - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
113STTT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?)
203STFT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?)
323STFT1.w.2.[text = ?2?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?)
403SNNT1.w.2.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?)
-
+ +
+Generated by: QACover java - [version 1.6.4-SNAPSHOT] - [Submit a problem report] +
- \ No newline at end of file diff --git a/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html b/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html index 0681e6d..78d7de5 100644 --- a/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html +++ b/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc2.html @@ -1,72 +1,207 @@ - + test4giis.qacoverapp.AppSimpleJdbc2 - - - - - - - + + + + + + + + - -
-

test4giis.qacoverapp.AppSimpleJdbc2

-
-
-
- - - - - -
queryNoParameters1Condition:14 -
50% (1/2) 3 run(s) -
SELECT id , num , text
FROM test
WHERE num >= ?1? -
+ +
+
+

[Index] test4giis.qacoverapp.AppSimpleJdbc2

+
+
+ + +
+
+ + +
+
+ + +
+
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
103STFF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?)
233STTF1.w.1.[WHERE num >= ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (num >= ?1?)
-
-
- - - - - +
+
queryNoParameters2Condition:17 -
75% (3/4) 1 run(s) -
SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2? -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LineCoverageSource code/method, queries and rules
1450% (1/2) + queryNoParameters1Condition + (source code not available) (source code not available) (source code not available) +
+ + 3 run(s) + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num >= ?1?
1 - dead: 0 count: 3 + category: S type: T subtype: FF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num >= ?1? is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num >= ?1?)
2 - dead: 3 count: 3 + category: S type: T subtype: TF location: 1.w.1.[WHERE num >= ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num >= ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (num >= ?1?)
1775% (3/4) + queryNoParameters2Condition + (source code not available) (source code not available) (source code not available) +
+ + 1 run(s) + + +
(run params not available)
+ SELECT id , num , text
FROM test
WHERE num > ?1? AND text = ?2?
1 - dead: 0 count: 1 + category: S type: T subtype: TT location: 1.w.1.[num > ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?)
2 - dead: 1 count: 1 + category: S type: T subtype: FT location: 1.w.1.[num > ?1?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?)
3 - dead: 1 count: 1 + category: S type: T subtype: FT location: 1.w.2.[text = ?2?] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?)
4 - dead: 1 count: 1 + category: S type: N subtype: NT location: 1.w.2.[text] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?)
-
- - - - - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101STTT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num > ?1? is TRUE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE (num > ?1?) AND (text = ?2?)
211STFT1.w.1.[num > ?1?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num > ?1? is FALSE
--(T) text = ?2? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(num > ?1?) AND (text = ?2?)
311STFT1.w.2.[text = ?2?]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) text = ?2? is FALSE
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE NOT(text = ?2?) AND (num > ?1?)
411SNNT1.w.2.[text]
--Some row in the table such that:
--The WHERE condition fulfills:
--(N) text is NULL
--(T) num > ?1? is TRUE
SELECT id , num , text
FROM test
WHERE (text IS NULL) AND (num > ?1?)
-
+ +
+Generated by: QACover java - [version 1.6.4-SNAPSHOT] - [Submit a problem report] +
- \ No newline at end of file diff --git a/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html b/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html index c5bdb49..439c633 100644 --- a/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html +++ b/qacover-core/src/test/resources/qacover-report/test4giis.qacoverapp.AppSimpleJdbc3Errors.html @@ -1,112 +1,292 @@ - + test4giis.qacoverapp.AppSimpleJdbc3Errors - - - - - - - + + + + + + + + - -
-

test4giis.qacoverapp.AppSimpleJdbc3Errors

-
-
-
- - - - - -
query0Errors:14 -
50% (1/2) 1 run(s) -
select id,num,text from test where num<9 -
+ +
+
+

[Index] test4giis.qacoverapp.AppSimpleJdbc3Errors

+
+
+ + +
+
+ + +
+
+ + +
+
-
- - - - - - - - -
IDdeadcountcategorytypesubtypelocation
111STFF1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num < 9 is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num < 9)
201STTF1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num < 9 is TRUE
SELECT id , num , text
FROM test
WHERE (num < 9)
-
-
- - - - - -
query1ErrorAtQuery:17 -
(0/0) 0 run(s) -
select id,num,text from test where num<10
Error at Get query table names: ApiException{code=0, responseHeaders=null, responseBody='null'} -
-
-
- - -
IDdeadcountcategorytypesubtypelocation
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
-
-
LineCoverageSource code/method, queries and rules
1450% (1/2) + query0Errors + (source code not available) (source code not available) (source code not available) +
+ + 1 run(s) + + +
(run params not available)
+ select id,num,text from test where num<9
1 - dead: 1 count: 1 + category: S type: T subtype: FF location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(F) num < 9 is FALSE
SELECT id , num , text
FROM test
WHERE NOT(num < 9)
2 - dead: 0 count: 1 + category: S type: T subtype: TF location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(T) num < 9 is TRUE
SELECT id , num , text
FROM test
WHERE (num < 9)
17 (0/0) + query1ErrorAtQuery + (source code not available) (source code not available) (source code not available) +
+ + 0 run(s) + + +
(run params not available)
+ select id,num,text from test where num<10 +
Query error: Error at Get query table names: ApiException{code=0, responseHeaders=null, responseBody='null'} +
200% (0/3) + query1ErrorAtRule + (source code not available) (source code not available) (source code not available) +
+ + 1 run(s) + + +
(run params not available)
+ select id,num,text from test where num < 11 +
1 rule(s) with error +
1 - dead: 0 count: 1 + category: S type: B subtype: B+F location: 1.w.1.[WHERE num < 11] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 12
selectar id,num,text from test where num < 9
Rule error: giis.qacover.portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near "selectar": syntax error)
2 - dead: 0 count: 1 + category: S type: B subtype: B=F location: 1.w.1.[WHERE num < 11] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 11
SELECT id , num , text
FROM test
WHERE (num = 11)
3 - dead: 0 count: 1 + category: S type: B subtype: B-F location: 1.w.1.[WHERE num < 11] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 10
SELECT id , num , text
FROM test
WHERE (num = 10)
230% (0/3) + queryMultipleErrors + (source code not available) (source code not available) (source code not available) +
+ + 3 run(s) + + +
(run params not available)
+ select id,num,text from test where num<9 +
1 rule(s) with error +
1 - dead: 0 count: 3 + category: S type: B subtype: B+F location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 10
select id,num,text from notable where num < 9
Rule error: giis.qacover.portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near "selectar": syntax error) +
giis.qacover.portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (no such table: notable)
2 - dead: 0 count: 3 + category: S type: B subtype: B=F location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 9
SELECT id , num , text
FROM test
WHERE (num = 9)
3 - dead: 0 count: 3 + category: S type: B subtype: B-F location: 1.w.1.[WHERE num < 9] +
(run params not available)
+
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 8
SELECT id , num , text
FROM test
WHERE (num = 8)
- - - - -
query1ErrorAtRule:20 -
0% (0/3) 1 run(s) 1 rule(s) with error -
select id,num,text from test where num < 11 -
-
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
101SBB+F1.w.1.[WHERE num < 11]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 12
selectar id,num,text from test where num < 9
giis.qacover.portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near "selectar": syntax error)
201SBB=F1.w.1.[WHERE num < 11]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 11
SELECT id , num , text
FROM test
WHERE (num = 11)
301SBB-F1.w.1.[WHERE num < 11]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 10
SELECT id , num , text
FROM test
WHERE (num = 10)
-
-
- - - - -
queryMultipleErrors:23 -
0% (0/3) 3 run(s) 1 rule(s) with error -
select id,num,text from test where num<9 -
-
- - - - - - - - - - - -
IDdeadcountcategorytypesubtypelocation
103SBB+F1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B+) num = 10
select id,num,text from notable where num < 9
giis.qacover.portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near "selectar": syntax error)
giis.qacover.portable.QaCoverException: SpyStatementAdapter.hasRows. Caused by: org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (no such table: notable)
203SBB=F1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B=) num = 9
SELECT id , num , text
FROM test
WHERE (num = 9)
303SBB-F1.w.1.[WHERE num < 9]
--Some row in the table such that:
--The WHERE condition fulfills:
--(B-) num = 8
SELECT id , num , text
FROM test
WHERE (num = 8)
-
+ +
+Generated by: QACover java - [version 1.6.4-SNAPSHOT] - [Submit a problem report] +
- \ No newline at end of file diff --git a/qacover-model/src/main/java/giis/qacover/report/BaseHtmlWriter.java b/qacover-model/src/main/java/giis/qacover/report/BaseHtmlWriter.java new file mode 100644 index 0000000..99d4132 --- /dev/null +++ b/qacover-model/src/main/java/giis/qacover/report/BaseHtmlWriter.java @@ -0,0 +1,50 @@ +package giis.qacover.report; + +import giis.portable.xml.tiny.XNodeAbstract; +import giis.qacover.model.Variability; + +public abstract class BaseHtmlWriter { + + protected String getHeader(String title) { + return "\n" + + "\n" + + "\n" + + "" + title + "\n" + + getCommonHeaders() + + getStyles() + + getScripts() + + "\n\n"; + } + + protected String getCommonHeaders() { + return "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n"; + } + + protected abstract String getScripts(); + + protected abstract String getStyles(); + + protected String getFooter() { + Variability variab=new Variability(); + return "\n
" + + "\n" + + "Generated by: QACover " + variab.getPlatformName() + + " - [version " + variab.getVersion() + "]" + + " - [Submit a problem report]\n" + + "
\n"; + } + + protected String encode(String text) { + return XNodeAbstract.encodeText(text); + } + + public static String percent(int count, int dead) { + return count == 0 ? "" : String.valueOf((dead * 100) / count) + "%"; + } + +} diff --git a/qacover-model/src/main/java/giis/qacover/report/ClassHtmlWriter.java b/qacover-model/src/main/java/giis/qacover/report/ClassHtmlWriter.java index 2bb6e36..8aa9dc1 100644 --- a/qacover-model/src/main/java/giis/qacover/report/ClassHtmlWriter.java +++ b/qacover-model/src/main/java/giis/qacover/report/ClassHtmlWriter.java @@ -1,113 +1,193 @@ package giis.qacover.report; -import giis.portable.xml.tiny.XNodeAbstract; -import giis.qacover.model.QueryModel; import giis.qacover.model.RuleModel; +import giis.qacover.reader.QueryReader; -public class ClassHtmlWriter { - - private static final String HTML_NEWLINE = "
"; +public class ClassHtmlWriter extends BaseHtmlWriter { - public String getHeader(String className) { - return SharedHtmlWriter.getHtmlBegin(className, true) - + "\n

"+className+"

" - + "\n
"; + @Override + protected String getScripts() { + return "\n"; } - public String getQueryBody(QueryModel rules, String methodIdentifier, String queryId) { - StringBuilder sb = new StringBuilder(); - sb.append(getRuleHeader(rules, methodIdentifier, queryId)); - for (RuleModel rule : rules.getRules()) - sb.append(getRuleBody(rule)); - sb.append(getRuleFooter()); - return sb.toString(); + @Override + protected String getStyles() { + return "\n"; } - public String getFooter() { - return "\n
" + SharedHtmlWriter.getHtmlEnd(); + public String getBodyContent(String title, String content) { + return "\n" + + "
\n" + + "
\n" + + "

[Index] " + title + "

\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + "\n" + + "
\n" + + "\n" + + " \n" + + content + "\n" + + "
LineCoverageSource code/method, queries and rules
\n" + + "
\n" + + getFooter() + + "
\n" + + "\n"; } - - // Details of each rule - private String getRuleHeader(QueryModel rules, String methodIdentifier, String queryId) { - String sql=rules.getSql(); - return "\n\n
" - + "\n
" - + "\n" - + "\n" - + "\n" - + "\n" - + "\n" - + "\n
" + methodIdentifier + "" - + "\n
" + SharedHtmlWriter.percent(rules.getCount(),rules.getDead()) + " (" + rules.getDead()+"/" + rules.getCount() + ")" - + " " + rules.getQrun()+" run(s)" - + (rules.getError() > 0 ? " " + rules.getError()+" rule(s) with error" : "") - + "\n
" + getSqlToHtml(XNodeAbstract.encodeText(sql)) - + getErrorsHtml(rules) - + "\n
" - + "\n
" - + "\n
" - + "\n" - + "\n"; + public String getLineContent(QueryReader query) { + String template = " \n" + + " \n" + + " \n" + + " \n" + + " \n"; + return template + .replace("$lineNumber$", query.getKey().getClassLine()) + .replace("$deadCount$", String.valueOf(query.getModel().getDead())) + .replace("$runCount$", String.valueOf(query.getModel().getCount())) + .replace("$percentCoverage$", percent(query.getModel().getCount(), query.getModel().getDead())) + .replace("$methodName$", query.getKey().getMethodName()) + .replace("$sourceCode$", "(source code not available) (source code not available) (source code not available)"); } - public String getRuleBody(RuleModel rule) { - boolean covered = rule.getDead() != 0; - String template="\n" - + "\n" - + "\n"; - return template - .replace("$id", rule.getId()) - .replace("$count", String.valueOf(rule.getCount())) - .replace("$dead", String.valueOf(rule.getDead())) - .replace("$category", rule.getCategory()) - .replace("$subtype", rule.getSubtype()) - .replace("$type", rule.getMainType()) - .replace("$location", rule.getLocation()) - .replace("$description", XNodeAbstract.encodeText(rule.getDescription()).replace("\n",HTML_NEWLINE)) - .replace("$sql", getSqlToHtml(rule.getSql())) - .replace("$error", getErrorsHtml(rule)) - .replace("$style", covered ? bgcolor("palegreen") : bgcolor("lightyellow")); + public String getQueryContent(QueryReader query) { + String template=" \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n"; + return template.replace("$runCount$", String.valueOf(query.getModel().getQrun())) + .replace("$sqlQuery$", getSqlHtml(encode(query.getSql()))) + .replace("$errorsQuery$", getErrorsHtml(encode(query.getModel().getErrorString()), query.getModel().getError())); } - private String getErrorsHtml(QueryModel rule) { - String errors = rule.getErrorString().replace("\n", HTML_NEWLINE); - if (!"".equals(errors)) - return "
" + errors + ""; - return ""; //no error + public String getRulesContent(String rulesContent) { + return " \n" + + rulesContent + + " \n" // just to give a little separation after rules + + " \n\n"; } - private String getErrorsHtml(RuleModel rule) { - String errors = rule.getErrorString().replace("\n", HTML_NEWLINE); - if (!"".equals(errors)) - return "
" + errors + ""; - return ""; //no error + + public String getRuleContent(RuleModel rule) { + String template = " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + // needs a complete row to allow error message span across description and sql columns + + " $ruleErrors$"; + return template.replace("$ruleId$", rule.getId()) + .replace("$ruleDead$", String.valueOf(rule.getDead())) + .replace("$ruleCount$", String.valueOf(rule.getCount())) + .replace("$ruleCategory$", rule.getCategory()) + .replace("$ruleType$", rule.getMainType()) + .replace("$ruleSubtype$", rule.getSubtype()) + .replace("$ruleLocation$", encode(rule.getLocation())) + .replace("$ruleStatus$", rule.getDead() > 0 ? "covered" : "uncovered") + .replace("$ruleDescription$", getDescriptionHtml(encode(rule.getDescription()))) + .replace("$ruleSql$", getSqlHtml(encode(rule.getSql()))) + .replace("$ruleErrors$", getErrorsHtml(encode(rule.getErrorString()))) + ; } - private String getRuleFooter() { - return "\n
IDdeadcountcategorytypesubtypelocation
$lineNumber$$percentCoverage$ ($deadCount$/$runCount$)\n" + + " $methodName$\n" + + " $sourceCode$\n" + + "
$id$dead$count$category$type$subtype$location
" - + "
" - + "
$description
" - + "
$sql$error
" - + "
" - + "
\n" + + " \n" + + " $runCount$ run(s)\n" + + " \n" + + " \n" + + "
(run params not available)
\n" + + " $sqlQuery$ $errorsQuery$" + + "
$ruleId$ - dead: $ruleDead$ count: $ruleCount$\n" + + " category: $ruleCategory$ type: $ruleType$ subtype: $ruleSubtype$ location: $ruleLocation$\n" + + "
(run params not available)
\n" + + "
$ruleDescription$$ruleSql$
"; //NOSONAR + + private String getErrorsHtml(String queryErrors, int ruleErrorCount) { + if (!"".equals(queryErrors)) // error in query execution + return "\n
Query error: " + queryErrors + "\n"; + if (ruleErrorCount > 0) // error in any rule(s) + return "\n
" + ruleErrorCount + " rule(s) with error\n"; + return ""; // no error } - private String bgcolor(String color) { - return " style=\"background:"+color+";\""; + + private String getErrorsHtml(String errors) { + if (!"".equals(errors)) + return "" + + "Rule error: " + errors.replace("\n", "\n
") + "
\n"; + return ""; // no error } - /** - * A simple formating of SQL to display in html - */ - private String getSqlToHtml(String sql) { - sql = sql.replace("SELECT ", "SELECT "); - sql = sql.replace("FROM ", "
FROM "); - sql = sql.replace("LEFT JOIN ", "
LEFT JOIN "); - sql = sql.replace("RIGHT JOIN ", "
RIGHT JOIN "); - sql = sql.replace("INNER JOIN ", "
INNER JOIN "); - sql = sql.replace("WHERE ", "
WHERE "); - sql = sql.replace("GROUP BY ", "
GROUP BY "); - sql = sql.replace("HAVING ", "
HAVING "); - sql = sql.replace("ORDER BY ", "
ORDER BY "); + private String getSqlHtml(String sql) { + String br = "
"; + sql = sql.replace("SELECT ", "SELECT ") + .replace("FROM ", br + "FROM ") + .replace("LEFT JOIN ", br + "LEFT JOIN ") + .replace("RIGHT JOIN ", br + "RIGHT JOIN ") + .replace("INNER JOIN ", br + "INNER JOIN ") + .replace("WHERE ", br + "WHERE ") + .replace("GROUP BY ", br + "GROUP BY ") + .replace("HAVING ", br + "HAVING ") + .replace("ORDER BY ", br + "ORDER BY ") + .replace("UNION ", br + "UNION "); return sql; } + private String getDescriptionHtml(String desc) { + return desc.replace("\n", "
"); + } + } diff --git a/qacover-model/src/main/java/giis/qacover/report/IndextHtmlWriter.java b/qacover-model/src/main/java/giis/qacover/report/IndextHtmlWriter.java index d5d3b91..62d5450 100644 --- a/qacover-model/src/main/java/giis/qacover/report/IndextHtmlWriter.java +++ b/qacover-model/src/main/java/giis/qacover/report/IndextHtmlWriter.java @@ -1,33 +1,53 @@ package giis.qacover.report; -public class IndextHtmlWriter { +public class IndextHtmlWriter extends BaseHtmlWriter { - public String getHeader() { - return SharedHtmlWriter.getHtmlBegin("SQL Query Fpc Coverage", false) - + "\n

SQL Query Fpc Coverage

" - + "\n" - + "\n"; + @Override + protected String getScripts() { + return ""; } - public String getBody(String className, int qrun, int qcount, int qerror, int count, int dead, int error) { - String template="\n\n" - + "\n" - + "\n" - + "\n"; + @Override + protected String getStyles() { + return "\n"; + } + + public String getBodyContent(String title, String content) { + return "\n" + + "
\n" + + "

" + title + "

\n" + + "
Class%qrunqcountqerrordeadcounterror
$classLink$percent
" - + "\n
" - + "\n
$qrun$qcount$qerror$dead$count$error
\n" + + " \n" + + content + + "
Class%qrunqcountqerrordeadcounterror
\n" + + getFooter() + + "
\n" + + "\n"; + } + + public String getBodyRow(String className, int qrun, int qcount, int qerror, int count, int dead, int error) { + String template=" \n" + + " $classLink\n" + + " $percent\n" + + "
\n" + + "
\n" + + "
\n" + + " $qrun$qcount$qerror$dead$count$error\n" + + " \n"; return template .replace("$classLink", "TOTAL".equals(className) ? className : "" + className + "") - .replace("$percent", SharedHtmlWriter.percent(count,dead)) - .replace("$progbarvalue", SharedHtmlWriter.percent(count,dead).replace("%", "")) + .replace("$percent", percent(count,dead)) + .replace("$progbarvalue", percent(count,dead).replace("%", "")) .replace("$qrun", String.valueOf(qrun)) .replace("$qcount", String.valueOf(qcount)) - .replace("$qerror", qerror>0 ? "" + qerror + "" : String.valueOf(qerror)) + .replace("$qerror", qerror > 0 ? "" + qerror + "" : String.valueOf(qerror)) .replace("$count", String.valueOf(count)) .replace("$dead", String.valueOf(dead)) .replace("$error", error>0 ? "" + error + "" : String.valueOf(error)); } - public String getFooter() { - return "\n" + SharedHtmlWriter.getHtmlFooter() + SharedHtmlWriter.getHtmlEnd(); - } + } diff --git a/qacover-model/src/main/java/giis/qacover/report/ReportManager.java b/qacover-model/src/main/java/giis/qacover/report/ReportManager.java index 218a221..4317991 100644 --- a/qacover-model/src/main/java/giis/qacover/report/ReportManager.java +++ b/qacover-model/src/main/java/giis/qacover/report/ReportManager.java @@ -1,12 +1,12 @@ package giis.qacover.report; import giis.portable.util.FileUtil; -import giis.qacover.model.QueryModel; import giis.qacover.model.Variability; import giis.qacover.reader.CoverageCollection; import giis.qacover.reader.CoverageReader; import giis.qacover.reader.CoverageSummary; import giis.qacover.reader.QueryCollection; +import giis.qacover.reader.QueryReader; /** * Main class to generate html reports with all details of the coverage. @@ -23,44 +23,54 @@ public void run(String rulesFolder, String reportFolder) { FileUtil.createDirectory(reportFolder); // Report index - IndextHtmlWriter ihw = new IndextHtmlWriter(); - StringBuilder isb = new StringBuilder(); - isb.append(ihw.getHeader()); + IndextHtmlWriter indexWriter = new IndextHtmlWriter(); // Using a CoverageReader to access the store by class and then by query CoverageCollection classes = new CoverageReader(rulesFolder).getByClass(); - StringBuilder ibodysb = new StringBuilder(); + StringBuilder indexRowsSb = new StringBuilder(); for (int i = 0; i < classes.size(); i++) { QueryCollection query = classes.get(i); + // a line of the index report String className = query.getName(); CoverageSummary summary = query.getSummary(); consoleWrite("Report for class: " + className + " " + summary.toString()); - ibodysb.append(ihw.getBody(className, summary.getQrun(), summary.getQcount(), summary.getQerror(), + indexRowsSb.append(indexWriter.getBodyRow(className, + summary.getQrun(), summary.getQcount(), summary.getQerror(), summary.getCount(), summary.getDead(), summary.getError())); // Generates a file for this class - ClassHtmlWriter writer = new ClassHtmlWriter(); - StringBuilder qsb = new StringBuilder(); - qsb.append(writer.getHeader(className)); - // Includes each query - for (int j = 0; j < query.size(); j++) { - String methodIdentifier = query.get(j).getKey().getMethodName(true); - QueryModel rules = query.get(j).getModel(); - qsb.append(writer.getQueryBody(rules, methodIdentifier, "query" + j)); - } - qsb.append(writer.getFooter()); - FileUtil.fileWrite(reportFolder, className + ".html", qsb.toString()); + ClassHtmlWriter classWriter = new ClassHtmlWriter(); + String htmlCoverage = getClassCoverage(query, classWriter); + String htmlCoverageContent = classWriter.getHeader(className) + + classWriter.getBodyContent(className, htmlCoverage); + FileUtil.fileWrite(reportFolder, className + ".html", htmlCoverageContent); } // Puts everything, with totals as first line CoverageSummary totals = classes.getSummary(); - isb.append(ihw.getBody("TOTAL", totals.getQrun(), totals.getQcount(), totals.getQerror(), totals.getCount(), - totals.getDead(), totals.getError())); - isb.append(ibodysb.toString()); - isb.append(ihw.getFooter()); - FileUtil.fileWrite(reportFolder, "index.html", isb.toString()); + String indexRowsHeader = indexWriter.getBodyRow("TOTAL", totals.getQrun(), totals.getQcount(), totals.getQerror(), totals.getCount(), + totals.getDead(), totals.getError()); + String indexContent = indexWriter.getHeader("SQL Query Fpc Coverage") + + indexWriter.getBodyContent("SQL Query Fpc Coverage", indexRowsHeader + indexRowsSb.toString()); + //htmlClasses += indexWriter.getFooter(); + FileUtil.fileWrite(reportFolder, "index.html", indexContent); consoleWrite(classes.size() + " classes generated, see index.html at reports folder"); } + + private String getClassCoverage(QueryCollection query, ClassHtmlWriter writer) { + StringBuilder csb=new StringBuilder(); + for (int j = 0; j < query.size(); j++) { + QueryReader thisQuery=query.get(j); + csb.append(writer.getLineContent(thisQuery)) + .append(writer.getQueryContent(query.get(j))); + + StringBuilder rsb=new StringBuilder(); + for (int k=0; k" + - "\n" + - "\n" + - "\n"; - return "" - + "\n" - + "\n" - + "\n" + title + "" - + "\n" - + "\n" - + bootstrap - + "\n" - + "\n" - + "\n" - + "\n
"; - } - - public static String getHtmlFooter() { - Variability variab=new Variability(); - return "\n
" - + "" - + "Generated by: QACover " + variab.getPlatformName() - + " - [version " + variab.getVersion() + "]" - + " - [Submit a problem report]" - + "" - + "
"; - } - - public static String getHtmlEnd() { - return "\n
" + - "\n" + - "\n"; - } - - public static String percent(int count, int dead) { - return count==0 ? "" : String.valueOf((dead*100)/count)+"%"; - } - -}