(self, specification: Specification)
| 293 | return self.results |
| 294 | |
| 295 | def report_specification(self, specification: Specification) -> ResultsSpecification: |
| 296 | applicability = [a.to_string("applicability") for a in specification.applicability] |
| 297 | total_applicable = len(specification.applicable_entities) |
| 298 | total_checks = 0 |
| 299 | total_checks_pass = 0 |
| 300 | requirements = [] |
| 301 | for requirement in specification.requirements: |
| 302 | total_fail = len(requirement.failures) |
| 303 | total_pass = total_applicable - total_fail |
| 304 | percent_pass = math.floor((total_pass / total_applicable) * 100) if total_applicable else "N/A" |
| 305 | total_checks += total_applicable |
| 306 | total_checks_pass += total_pass |
| 307 | facet_type = type(requirement).__name__ |
| 308 | value = "" |
| 309 | if facet_type == "Entity": |
| 310 | if requirement.predefinedType: |
| 311 | label = "IFC Class / Predefined Type" |
| 312 | value = f"{requirement.name}.{requirement.predefinedType}" |
| 313 | else: |
| 314 | label = "IFC Class" |
| 315 | value = requirement.name |
| 316 | elif facet_type == "Attribute": |
| 317 | label = requirement.name |
| 318 | if requirement.value: |
| 319 | value = requirement.value |
| 320 | elif facet_type == "Classification": |
| 321 | if requirement.system and requirement.value: |
| 322 | label = "System / Reference" |
| 323 | value = f"{requirement.system} / {requirement.value}" |
| 324 | elif requirement.system: |
| 325 | label = "System" |
| 326 | value = requirement.system |
| 327 | elif requirement.value: |
| 328 | label = "Reference" |
| 329 | value = requirement.value |
| 330 | elif facet_type == "PartOf": |
| 331 | label = requirement.relation |
| 332 | if requirement.predefinedType: |
| 333 | value = f"{requirement.name}.{requirement.predefinedType}" |
| 334 | else: |
| 335 | value = requirement.name |
| 336 | elif facet_type == "Property": |
| 337 | label = f"{requirement.propertySet}.{requirement.baseName}" |
| 338 | if requirement.value: |
| 339 | value = requirement.value |
| 340 | elif facet_type == "Material": |
| 341 | label = "Name / Category" |
| 342 | if requirement.value: |
| 343 | value = requirement.value |
| 344 | requirements.append( |
| 345 | ResultsRequirement( |
| 346 | facet_type=facet_type, |
| 347 | metadata=requirement.asdict("requirement"), |
| 348 | label=label, |
| 349 | value=value, |
| 350 | description=requirement.to_string("requirement", specification, requirement), |
| 351 | status=requirement.status, |
| 352 | passed_entities=self.report_passed_entities(requirement), |
no test coverage detected