From 53efec2d0f8f5cfc314b25600aca540b1e4402ed Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 4 Mar 2023 12:24:46 +0100 Subject: [PATCH] Hotfix invert on first parameter --- .../steamwar/command/AbstractSWCommand.java | 2 + src/de/steamwar/command/SubCommand.java | 4 ++ .../command/InvertValidatorCommand.java | 45 +++++++++++++++++++ .../command/ValidatorCommandTest.java | 11 +++++ 4 files changed, 62 insertions(+) create mode 100644 testsrc/de/steamwar/command/InvertValidatorCommand.java diff --git a/src/de/steamwar/command/AbstractSWCommand.java b/src/de/steamwar/command/AbstractSWCommand.java index dd87f30..bda6e90 100644 --- a/src/de/steamwar/command/AbstractSWCommand.java +++ b/src/de/steamwar/command/AbstractSWCommand.java @@ -363,12 +363,14 @@ public abstract class AbstractSWCommand { private boolean invert; public Handler(AbstractSWCommand.Validator validator, Class clazz, Map> localValidator) { + System.out.println("Validator: " + validator + " " + clazz); inner = (AbstractValidator) SWCommandUtils.getValidator(validator, clazz, localValidator); invert = validator.invert(); } @Override public boolean validate(T sender, Object value, MessageSender messageSender) { + System.out.println("Validator: " + inner + " " + invert); if (invert) { return !inner.validate(sender, value, messageSender); } else { diff --git a/src/de/steamwar/command/SubCommand.java b/src/de/steamwar/command/SubCommand.java index 58fa919..6b8828e 100644 --- a/src/de/steamwar/command/SubCommand.java +++ b/src/de/steamwar/command/SubCommand.java @@ -63,6 +63,10 @@ public class SubCommand implements Comparable> { AbstractSWCommand.Validator validator = parameters[0].getAnnotation(AbstractSWCommand.Validator.class); if (validator != null) { this.validator = (AbstractValidator) SWCommandUtils.getValidator(validator, parameters[0].getType(), localValidator); + if (validator.invert()) { + AbstractValidator current = this.validator; + this.validator = (sender, value, messageSender) -> !current.validate(sender, value, messageSender); + } } commandPart = generateCommandPart(abstractSWCommand, subCommand, parameters, localTypeMapper, localValidator); diff --git a/testsrc/de/steamwar/command/InvertValidatorCommand.java b/testsrc/de/steamwar/command/InvertValidatorCommand.java new file mode 100644 index 0000000..505d09b --- /dev/null +++ b/testsrc/de/steamwar/command/InvertValidatorCommand.java @@ -0,0 +1,45 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2022 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.command; + +import de.steamwar.command.dto.ExecutionIdentifier; +import de.steamwar.command.dto.TestSWCommand; +import de.steamwar.command.dto.TestValidator; + +public class InvertValidatorCommand extends TestSWCommand { + + public InvertValidatorCommand() { + super("testvalidator"); + } + + @Register + public void test(@Validator(value = "Text", invert = true) String sender, boolean b, boolean b2) { + System.out.println("test: " + sender + " " + b + " " + b2); + throw new ExecutionIdentifier("RunTestInvert"); + } + + @Validator(value = "Text", local = true) + public TestValidator testValidator() { + return (sender, value, messageSender) -> { + System.out.println("testValidator: " + sender + " " + value + " " + messageSender); + return false; + }; + } +} diff --git a/testsrc/de/steamwar/command/ValidatorCommandTest.java b/testsrc/de/steamwar/command/ValidatorCommandTest.java index d9712e3..084f53e 100644 --- a/testsrc/de/steamwar/command/ValidatorCommandTest.java +++ b/testsrc/de/steamwar/command/ValidatorCommandTest.java @@ -60,4 +60,15 @@ public class ValidatorCommandTest { assertCMDFramework(e, ExecutionIdentifier.class, "RunOnErrorDouble"); } } + + @Test + public void testInvert() { + InvertValidatorCommand cmd = new InvertValidatorCommand(); + try { + cmd.execute("test", "", new String[]{"false", "true"}); + assertThat(true, is(false)); + } catch (Exception e) { + assertCMDFramework(e, ExecutionIdentifier.class, "RunTestInvert"); + } + } }