From 0a928e6a57a0172f2ab05101f753cb4fe5aaa743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 1 Oct 2018 16:55:41 +0200 Subject: [PATCH] Add test for validation regex --- ...tionConstraints_IllegalCharactersTest.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java new file mode 100644 index 0000000000..e06df3ea1d --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java @@ -0,0 +1,47 @@ +package sonia.scm.api.v2; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Collection; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertFalse; +import static sonia.scm.api.v2.ValidationConstraints.USER_GROUP_PATTERN; + +@RunWith(Parameterized.class) +public class ValidationConstraints_IllegalCharactersTest { + + private static final List ACCEPTED_CHARS = asList('@', '_', '-', '.'); + + private final Pattern userGroupPattern=Pattern.compile(USER_GROUP_PATTERN); + + private final String expression; + + public ValidationConstraints_IllegalCharactersTest(String expression) { + this.expression = expression; + } + + @Parameterized.Parameters(name = "{0}") + public static Collection createParameters() { + return Stream.concat(IntStream.range(0x20, 0x2f).mapToObj(i -> (char) i), // chars before '0' + Stream.concat(IntStream.range(0x3a, 0x40).mapToObj(i -> (char) i), // chars between '9' and 'A' + Stream.concat(IntStream.range(0x5b, 0x60).mapToObj(i -> (char) i), // chars between 'Z' and 'a' + IntStream.range(0x7b, 0xff).mapToObj(i -> (char) i)))) // chars after 'z' + .filter(c -> !ACCEPTED_CHARS.contains(c)) + .flatMap(c -> Stream.of("abc" + c + "xyz", "@" + c, c + "tail")) + .map(c -> new String[] {c}) + .collect(Collectors.toList()); + } + + @Test + public void shouldNotAcceptCharactersBetween_Z_and_a() { + assertFalse(userGroupPattern.matcher(expression).matches()); + } +}