using System.Runtime.Versioning; using TeamsISO.Engine.NdiInterop; namespace TeamsISO.Engine.Tests.Interop; // NdiInteropPInvoke is marked [SupportedOSPlatform("windows")] because it // P/Invokes the Windows-only NDI runtime. The pure NormalizeGroups helper // doesn't actually touch native code, but it inherits the platform tag from // the enclosing class. Re-declaring SupportedOSPlatform here silences CA1416 // — these tests still only run on Windows (the Engine.Tests project itself // is platform-agnostic but xunit only schedules them when the OS supports). [SupportedOSPlatform("windows")] // NdiInteropPInvoke.NormalizeGroups is internal; the engine tests project has // access via InternalsVisibleTo applied to TeamsISO.Engine.NdiInterop. public class NdiInteropNormalizeGroupsTests { [Theory] [InlineData(null, null)] [InlineData("", null)] [InlineData(" ", null)] [InlineData("Public", "Public")] // already canonical [InlineData("public", "Public")] // lowercase -> canonical (the bug fix) [InlineData("PUBLIC", "Public")] // shouty -> canonical [InlineData("PuBlIc", "Public")] // mixed case -> canonical [InlineData("teamsiso-input", "teamsiso-input")] // custom group: pass through [InlineData("Public,teamsiso-input", "Public,teamsiso-input")] [InlineData("public,teamsiso-input", "Public,teamsiso-input")] // mixed list normalizes the standard one only [InlineData("teamsiso-input,PUBLIC", "teamsiso-input,Public")] [InlineData(" public , teamsiso-input ", "Public,teamsiso-input")] // whitespace trimmed per part public void NormalizeGroups_Maps(string? input, string? expected) { NdiInteropPInvoke.NormalizeGroups(input).Should().Be(expected); } }