mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-06 07:51:47 +00:00
Fix #6914. Bug where HTML IDS report did not visually indicate prohibited results correctly.
This commit is contained in:
@@ -328,7 +328,7 @@ class Specification:
|
||||
for facet in self.requirements:
|
||||
facet.status = False
|
||||
elif self.maxOccurs == 0: # Prohibited specification
|
||||
if self.applicable_entities and not self.requirements:
|
||||
if self.applicable_entities:
|
||||
self.status = False
|
||||
|
||||
def get_usage(self) -> Cardinality:
|
||||
|
||||
@@ -86,7 +86,7 @@ class ResultsSpecification(TypedDict):
|
||||
total_checks_pass: int
|
||||
total_checks_fail: int
|
||||
percent_checks_pass: ResultsPercent
|
||||
required: bool
|
||||
cardinality: str
|
||||
applicability: list[str]
|
||||
requirements: list[ResultsRequirement]
|
||||
|
||||
@@ -356,6 +356,13 @@ class Json(Reporter):
|
||||
)
|
||||
percent_checks_pass = math.floor((total_checks_pass / total_checks) * 100) if total_checks else "N/A"
|
||||
|
||||
if specification.minOccurs == 1 and specification.maxOccurs == "unbounded":
|
||||
cardinality = "required"
|
||||
elif specification.minOccurs == 0 and specification.maxOccurs == "unbounded":
|
||||
cardinality = "optional"
|
||||
elif specification.minOccurs == 0 and specification.maxOccurs == 0:
|
||||
cardinality = "prohibited"
|
||||
|
||||
return ResultsSpecification(
|
||||
name=specification.name,
|
||||
description=specification.description,
|
||||
@@ -370,7 +377,7 @@ class Json(Reporter):
|
||||
total_checks_pass=total_checks_pass,
|
||||
total_checks_fail=total_checks - total_checks_pass,
|
||||
percent_checks_pass=percent_checks_pass,
|
||||
required=specification.minOccurs != 0,
|
||||
cardinality=cardinality,
|
||||
applicability=applicability,
|
||||
requirements=requirements,
|
||||
)
|
||||
@@ -435,6 +442,12 @@ class Html(Json):
|
||||
def report(self) -> None:
|
||||
super().report()
|
||||
for spec in self.results["specifications"]:
|
||||
print('checking', spec["cardinality"])
|
||||
if spec["cardinality"] == "optional" and spec["total_checks"] == 0:
|
||||
spec["is_skipped"] = True
|
||||
spec["is_prohibited"] = spec["cardinality"] == "prohibited"
|
||||
spec["cardinality"] = spec["cardinality"].capitalize()
|
||||
spec["has_requirements"] = bool(spec["requirements"])
|
||||
for requirement in spec["requirements"]:
|
||||
total_passed_entities = len(requirement["passed_entities"])
|
||||
total_failed_entities = len(requirement["failed_entities"])
|
||||
|
||||
@@ -107,16 +107,26 @@
|
||||
{{/instructions}}
|
||||
|
||||
<div class="container">
|
||||
<div class="{{^total_checks}}skipped{{/total_checks}}{{#total_checks}}{{#status}}pass{{/status}}{{^status}}fail{{/status}}{{/total_checks}} percent" style="width: {{^total_checks}}100{{/total_checks}}{{#total_checks}}{{percent_checks_pass}}{{/total_checks}}%;">{{^total_checks}}Skipped{{/total_checks}}{{#total_checks}}{{percent_checks_pass}}%{{/total_checks}}</div>
|
||||
<div class="
|
||||
{{#is_skipped}}skipped{{/is_skipped}}
|
||||
{{^is_skipped}}{{#status}}pass{{/status}}{{^status}}fail{{/status}}{{/is_skipped}}
|
||||
percent" style="width: {{^total_checks}}100{{/total_checks}}{{#total_checks}}{{percent_checks_pass}}{{/total_checks}}%;">{{#is_skipped}}Skipped{{/is_skipped}}{{^is_skipped}}{{percent_checks_pass}}%{{/is_skipped}}</div>
|
||||
</div>
|
||||
<p>
|
||||
<span class="item {{^total_checks}}skipped{{/total_checks}}{{#total_checks}}{{#status}}pass{{/status}}{{^status}}fail{{/status}}{{/total_checks}}">{{^total_checks}}Skipped{{/total_checks}}{{#total_checks}}{{#status}}Pass{{/status}}{{^status}}Fail{{/status}}{{/total_checks}}</span>
|
||||
<span class="item {{#is_skipped}}skipped{{/is_skipped}}{{^is_skipped}}{{#status}}pass{{/status}}{{^status}}fail{{/status}}{{/is_skipped}}">{{#is_skipped}}Optional: Skipped{{/is_skipped}}{{^is_skipped}}{{#status}}{{cardinality}}: Pass{{/status}}{{^status}}{{cardinality}}: Fail{{/status}}{{/is_skipped}}</span>
|
||||
{{#is_prohibited}}
|
||||
<span class="item">
|
||||
Elements matched: <strong>{{total_applicable}}</strong>
|
||||
</span>
|
||||
{{/is_prohibited}}
|
||||
{{^is_prohibited}}
|
||||
<span class="item">
|
||||
Checks passed: <strong>{{total_checks_pass}}</strong> / <strong>{{total_checks}}</strong>
|
||||
</span>
|
||||
<span class="item">
|
||||
Elements passed: <strong>{{total_applicable_pass}}</strong> / <strong>{{total_applicable}}</strong>
|
||||
</span>
|
||||
{{/is_prohibited}}
|
||||
</p>
|
||||
{{^is_ifc_version}}
|
||||
<p>
|
||||
@@ -135,9 +145,11 @@
|
||||
<li>{{.}}</li>
|
||||
{{/applicability}}
|
||||
</ul>
|
||||
{{#has_requirements}}
|
||||
<p>
|
||||
<strong>Requirements</strong>
|
||||
</p>
|
||||
{{/has_requirements}}
|
||||
<ol>
|
||||
{{#requirements}}
|
||||
<li class="{{^total_checks}}skipped{{/total_checks}}{{#total_checks}}{{#status}}pass{{/status}}{{^status}}fail{{/status}}{{/total_checks}}">
|
||||
|
||||
Reference in New Issue
Block a user