public void Actions_CanApplyBindingOverridesToMaps()
    {
        var map     = new InputActionMap();
        var action1 = map.AddAction("action1", binding: "/<keyboard>/enter");
        var action2 = map.AddAction("action2", binding: "/<gamepad>/buttonSouth");

        var overrides = new List <InputBinding>(3)
        {
            new InputBinding {
                action = "action3", overridePath = "/gamepad/buttonSouth"
            },                                                                            // Noise.
            new InputBinding {
                action = "action2", overridePath = "/gamepad/rightTrigger"
            },
            new InputBinding {
                action = "action1", overridePath = "/gamepad/leftTrigger"
            }
        };

        map.ApplyBindingOverrides(overrides);

        action1.Enable();
        action2.Enable();

        Assert.That(action1.bindings[0].path, Is.EqualTo("/<keyboard>/enter"));
        Assert.That(action2.bindings[0].path, Is.EqualTo("/<gamepad>/buttonSouth"));
        Assert.That(action1.bindings[0].overridePath, Is.EqualTo("/gamepad/leftTrigger"));
        Assert.That(action2.bindings[0].overridePath, Is.EqualTo("/gamepad/rightTrigger"));
    }
    public void Actions_CanRemoveBindingOverridesFromMap_WhenEnabled()
    {
        var keyboard = InputSystem.AddDevice <Keyboard>();
        var gamepad  = InputSystem.AddDevice <Gamepad>();

        var map    = new InputActionMap();
        var action = map.AddAction("action1", binding: "<Keyboard>/enter");

        var overrides = new List <InputBinding>
        {
            new InputBinding {
                action = "action1", overridePath = "<Gamepad>/leftTrigger"
            }
        };

        map.ApplyBindingOverrides(overrides);

        map.Enable();

        Assert.That(action.controls, Is.EquivalentTo(new[] { gamepad.leftTrigger }));

        map.RemoveBindingOverrides(overrides);

        Assert.That(action.bindings[0].overridePath, Is.Null);
        Assert.That(action.controls, Is.EquivalentTo(new[] { keyboard.enterKey }));
    }
    public void Actions_CannotApplyBindingOverridesToMap_WhenEnabled()
    {
        var map = new InputActionMap();

        map.AddAction("action1", binding: "/<keyboard>/enter").Enable();

        var overrides = new List <InputBinding>
        {
            new InputBinding {
                action = "action1", overridePath = "/gamepad/leftTrigger"
            }
        };

        Assert.That(() => map.ApplyBindingOverrides(overrides), Throws.InvalidOperationException);
    }
    public void Actions_CanRemoveBindingOverridesFromMaps()
    {
        var map     = new InputActionMap();
        var action1 = map.AddAction("action1", binding: "/<keyboard>/enter");
        var action2 = map.AddAction("action2", binding: "/<gamepad>/buttonSouth");

        var overrides = new List <InputBinding>
        {
            new InputBinding {
                action = "action2", overridePath = "/gamepad/rightTrigger"
            },
            new InputBinding {
                action = "action1", overridePath = "/gamepad/leftTrigger"
            }
        };

        map.ApplyBindingOverrides(overrides);
        overrides.RemoveAt(1); // Leave only override for action2.
        map.RemoveBindingOverrides(overrides);

        Assert.That(action1.bindings[0].overridePath, Is.EqualTo("/gamepad/leftTrigger"));
        Assert.That(action2.bindings[0].overridePath, Is.Null); // Should have been removed.
    }