From a133a552a92298d658f0cc6fc24db69691e1d60c Mon Sep 17 00:00:00 2001 From: TanaseMariusatstarion Date: Thu, 25 Jun 2026 17:28:18 +0200 Subject: [PATCH 1/3] implemented ConcernUsageExtensions and corresponding test --- .../ConcernUsageExtensionsTestFixture.cs | 42 +++++++++--- SysML2.NET/Extend/ConcernUsageExtensions.cs | 68 ++++++------------- 2 files changed, 54 insertions(+), 56 deletions(-) diff --git a/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs b/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs index a785b216..32a08b61 100644 --- a/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs +++ b/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs @@ -1,20 +1,20 @@ // ------------------------------------------------------------------------------------------------- // -// -// Copyright 2022-2026 Starion Group S.A. -// +// +// Copyright (C) 2022-2026 Starion Group S.A. +// // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// +// // // ------------------------------------------------------------------------------------------------ @@ -24,15 +24,41 @@ namespace SysML2.NET.Tests.Extend using NUnit.Framework; + using SysML2.NET.Core.POCO.Core.Features; using SysML2.NET.Core.POCO.Systems.Requirements; + using SysML2.NET.Extensions; [TestFixture] public class ConcernUsageExtensionsTestFixture { [Test] - public void ComputeConcernDefinition_ThrowsNotSupportedException() + public void VerifyComputeConcernDefinition() { - Assert.That(() => ((IConcernUsage)null).ComputeConcernDefinition(), Throws.TypeOf()); + // Null subject: + Assert.That(() => ((IConcernUsage)null).ComputeConcernDefinition(), Throws.TypeOf()); + + // Empty subject: no FeatureTyping relationships, so no ConcernDefinition: + var concernUsage = new ConcernUsage(); + Assert.That(concernUsage.ComputeConcernDefinition(), Is.Null); + + // Typed by FeatureTyping, but not an IConcernDefinition: + var requirementDefinition = new RequirementDefinition(); + var typingToRequirement = new FeatureTyping { Type = requirementDefinition }; + concernUsage.AssignOwnership(typingToRequirement); + Assert.That(concernUsage.ComputeConcernDefinition(), Is.Null); + + // Correct typing: FeatureTyping.Type is a ConcernDefinition: + var concernDefinition = new ConcernDefinition(); + var typingToConcern = new FeatureTyping { Type = concernDefinition }; + concernUsage.AssignOwnership(typingToConcern); + Assert.That(concernUsage.ComputeConcernDefinition(), Is.SameAs(concernDefinition)); + + // Multiple matching typings: FirstOrDefault is used so even breaking the multiplicity, it works; + // *not sure if this test step should be removed or not*: + var secondConcernDefinition = new ConcernDefinition(); + var typingToSecondConcern = new FeatureTyping { Type = secondConcernDefinition }; + concernUsage.AssignOwnership(typingToSecondConcern); + Assert.That(concernUsage.ComputeConcernDefinition(), Is.SameAs(concernDefinition)); } } } diff --git a/SysML2.NET/Extend/ConcernUsageExtensions.cs b/SysML2.NET/Extend/ConcernUsageExtensions.cs index 605d3977..8012a4b5 100644 --- a/SysML2.NET/Extend/ConcernUsageExtensions.cs +++ b/SysML2.NET/Extend/ConcernUsageExtensions.cs @@ -1,65 +1,33 @@ // ------------------------------------------------------------------------------------------------- // -// -// Copyright (C) 2022-2026 Starion Group S.A. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// +// +// Copyright (C) 2022-2026 Starion Group S.A. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// +// // // ------------------------------------------------------------------------------------------------ namespace SysML2.NET.Core.POCO.Systems.Requirements { using System; - using System.Collections.Generic; + using System.Linq; - using SysML2.NET.Core.Core.Types; - using SysML2.NET.Core.Root.Namespaces; - using SysML2.NET.Core.Systems.Occurrences; - using SysML2.NET.Core.POCO.Core.Classifiers; using SysML2.NET.Core.POCO.Core.Features; - using SysML2.NET.Core.POCO.Core.Types; - using SysML2.NET.Core.POCO.Kernel.Behaviors; - using SysML2.NET.Core.POCO.Kernel.Classes; - using SysML2.NET.Core.POCO.Kernel.Functions; - using SysML2.NET.Core.POCO.Root.Annotations; - using SysML2.NET.Core.POCO.Root.Elements; - using SysML2.NET.Core.POCO.Root.Namespaces; - using SysML2.NET.Core.POCO.Systems.Actions; - using SysML2.NET.Core.POCO.Systems.Allocations; - using SysML2.NET.Core.POCO.Systems.AnalysisCases; - using SysML2.NET.Core.POCO.Systems.Attributes; - using SysML2.NET.Core.POCO.Systems.Calculations; - using SysML2.NET.Core.POCO.Systems.Cases; - using SysML2.NET.Core.POCO.Systems.Connections; - using SysML2.NET.Core.POCO.Systems.Constraints; - using SysML2.NET.Core.POCO.Systems.DefinitionAndUsage; - using SysML2.NET.Core.POCO.Systems.Enumerations; - using SysML2.NET.Core.POCO.Systems.Flows; - using SysML2.NET.Core.POCO.Systems.Interfaces; - using SysML2.NET.Core.POCO.Systems.Items; - using SysML2.NET.Core.POCO.Systems.Metadata; - using SysML2.NET.Core.POCO.Systems.Occurrences; - using SysML2.NET.Core.POCO.Systems.Parts; - using SysML2.NET.Core.POCO.Systems.Ports; - using SysML2.NET.Core.POCO.Systems.States; - using SysML2.NET.Core.POCO.Systems.UseCases; - using SysML2.NET.Core.POCO.Systems.VerificationCases; - using SysML2.NET.Core.POCO.Systems.Views; /// - /// The class provides extensions methods for - /// the interface + /// The class provides extensions methods for + /// the interface /// internal static class ConcernUsageExtensions { @@ -67,16 +35,20 @@ internal static class ConcernUsageExtensions /// Computes the derived property. /// /// - /// The subject + /// The subject /// /// /// the computed result /// - [System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] internal static IConcernDefinition ComputeConcernDefinition(this IConcernUsage concernUsageSubject) { - throw new NotSupportedException("Create a GitHub issue when this method is required"); + return concernUsageSubject == null + ? throw new ArgumentNullException(nameof(concernUsageSubject)) + : concernUsageSubject.OwnedRelationship + .OfType() + .Select(featureTyping => featureTyping.Type) + .OfType() + .FirstOrDefault(); } - } } From 1dcbd763f14fd25b5c9b1f31ca0d5ed1d4b1f344 Mon Sep 17 00:00:00 2001 From: TanaseMariusatstarion Date: Sun, 28 Jun 2026 17:18:49 +0200 Subject: [PATCH 2/3] corrected multiplicity ConcernUsageExtensions --- SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs | 4 ++-- SysML2.NET/Extend/ConcernUsageExtensions.cs | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs b/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs index 32a08b61..a9dc5a35 100644 --- a/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs +++ b/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs @@ -27,6 +27,7 @@ namespace SysML2.NET.Tests.Extend using SysML2.NET.Core.POCO.Core.Features; using SysML2.NET.Core.POCO.Systems.Requirements; using SysML2.NET.Extensions; + using SysML2.NET.Exceptions; [TestFixture] public class ConcernUsageExtensionsTestFixture @@ -54,11 +55,10 @@ public void VerifyComputeConcernDefinition() Assert.That(concernUsage.ComputeConcernDefinition(), Is.SameAs(concernDefinition)); // Multiple matching typings: FirstOrDefault is used so even breaking the multiplicity, it works; - // *not sure if this test step should be removed or not*: var secondConcernDefinition = new ConcernDefinition(); var typingToSecondConcern = new FeatureTyping { Type = secondConcernDefinition }; concernUsage.AssignOwnership(typingToSecondConcern); - Assert.That(concernUsage.ComputeConcernDefinition(), Is.SameAs(concernDefinition)); + Assert.That(() => concernUsage.ComputeConcernDefinition(), Throws.TypeOf()); } } } diff --git a/SysML2.NET/Extend/ConcernUsageExtensions.cs b/SysML2.NET/Extend/ConcernUsageExtensions.cs index 8012a4b5..0e0b0fca 100644 --- a/SysML2.NET/Extend/ConcernUsageExtensions.cs +++ b/SysML2.NET/Extend/ConcernUsageExtensions.cs @@ -22,8 +22,9 @@ namespace SysML2.NET.Core.POCO.Systems.Requirements { using System; using System.Linq; - + using SysML2.NET.Core.POCO.Core.Features; + using SysML2.NET.Extensions; /// /// The class provides extensions methods for @@ -48,7 +49,7 @@ internal static IConcernDefinition ComputeConcernDefinition(this IConcernUsage c .OfType() .Select(featureTyping => featureTyping.Type) .OfType() - .FirstOrDefault(); + .SingleOrDefaultStrict(nameof(concernUsageSubject)); } } } From 80938a1332dc5fa3aca86f1655bccfeffde59712 Mon Sep 17 00:00:00 2001 From: TanaseMariusatstarion Date: Sun, 28 Jun 2026 17:24:28 +0200 Subject: [PATCH 3/3] small font changes --- SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs | 2 +- SysML2.NET/Extend/ConcernUsageExtensions.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs b/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs index a9dc5a35..cf5628ef 100644 --- a/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs +++ b/SysML2.NET.Tests/Extend/ConcernUsageExtensionsTestFixture.cs @@ -26,8 +26,8 @@ namespace SysML2.NET.Tests.Extend using SysML2.NET.Core.POCO.Core.Features; using SysML2.NET.Core.POCO.Systems.Requirements; - using SysML2.NET.Extensions; using SysML2.NET.Exceptions; + using SysML2.NET.Extensions; [TestFixture] public class ConcernUsageExtensionsTestFixture diff --git a/SysML2.NET/Extend/ConcernUsageExtensions.cs b/SysML2.NET/Extend/ConcernUsageExtensions.cs index 0e0b0fca..c0be88bb 100644 --- a/SysML2.NET/Extend/ConcernUsageExtensions.cs +++ b/SysML2.NET/Extend/ConcernUsageExtensions.cs @@ -22,7 +22,7 @@ namespace SysML2.NET.Core.POCO.Systems.Requirements { using System; using System.Linq; - + using SysML2.NET.Core.POCO.Core.Features; using SysML2.NET.Extensions;