diff --git a/Documentation/testcases/classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids b/Documentation/testcases/classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids new file mode 100644 index 0000000..19f277d --- /dev/null +++ b/Documentation/testcases/classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids @@ -0,0 +1,28 @@ + + + + A prohibited classification reference returns the opposite of a required facet + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + 1 + + + Foobar + + + + + + \ No newline at end of file diff --git a/Documentation/testcases/classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ifc b/Documentation/testcases/classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ifc new file mode 100644 index 0000000..d48d7fc --- /dev/null +++ b/Documentation/testcases/classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/testcases/classification/fail-a_required_classification_system_fails_if_no_match.ids b/Documentation/testcases/classification/fail-a_required_classification_system_fails_if_no_match.ids new file mode 100644 index 0000000..54fc6e6 --- /dev/null +++ b/Documentation/testcases/classification/fail-a_required_classification_system_fails_if_no_match.ids @@ -0,0 +1,25 @@ + + + + A required classification system fails if no match + Generated via code automation in the Ids Repository on github. + + + + + + + IFCSLAB + + + + + + + Foobar1 + + + + + + \ No newline at end of file diff --git a/Documentation/testcases/classification/fail-a_required_classification_system_fails_if_no_match.ifc b/Documentation/testcases/classification/fail-a_required_classification_system_fails_if_no_match.ifc new file mode 100644 index 0000000..d48d7fc --- /dev/null +++ b/Documentation/testcases/classification/fail-a_required_classification_system_fails_if_no_match.ifc @@ -0,0 +1,25 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:42',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('1hqIFTRjfV6AWq_bMtnZwI',$,$,$,$,$,$,$,$); +#2=IFCCLASSIFICATION($,$,$,'Foobar',$,$,$); +#3=IFCRELASSOCIATESCLASSIFICATION('05rScmOVzMoQXOfbYdtLYj',$,$,$,(#1),#2); +#4=IFCWALL('3Agm079vPIYBL4JExVrhD5',$,$,$,$,$,$,$,$); +#5=IFCSLAB('0BbkGoC6vPvRW13UT7D8zH',$,$,$,$,$,$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,$,$); +#7=IFCRELASSOCIATESCLASSIFICATION('2nJrDaLQfJ1QPhdJR0o97J',$,$,$,(#5),#6); +#8=IFCCOLUMN('16MocU_IDOF8_x3Iqllz0d',$,$,$,$,$,$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'11',$,#2,$,$); +#10=IFCRELASSOCIATESCLASSIFICATION('0WTUhjMwvT39YBFH2pryoM',$,$,$,(#8),#9); +#11=IFCBEAM('1n81bO_6nGjgypJwWUVavJ',$,$,$,$,$,$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'22',$,#13,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,$,$); +#15=IFCRELASSOCIATESCLASSIFICATION('2jG7cjHsrIUfgKVktNgbzi',$,$,$,(#11),#12); +#16=IFCMATERIAL('Material',$,$); +#17=IFCEXTERNALREFERENCERELATIONSHIP($,$,#6,(#16)); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/testcases/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids b/Documentation/testcases/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids new file mode 100644 index 0000000..e3cff78 --- /dev/null +++ b/Documentation/testcases/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids @@ -0,0 +1,18 @@ + + + + Prohibited specifications fails if the applicability matches + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWALL + + + + + + \ No newline at end of file diff --git a/Documentation/testcases/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ifc b/Documentation/testcases/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ifc new file mode 100644 index 0000000..db0af70 --- /dev/null +++ b/Documentation/testcases/ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/testcases/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids b/Documentation/testcases/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids new file mode 100644 index 0000000..6865a7a --- /dev/null +++ b/Documentation/testcases/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids @@ -0,0 +1,18 @@ + + + + Prohibited specifications passes if the applicability does not matches + Generated via code automation in the Ids Repository on github. + + + + + + + IFCWINDOW + + + + + + \ No newline at end of file diff --git a/Documentation/testcases/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ifc b/Documentation/testcases/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ifc new file mode 100644 index 0000000..db0af70 --- /dev/null +++ b/Documentation/testcases/ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ifc @@ -0,0 +1,10 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-10-07T13:48:44',(),(),'IfcOpenShell v0.7.0-dc67287d','IfcOpenShell v0.7.0-dc67287d',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCWALL('1hqIFTRjfV6AWq_bMtnZwI',$,'Waldo',$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/Documentation/testcases/scripts.md b/Documentation/testcases/scripts.md index 8384358..db1c744 100644 --- a/Documentation/testcases/scripts.md +++ b/Documentation/testcases/scripts.md @@ -612,6 +612,15 @@ Requirements: Classification: Prohibited,Pattern(''\w+'') ``` +### A prohibited classification reference returns the opposite of a required facet + +``` ids classification/fail-a_prohibited_classification_reference_returns_the_opposite_of_a_required_facet.ids +A prohibited classification reference returns the opposite of a required facet +Entity: ''IFCSLAB'' +Requirements: +Classification: Prohibited,''Foobar'',''1'' +``` + ### A required facet checks all parameters as normal ``` ids classification/pass-a_required_facet_checks_all_parameters_as_normal.ids @@ -621,6 +630,15 @@ Requirements: Classification: Pattern(''\w+'') ``` +### A required classification system fails if no match + +``` ids classification/fail-a_required_classification_system_fails_if_no_match.ids +A required classification system fails if no match +Entity: ''IFCSLAB'' +Requirements: +Classification: ''Foobar1'' +``` + ### An optional classification value passes if specified ``` ids classification/pass-an_optional_classification_value_passes_if_specified.ids @@ -1127,6 +1145,24 @@ Requirements: Attribute: ''Name'',''Waldo'' ``` +### Prohibited specifications fails if the applicability matches + +``` ids ids/fail-prohibited_specifications_fails_if_the_applicability_matches.ids +Prohibited specifications fails if the applicability matches +Prohibited +IFC2X3 +Entity: ''IFCWALL'' +``` + +### Prohibited specifications passes if the applicability does not matches + +``` ids ids/pass-prohibited_specifications_passes_if_the_applicability_does_not_matches.ids +Prohibited specifications passes if the applicability does not matches +Prohibited +IFC2X3 +Entity: ''IFCWINDOW'' +``` + ### Required specifications need at least one applicable entity (1/2) ``` ids ids/pass-required_specifications_need_at_least_one_applicable_entity_1_2.ids diff --git a/SchemaProject/DocAutomation/IdsScript.cs b/SchemaProject/DocAutomation/IdsScript.cs index ddbc460..7634728 100644 --- a/SchemaProject/DocAutomation/IdsScript.cs +++ b/SchemaProject/DocAutomation/IdsScript.cs @@ -559,7 +559,7 @@ internal void WriteTo(TextWriter writer) { writer.WriteLine(item); } - if (RequirementFacetStrings != null) + if (RequirementFacetStrings != null && RequirementFacetStrings.Any()) { writer.WriteLine("Requirements:"); foreach (var item in RequirementFacetStrings) diff --git a/SchemaProject/program.cs b/SchemaProject/program.cs index 3f9428a..e7f21be 100644 --- a/SchemaProject/program.cs +++ b/SchemaProject/program.cs @@ -124,8 +124,8 @@ private static void RegenIDS() var invalidFileName = item.FullName.Replace("fail-", "invalid-"); if (missingIfcFileNames.Contains(invalidFileName)) { + Console.WriteLine("Suitable matching invalid IFC is found, it has been renamed."); File.Move(item.FullName, invalidFileName); - // Console.WriteLine("A matching invalid IFC is required, should you rename this?"); } //else if (allIfcFound) //{