diff --git a/Assets/Tests/PlayMode/SimulateMouseUiInputSystemTests.cs b/Assets/Tests/PlayMode/SimulateMouseUiInputSystemTests.cs
new file mode 100644
index 0000000000..c4686eba16
--- /dev/null
+++ b/Assets/Tests/PlayMode/SimulateMouseUiInputSystemTests.cs
@@ -0,0 +1,222 @@
+#if ULOOP_HAS_INPUT_SYSTEM
+#nullable enable
+using System.Collections;
+using System.Threading;
+using System.Threading.Tasks;
+using io.github.hatayama.UnityCliLoop.FirstPartyTools;
+using io.github.hatayama.UnityCliLoop.Runtime;
+using io.github.hatayama.UnityCliLoop.ToolContracts;
+using Newtonsoft.Json.Linq;
+using NUnit.Framework;
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.InputSystem;
+using UnityEngine.TestTools;
+using UnityEngine.UI;
+using Object = UnityEngine.Object;
+
+namespace io.github.hatayama.UnityCliLoop.Tests.PlayMode
+{
+ ///
+ /// Test fixture that verifies mouse UI drags keep Mouse.current aligned with the simulated pointer position.
+ ///
+ public class SimulateMouseUiInputSystemTests : InputTestFixture
+ {
+ private const float PositionTolerance = 0.01f;
+
+ private GameObject canvasGo = null!;
+ private GameObject eventSystemGo = null!;
+ private ExistingEventSystemDisableScope eventSystemDisableScope = null!;
+ private SimulateMouseUiTool tool = null!;
+ private SimulateMouseUiResponse lastResponse = null!;
+
+ public override void Setup()
+ {
+ base.Setup();
+
+ eventSystemDisableScope = new ExistingEventSystemDisableScope();
+
+ canvasGo = new GameObject("TestCanvas");
+ Canvas canvas = canvasGo.AddComponent