using System.Collections; using System.Linq; using NUnit.Framework; using Unity.Multiplayer.Center.Recommendations; using Unity.Multiplayer.Center.Window.UI.RecommendationView; using UnityEditor; using UnityEngine; using UnityEngine.TestTools; using UnityEngine.UIElements; namespace Unity.MultiplayerCenterTests { internal class SectionHeaderTests { [SetUp] public void Setup() { var sectionHeader = new SectionHeader("Test"); var dummyWindow = EditorWindow.GetWindow(); dummyWindow.rootVisualElement.Clear(); dummyWindow.rootVisualElement.Add(sectionHeader); } SectionHeader GetSectionHeader() { return EditorWindow.GetWindow().rootVisualElement.Q(); } IEnumerator WaitUntilDropdownIsShown() { DropdownField dropDown = null; var maxWait = 100; // wait for UI to be ready while (dropDown == null || maxWait-- > 0) { dropDown = GetSectionHeader().Q(); yield return null; } Assert.NotNull(dropDown, "Dropdown could not be found"); } [UnityTest] public IEnumerator SectionHeader_AppendsRecommendationText() { yield return WaitUntilDropdownIsShown(); var dropDown = GetSectionHeader().Q(); var recommendation = UtilsForRecommendationTests.GetSomeRecommendation(); var serverChoices = recommendation.ServerArchitectureOptions; var serverChoice = serverChoices.First(sol => sol.RecommendationType == RecommendationType.MainArchitectureChoice); GetSectionHeader().UpdateData(recommendation.ServerArchitectureOptions); Assert.AreEqual(serverChoice.Title +" - Recommended", dropDown.value); } [UnityTest] public IEnumerator SectionHeader_IgnoresIncompatibleSolutions() { yield return WaitUntilDropdownIsShown(); var dropDown = GetSectionHeader().Q(); var recommendation = UtilsForRecommendationTests.GetSomeRecommendation(); var serverChoices = recommendation.ServerArchitectureOptions; serverChoices.Last().RecommendationType = RecommendationType.Incompatible; GetSectionHeader().UpdateData(recommendation.ServerArchitectureOptions); Assert.AreEqual(serverChoices.Count(sol => sol.RecommendationType !=RecommendationType.Incompatible), dropDown.choices.Count); } [TearDown] public void TearDown() { var dummyWindow = EditorWindow.GetWindow(); dummyWindow.rootVisualElement.Clear(); dummyWindow.Close(); } class DummyWindow : EditorWindow { } } }