public void Editor_CanGenerateInputDeviceBasedOnSteamIGAFile() { // Create an InputActions setup and convert it to Steam IGA. var asset = ScriptableObject.CreateInstance <InputActionAsset>(); var actionMap1 = new InputActionMap("map1"); var actionMap2 = new InputActionMap("map2"); actionMap1.AddAction("buttonAction", expectedControlLayout: "Button"); actionMap1.AddAction("axisAction", expectedControlLayout: "Axis"); actionMap1.AddAction("stickAction", expectedControlLayout: "Stick"); actionMap2.AddAction("vector2Action", expectedControlLayout: "Vector2"); asset.AddActionMap(actionMap1); asset.AddActionMap(actionMap2); var vdf = SteamIGAConverter.ConvertInputActionsToSteamIGA(asset); // Generate a C# input device from the Steam IGA file. var generatedCode = SteamIGAConverter.GenerateInputDeviceFromSteamIGA(vdf, "My.Namespace.MySteamController"); Assert.That(generatedCode, Does.StartWith("// THIS FILE HAS BEEN AUTO-GENERATED")); Assert.That(generatedCode, Contains.Substring("#if (UNITY_EDITOR || UNITY_STANDALONE) && UNITY_ENABLE_STEAM_CONTROLLER_SUPPORT")); Assert.That(generatedCode, Contains.Substring("namespace My.Namespace\n")); Assert.That(generatedCode, Contains.Substring("public class MySteamController : SteamController\n")); Assert.That(generatedCode, Contains.Substring("public unsafe struct MySteamControllerState : IInputStateTypeInfo\n")); Assert.That(generatedCode, Contains.Substring("[InitializeOnLoad]")); Assert.That(generatedCode, Contains.Substring("[RuntimeInitializeOnLoadMethod")); Assert.That(generatedCode, Contains.Substring("new FourCC('M', 'y', 'S', 't')")); Assert.That(generatedCode, Contains.Substring("protected override void FinishSetup()")); Assert.That(generatedCode, Contains.Substring("base.FinishSetup();")); Assert.That(generatedCode, Contains.Substring("new InputDeviceMatcher")); Assert.That(generatedCode, Contains.Substring("WithInterface(\"Steam\")")); Assert.That(generatedCode, Contains.Substring("public override ReadOnlyArray<SteamActionSetInfo> steamActionSets")); Assert.That(generatedCode, Contains.Substring("public SteamHandle<InputActionMap> map1SetHandle")); Assert.That(generatedCode, Contains.Substring("public SteamHandle<InputActionMap> map2SetHandle")); Assert.That(generatedCode, Contains.Substring("public SteamHandle<InputAction> stickActionHandle")); Assert.That(generatedCode, Contains.Substring("public SteamHandle<InputAction> buttonActionHandle")); Assert.That(generatedCode, Contains.Substring("public SteamHandle<InputAction> axisActionHandle")); Assert.That(generatedCode, Contains.Substring("public SteamHandle<InputAction> vector2ActionHandle")); Assert.That(generatedCode, Contains.Substring("public StickControl stickAction")); Assert.That(generatedCode, Contains.Substring("public ButtonControl buttonAction")); Assert.That(generatedCode, Contains.Substring("public AxisControl axisAction")); Assert.That(generatedCode, Contains.Substring("public Vector2Control vector2Action")); Assert.That(generatedCode, Contains.Substring("stickAction = builder.GetControl<StickControl>(\"stickAction\");")); Assert.That(generatedCode, Contains.Substring("buttonAction = builder.GetControl<ButtonControl>(\"buttonAction\");")); Assert.That(generatedCode, Contains.Substring("axisAction = builder.GetControl<AxisControl>(\"axisAction\");")); Assert.That(generatedCode, Contains.Substring("vector2Action = builder.GetControl<Vector2Control>(\"vector2Action\");")); Assert.That(generatedCode, Contains.Substring("protected override void ResolveSteamActions(ISteamControllerAPI api)")); Assert.That(generatedCode, Contains.Substring("map1SetHandle = api.GetActionSetHandle(\"map1\");")); Assert.That(generatedCode, Contains.Substring("map2SetHandle = api.GetActionSetHandle(\"map2\");")); Assert.That(generatedCode, Contains.Substring("buttonActionHandle = api.GetDigitalActionHandle(\"buttonAction\");")); Assert.That(generatedCode, Contains.Substring("axisActionHandle = api.GetAnalogActionHandle(\"axisAction\");")); Assert.That(generatedCode, Contains.Substring("stickActionHandle = api.GetAnalogActionHandle(\"stickAction\");")); Assert.That(generatedCode, Contains.Substring("vector2ActionHandle = api.GetAnalogActionHandle(\"vector2Action\");")); Assert.That(generatedCode, Contains.Substring("protected override unsafe void Update(ISteamControllerAPI api)")); }