diff --git a/internal/config/make_rule_targets.go b/internal/config/make_rule_targets.go index b5165f8..f752fef 100644 --- a/internal/config/make_rule_targets.go +++ b/internal/config/make_rule_targets.go @@ -65,6 +65,10 @@ func makeRuleTargetAxis(targetConfig RuleTargetConfig, devs map[string]*evdev.In return nil, fmt.Errorf("non-existent device '%s'", targetConfig.Device) } + if targetConfig.DeadzoneEnd < targetConfig.DeadzoneStart { + return nil, errors.New("deadzone_end must be greater than deadzone_start") + } + var eventCode evdev.EvCode axisConfig := strings.ToUpper(targetConfig.Axis) switch { @@ -121,7 +125,7 @@ func makeRuleTargetRelaxis(targetConfig RuleTargetConfig, devs map[string]*evdev eventCode = evdev.EvCode(codeInt) default: - eventCode, ok = evdev.ABSFromString["REL_"+axisConfig] + eventCode, ok = evdev.RELFromString["REL_"+axisConfig] if !ok { return nil, fmt.Errorf("invalid axis code '%s'", axisConfig) } diff --git a/internal/config/make_rule_targets_test.go b/internal/config/make_rule_targets_test.go index a149b8a..770a4fe 100644 --- a/internal/config/make_rule_targets_test.go +++ b/internal/config/make_rule_targets_test.go @@ -19,7 +19,127 @@ func (t *MakeRuleTargetsTests) SetupSuite() { } func (t *MakeRuleTargetsTests) TestMakeRuleTargetButton() { - // STUB + config := RuleTargetConfig{ + Device: "test", + } + t.Run("Standard keycode", func() { + config.Button = "BTN_TRIGGER" + rule, err := makeRuleTargetButton(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.BTN_TRIGGER, rule.Button) + }) + + t.Run("Hex code", func() { + config.Button = "0x2fd" + rule, err := makeRuleTargetButton(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.EvCode(0x2fd), rule.Button) + }) + + t.Run("Index", func() { + config.Button = "3" + rule, err := makeRuleTargetButton(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.BTN_TOP, rule.Button) + }) + + t.Run("Index too high", func() { + config.Button = "74" + _, err := makeRuleTargetButton(config, t.devs) + t.NotNil(err) + }) + + t.Run("Un-prefixed keycode", func() { + config.Button = "pinkie" + rule, err := makeRuleTargetButton(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.BTN_PINKIE, rule.Button) + }) + + t.Run("Invalid keycode", func() { + config.Button = "foo" + _, err := makeRuleTargetButton(config, t.devs) + t.NotNil(err) + }) +} + +func (t *MakeRuleTargetsTests) TestMakeRuleTargetAxis() { + config := RuleTargetConfig{ + Device: "test", + } + + t.Run("Standard keycode", func() { + config.Axis = "ABS_X" + rule, err := makeRuleTargetAxis(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.ABS_X, rule.Axis) + }) + + t.Run("Hex keycode", func() { + config.Axis = "0x01" + rule, err := makeRuleTargetAxis(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.ABS_Y, rule.Axis) + }) + + t.Run("Un-prefixed keycode", func() { + config.Axis = "x" + rule, err := makeRuleTargetAxis(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.ABS_X, rule.Axis) + }) + + t.Run("Invalid keycode", func() { + config.Axis = "foo" + _, err := makeRuleTargetAxis(config, t.devs) + t.NotNil(err) + }) + + t.Run("Invalid deadzone", func() { + config.DeadzoneEnd = 100 + config.DeadzoneStart = 1000 + _, err := makeRuleTargetAxis(config, t.devs) + t.NotNil(err) + }) +} + +func (t *MakeRuleTargetsTests) TestMakeRuleTargetRelaxis() { + config := RuleTargetConfig{ + Device: "test", + } + + t.Run("Standard keycode", func() { + config.Axis = "REL_WHEEL" + rule, err := makeRuleTargetRelaxis(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.REL_WHEEL, rule.Axis) + }) + + t.Run("Hex keycode", func() { + config.Axis = "0x00" + rule, err := makeRuleTargetRelaxis(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.REL_X, rule.Axis) + }) + + t.Run("Un-prefixed keycode", func() { + config.Axis = "wheel" + rule, err := makeRuleTargetRelaxis(config, t.devs) + t.Nil(err) + t.EqualValues(evdev.REL_WHEEL, rule.Axis) + }) + + t.Run("Invalid keycode", func() { + config.Axis = "foo" + _, err := makeRuleTargetRelaxis(config, t.devs) + t.NotNil(err) + }) + + t.Run("Incorrect axis type", func() { + config.Axis = "ABS_X" + _, err := makeRuleTargetRelaxis(config, t.devs) + t.NotNil(err) + }) } func TestRunnerMakeRuleTargets(t *testing.T) {