ProjektMWS/Projekt MWS/Library/PackageCache/com.unity.collab-proxy@1.3.9/Tests/Editor/UITestHelpers.cs
2021-06-28 19:31:12 +02:00

142 lines
5.3 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// This code snippet was provided originally by stanislav.osipov@unity3d.com from #ui-elements slack channel.
using System;
using System.Collections;
using Unity.Cloud.Collaborate.Assets;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace Unity.Cloud.Collaborate.Tests
{
internal static class UiTestHelpers
{
#region Events
// In order for tests to run without an EditorWindow but still be able to send
// events, we sometimes need to force the event type. IMGUI::GetEventType() (native) will
// return the event type as Ignore if the proper views haven't yet been
// initialized. This (falsely) breaks tests that rely on the event type. So for tests, we
// just ensure the event type is what we originally set it to when we sent it.
// This original type can be retrieved via Event.rawType.
static Event CreateEvent(Event evt)
{
return evt; //UIElementsUtility.CreateEvent(evt, evt.rawType);
}
public static Event MakeEvent(EventType type)
{
var evt = new Event { type = type };
return CreateEvent(evt);
}
public static Event MakeEvent(EventType type, Vector2 position)
{
var evt = new Event { type = type, mousePosition = position };
return CreateEvent(evt);
}
public static Event MakeKeyEvent(KeyCode code, EventType type = EventType.KeyDown, EventModifiers modifiers = EventModifiers.None, char character = '\0')
{
var evt = new Event { type = type, keyCode = code, character = character, modifiers = modifiers };
return CreateEvent(evt);
}
public static Event MakeMouseEvent(EventType type, Vector2 position, MouseButton button = MouseButton.LeftMouse, EventModifiers modifiers = EventModifiers.None, int clickCount = 1)
{
var evt = new Event { type = type, mousePosition = position, button = (int)button, modifiers = modifiers, clickCount = clickCount };
return CreateEvent(evt);
}
public static Event MakeScrollWheelEvent(Vector2 delta, Vector2 position)
{
var evt = new Event
{
type = EventType.ScrollWheel,
delta = delta,
mousePosition = position
};
return CreateEvent(evt);
}
public static Event MakeCommandEvent(EventType type, string command)
{
var evt = new Event { type = type, commandName = command };
return CreateEvent(evt);
}
#endregion
#region EditorWindow API
public static bool IsCompletelyVisible(EditorWindow window, VisualElement element)
{
if (element.ClassListContains(UiConstants.ussHidden))
{
return false;
}
var windowBounds = window.rootVisualElement.worldBound;
var elementBounds = element.worldBound;
return elementBounds.x >= windowBounds.x
&& elementBounds.y >= windowBounds.y
&& windowBounds.x + windowBounds.width >= elementBounds.x + elementBounds.width
&& windowBounds.y + windowBounds.height >= elementBounds.y + elementBounds.height;
}
public static bool IsPartiallyVisible(EditorWindow window, VisualElement element)
{
if (element.ClassListContains(UiConstants.ussHidden))
{
return false;
}
var windowBounds = window.rootVisualElement.worldBound;
var elementBounds = element.worldBound;
return !(elementBounds.x > windowBounds.x + windowBounds.width)
&& !(elementBounds.x + elementBounds.width < windowBounds.x)
&& !(elementBounds.y > windowBounds.y + windowBounds.height)
&& !(elementBounds.y + elementBounds.height < windowBounds.y);
}
public static void SendMouseDownEvent(EditorWindow window, VisualElement element)
{
var evt = MakeMouseEvent(EventType.MouseDown, element.worldBound.center);
window.SendEvent(evt);
}
public static void SendClickEvent(EditorWindow window, VisualElement element)
{
var evt = MakeMouseEvent(EventType.MouseDown, element.worldBound.center);
window.SendEvent(evt);
evt = MakeMouseEvent(EventType.MouseUp, element.worldBound.center);
window.SendEvent(evt);
}
public static void SimulateTyping(EditorWindow window, string text)
{
foreach (var character in text)
{
var evt = MakeKeyEvent(KeyCode.None, EventType.KeyDown, EventModifiers.None, character);
window.SendEvent(evt);
}
}
public static void SimulateTyping(EditorWindow window, char character, int repetitions)
{
for (var i = 0; i < repetitions; i++)
{
var evt = MakeKeyEvent(KeyCode.None, EventType.KeyDown, EventModifiers.None, character);
window.SendEvent(evt);
}
}
public static IEnumerator Pause(int frames)
{
for (var i = 0; i < frames; i++)
{
yield return null;
}
}
#endregion
}
}