using System.Collections.Generic; using System.Linq; using NUnit.Framework; namespace UnityEngine.Rendering.Tests { class InputRegisteringTests { static TestCaseData[] s_DuplicateTestCaseDatas = { new TestCaseData(new List() { new() { name = "Another Action 1", kind = InputManagerEntry.Kind.Axis }, new() { name = "Duplicate Action", kind = InputManagerEntry.Kind.Axis }, new() { name = "Another Action 2", kind = InputManagerEntry.Kind.Axis }, new() { name = "Duplicate Action", kind = InputManagerEntry.Kind.Axis }, new() { name = "Duplicate Action", kind = InputManagerEntry.Kind.Axis }, }) .SetName("Given a set containing duplicate entries, when removing duplicate entries, only the first of each duplicate is kept") .Returns(new string[] { "Another Action 1", "Duplicate Action", "Another Action 2" }), new TestCaseData(new List() { new() { name = "Duplicate Action", kind = InputManagerEntry.Kind.Axis }, new() { name = "Duplicate Action", kind = InputManagerEntry.Kind.Mouse }, }) .SetName("Given entries with duplicate names but different kinds, when removing duplicate entries, both are kept") .Returns(new string[] { "Duplicate Action", "Duplicate Action" }), }; [Test, TestCaseSource(nameof(s_DuplicateTestCaseDatas))] public string[] GetEntriesWithoutDuplicates(List entries) { return InputRegistering.GetEntriesWithoutDuplicates(entries) .Select(e => e.name).ToArray(); } static TestCaseData[] s_AlreadyRegisteredTestCaseDatas = { new TestCaseData(new List() { new() { name = "New Action 1", kind = InputManagerEntry.Kind.Axis }, new() { name = "New Action 2", kind = InputManagerEntry.Kind.Mouse }, new() { name = "Old Action 1", kind = InputManagerEntry.Kind.Axis }, new() { name = "Old Action 2", kind = InputManagerEntry.Kind.Mouse }, }, new List<(string, InputManagerEntry.Kind)>() { ("Old Action 1", InputManagerEntry.Kind.Axis), ("Old Action 2", InputManagerEntry.Kind.Mouse), ("Old Action 3", InputManagerEntry.Kind.Mouse) }) .SetName("Given a set of entries where some of them is already registered, when filtering out already registered entries, they are removed") .Returns(new string[] { "New Action 1", "New Action 2" }), new TestCaseData(new List() { new() { name = "Old Action 1", kind = InputManagerEntry.Kind.Axis }, new() { name = "Old Action 2", kind = InputManagerEntry.Kind.Mouse }, }, new List<(string, InputManagerEntry.Kind)>() { ("Old Action 1", InputManagerEntry.Kind.Axis), ("Old Action 2", InputManagerEntry.Kind.Axis), }) .SetName("Given an entry with already registered name but different kind, when filtering out already registered entries, only ones with matching kind are removed") .Returns(new string[] { "Old Action 2" }), }; [Test, TestCaseSource(nameof(s_AlreadyRegisteredTestCaseDatas))] public string[] GetEntriesWithoutAlreadyRegistered(List entries, List<(string, InputManagerEntry.Kind)> cachedEntries) { return InputRegistering.GetEntriesWithoutAlreadyRegistered(entries, cachedEntries) .Select(e => e.name).ToArray(); } } }