diff --git a/src/ifctester/ifctester/ids.py b/src/ifctester/ifctester/ids.py index 04ae4e7e95..7aecf040d3 100644 --- a/src/ifctester/ifctester/ids.py +++ b/src/ifctester/ifctester/ids.py @@ -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: diff --git a/src/ifctester/ifctester/reporter.py b/src/ifctester/ifctester/reporter.py index c1bbbb177f..754a32755f 100644 --- a/src/ifctester/ifctester/reporter.py +++ b/src/ifctester/ifctester/reporter.py @@ -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"]) diff --git a/src/ifctester/ifctester/templates/report.html b/src/ifctester/ifctester/templates/report.html index 71f89a3d08..a6e3157961 100644 --- a/src/ifctester/ifctester/templates/report.html +++ b/src/ifctester/ifctester/templates/report.html @@ -107,16 +107,26 @@ {{/instructions}}
-
{{^total_checks}}Skipped{{/total_checks}}{{#total_checks}}{{percent_checks_pass}}%{{/total_checks}}
+
{{#is_skipped}}Skipped{{/is_skipped}}{{^is_skipped}}{{percent_checks_pass}}%{{/is_skipped}}

- {{^total_checks}}Skipped{{/total_checks}}{{#total_checks}}{{#status}}Pass{{/status}}{{^status}}Fail{{/status}}{{/total_checks}} + {{#is_skipped}}Optional: Skipped{{/is_skipped}}{{^is_skipped}}{{#status}}{{cardinality}}: Pass{{/status}}{{^status}}{{cardinality}}: Fail{{/status}}{{/is_skipped}} + {{#is_prohibited}} + + Elements matched: {{total_applicable}} + + {{/is_prohibited}} + {{^is_prohibited}} Checks passed: {{total_checks_pass}} / {{total_checks}} Elements passed: {{total_applicable_pass}} / {{total_applicable}} + {{/is_prohibited}}

{{^is_ifc_version}}

@@ -135,9 +145,11 @@

  • {{.}}
  • {{/applicability}} + {{#has_requirements}}

    Requirements

    + {{/has_requirements}}
      {{#requirements}}