mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 06:39:13 +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:
|
for facet in self.requirements:
|
||||||
facet.status = False
|
facet.status = False
|
||||||
elif self.maxOccurs == 0: # Prohibited specification
|
elif self.maxOccurs == 0: # Prohibited specification
|
||||||
if self.applicable_entities and not self.requirements:
|
if self.applicable_entities:
|
||||||
self.status = False
|
self.status = False
|
||||||
|
|
||||||
def get_usage(self) -> Cardinality:
|
def get_usage(self) -> Cardinality:
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ class ResultsSpecification(TypedDict):
|
|||||||
total_checks_pass: int
|
total_checks_pass: int
|
||||||
total_checks_fail: int
|
total_checks_fail: int
|
||||||
percent_checks_pass: ResultsPercent
|
percent_checks_pass: ResultsPercent
|
||||||
required: bool
|
cardinality: str
|
||||||
applicability: list[str]
|
applicability: list[str]
|
||||||
requirements: list[ResultsRequirement]
|
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"
|
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(
|
return ResultsSpecification(
|
||||||
name=specification.name,
|
name=specification.name,
|
||||||
description=specification.description,
|
description=specification.description,
|
||||||
@@ -370,7 +377,7 @@ class Json(Reporter):
|
|||||||
total_checks_pass=total_checks_pass,
|
total_checks_pass=total_checks_pass,
|
||||||
total_checks_fail=total_checks - total_checks_pass,
|
total_checks_fail=total_checks - total_checks_pass,
|
||||||
percent_checks_pass=percent_checks_pass,
|
percent_checks_pass=percent_checks_pass,
|
||||||
required=specification.minOccurs != 0,
|
cardinality=cardinality,
|
||||||
applicability=applicability,
|
applicability=applicability,
|
||||||
requirements=requirements,
|
requirements=requirements,
|
||||||
)
|
)
|
||||||
@@ -435,6 +442,12 @@ class Html(Json):
|
|||||||
def report(self) -> None:
|
def report(self) -> None:
|
||||||
super().report()
|
super().report()
|
||||||
for spec in self.results["specifications"]:
|
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"]:
|
for requirement in spec["requirements"]:
|
||||||
total_passed_entities = len(requirement["passed_entities"])
|
total_passed_entities = len(requirement["passed_entities"])
|
||||||
total_failed_entities = len(requirement["failed_entities"])
|
total_failed_entities = len(requirement["failed_entities"])
|
||||||
|
|||||||
@@ -107,16 +107,26 @@
|
|||||||
{{/instructions}}
|
{{/instructions}}
|
||||||
|
|
||||||
<div class="container">
|
<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>
|
</div>
|
||||||
<p>
|
<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">
|
<span class="item">
|
||||||
Checks passed: <strong>{{total_checks_pass}}</strong> / <strong>{{total_checks}}</strong>
|
Checks passed: <strong>{{total_checks_pass}}</strong> / <strong>{{total_checks}}</strong>
|
||||||
</span>
|
</span>
|
||||||
<span class="item">
|
<span class="item">
|
||||||
Elements passed: <strong>{{total_applicable_pass}}</strong> / <strong>{{total_applicable}}</strong>
|
Elements passed: <strong>{{total_applicable_pass}}</strong> / <strong>{{total_applicable}}</strong>
|
||||||
</span>
|
</span>
|
||||||
|
{{/is_prohibited}}
|
||||||
</p>
|
</p>
|
||||||
{{^is_ifc_version}}
|
{{^is_ifc_version}}
|
||||||
<p>
|
<p>
|
||||||
@@ -135,9 +145,11 @@
|
|||||||
<li>{{.}}</li>
|
<li>{{.}}</li>
|
||||||
{{/applicability}}
|
{{/applicability}}
|
||||||
</ul>
|
</ul>
|
||||||
|
{{#has_requirements}}
|
||||||
<p>
|
<p>
|
||||||
<strong>Requirements</strong>
|
<strong>Requirements</strong>
|
||||||
</p>
|
</p>
|
||||||
|
{{/has_requirements}}
|
||||||
<ol>
|
<ol>
|
||||||
{{#requirements}}
|
{{#requirements}}
|
||||||
<li class="{{^total_checks}}skipped{{/total_checks}}{{#total_checks}}{{#status}}pass{{/status}}{{^status}}fail{{/status}}{{/total_checks}}">
|
<li class="{{^total_checks}}skipped{{/total_checks}}{{#total_checks}}{{#status}}pass{{/status}}{{^status}}fail{{/status}}{{/total_checks}}">
|
||||||
|
|||||||
Reference in New Issue
Block a user