This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit a9f94c483f4c290125b3f6776c5a922b072a49e7
Author: Jan-Eric Hellenberg <janeric.hellenb...@gmail.com>
AuthorDate: Fri Jan 3 13:57:27 2025 +0100

    James-4099 Refactor MailboxPath tests to work with different path delimiters
---
 .../apache/james/mailbox/model/MailboxPath.java    |  13 +-
 .../james/mailbox/model/MailboxPathTest.java       | 377 ++++++++++++---------
 2 files changed, 217 insertions(+), 173 deletions(-)

diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
index 24abfdad66..1140b327e8 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
@@ -35,6 +35,7 @@ import 
org.apache.james.mailbox.exception.HasEmptyMailboxNameInHierarchyExceptio
 import org.apache.james.mailbox.exception.MailboxNameException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
@@ -51,7 +52,8 @@ public class MailboxPath {
     private static final Joiner PARTS_JOINER = Joiner.on(':');
     private static final LookupTranslator USERNAME_ESCAPER = new 
LookupTranslator(Map.of(":", "/;", "/", "//"));
     private static final LookupTranslator USERNAME_UNESCAPER = new 
LookupTranslator(Map.of("/;", ":", "//", "/"));
-    private static final boolean RELAX_MAILBOX_NAME_VALIDATION = 
Boolean.parseBoolean(System.getProperty("james.relaxed.mailbox.name.validation",
 "false"));
+    @VisibleForTesting
+    static boolean RELAX_MAILBOX_NAME_VALIDATION = 
Boolean.parseBoolean(System.getProperty("james.relaxed.mailbox.name.validation",
 "false"));
 
     /**
      * Return a {@link MailboxPath} which represent the INBOX of the given
@@ -95,15 +97,18 @@ public class MailboxPath {
         return Username.of(USERNAME_UNESCAPER.translate(parts.get(1)));
     }
 
-    private static String evaluateInvalidChars() {
+    @VisibleForTesting
+    static String evaluateInvalidChars() {
         if (RELAX_MAILBOX_NAME_VALIDATION) {
             return "\r\n";
         }
         return "%*\r\n";
     }
 
-    private static final String INVALID_CHARS = evaluateInvalidChars();
-    private static final CharMatcher INVALID_CHARS_MATCHER = 
CharMatcher.anyOf(INVALID_CHARS);
+    @VisibleForTesting
+    static String INVALID_CHARS = evaluateInvalidChars();
+    @VisibleForTesting
+    static CharMatcher INVALID_CHARS_MATCHER = 
CharMatcher.anyOf(INVALID_CHARS);
     // This is the size that all mailbox backend should support
     public  static final int MAX_MAILBOX_NAME_LENGTH = 200;
 
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
index 676db676be..cadac1abe2 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
@@ -30,384 +30,420 @@ import org.apache.james.mailbox.DefaultMailboxes;
 import 
org.apache.james.mailbox.exception.HasEmptyMailboxNameInHierarchyException;
 import org.apache.james.mailbox.exception.MailboxNameException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
+import com.google.common.base.CharMatcher;
 import com.google.common.base.Strings;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class MailboxPathTest {
+    @Nested
+    public class DotDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return '.';
+        }
+    }
+
+    @Nested
+    public class SlashDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return '/';
+        }
+    }
+
+    abstract static class TestBase extends MailboxFolderDelimiterAwareTest {
     private static final Username USER = Username.of("user");
     private static final Username BUGGY_USER = Username.of("buggy:bob");
 
     @Test
     void shouldMatchBeanContract() {
         EqualsVerifier.forClass(MailboxPath.class)
-            .withNonnullFields("namespace")
-            .verify();
+                .withNonnullFields("namespace")
+                .verify();
     }
 
     static Stream<Arguments> parseShouldYieldCorrectResults() {
         return Stream.of(
-            Arguments.of(MailboxPath.forUser(USER, "test")),
-            Arguments.of(MailboxPath.forUser(USER, "a:b")),
-            Arguments.of(MailboxPath.forUser(USER, "a;b")),
-            Arguments.of(MailboxPath.forUser(USER, "a;;b")),
-            Arguments.of(MailboxPath.forUser(USER, "a:b:c:")),
-            Arguments.of(MailboxPath.forUser(USER, "a:b:c:")),
-            Arguments.of(MailboxPath.forUser(USER, ":")),
-            Arguments.of(MailboxPath.forUser(USER, ";")),
-            Arguments.of(MailboxPath.forUser(USER, "")),
-            Arguments.of(MailboxPath.inbox(USER)),
-            Arguments.of(MailboxPath.inbox(Username.of("a;b"))),
-            Arguments.of(MailboxPath.inbox(Username.of(";"))),
-            Arguments.of(MailboxPath.inbox(Username.of(":"))),
-            Arguments.of(MailboxPath.inbox(Username.of("a;;a"))),
-            Arguments.of(MailboxPath.inbox(Username.of("a:::;:::;:;;;a"))),
-            Arguments.of(MailboxPath.inbox(Username.of("a::a"))),
-            Arguments.of(MailboxPath.inbox(Username.of("a/a"))),
-            Arguments.of(MailboxPath.inbox(Username.of("a//a"))),
-            Arguments.of(MailboxPath.inbox(Username.of("a/:a"))),
-            Arguments.of(MailboxPath.inbox(Username.of("a/;a"))),
-            
Arguments.of(MailboxPath.inbox(Username.of("a/:::;;/:://:;//:/a"))),
-            Arguments.of(MailboxPath.inbox(BUGGY_USER)),
-            Arguments.of(new MailboxPath("#whatever", USER, "whatever")),
-            Arguments.of(new MailboxPath(null, USER, "whatever")));
+                Arguments.of(MailboxPath.forUser(USER, "test")),
+                Arguments.of(MailboxPath.forUser(USER, "a:b")),
+                Arguments.of(MailboxPath.forUser(USER, "a;b")),
+                Arguments.of(MailboxPath.forUser(USER, "a;;b")),
+                Arguments.of(MailboxPath.forUser(USER, "a:b:c:")),
+                Arguments.of(MailboxPath.forUser(USER, "a:b:c:")),
+                Arguments.of(MailboxPath.forUser(USER, ":")),
+                Arguments.of(MailboxPath.forUser(USER, ";")),
+                Arguments.of(MailboxPath.forUser(USER, "")),
+                Arguments.of(MailboxPath.inbox(USER)),
+                Arguments.of(MailboxPath.inbox(Username.of("a;b"))),
+                Arguments.of(MailboxPath.inbox(Username.of(";"))),
+                Arguments.of(MailboxPath.inbox(Username.of(":"))),
+                Arguments.of(MailboxPath.inbox(Username.of("a;;a"))),
+                Arguments.of(MailboxPath.inbox(Username.of("a:::;:::;:;;;a"))),
+                Arguments.of(MailboxPath.inbox(Username.of("a::a"))),
+                Arguments.of(MailboxPath.inbox(Username.of("a/a"))),
+                Arguments.of(MailboxPath.inbox(Username.of("a//a"))),
+                Arguments.of(MailboxPath.inbox(Username.of("a/:a"))),
+                Arguments.of(MailboxPath.inbox(Username.of("a/;a"))),
+                
Arguments.of(MailboxPath.inbox(Username.of("a/:::;;/:://:;//:/a"))),
+                Arguments.of(MailboxPath.inbox(BUGGY_USER)),
+                Arguments.of(new MailboxPath("#whatever", USER, "whatever")),
+                Arguments.of(new MailboxPath(null, USER, "whatever")));
     }
 
     @ParameterizedTest
     @MethodSource
     void parseShouldYieldCorrectResults(MailboxPath mailboxPath) {
         assertThat(MailboxPath.parseEscaped(mailboxPath.asEscapedString()))
-            .contains(mailboxPath);
+                .contains(mailboxPath);
     }
 
     @Test
     void asStringShouldFormatUser() {
-        assertThat(MailboxPath.forUser(USER, 
"inbox.folder.subfolder").asString())
-            .isEqualTo("#private:user:inbox.folder.subfolder");
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder.subfolder")).asString())
+                
.isEqualTo(adjustToActiveFolderDelimiter("#private:user:inbox.folder.subfolder"));
     }
 
     @Test
     void getNameShouldReturnSubfolder() {
-        assertThat(MailboxPath.forUser(USER, 
"inbox.folder.subfolder").getName('.'))
-            .isEqualTo("subfolder");
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder.subfolder")).getName(folderDelimiter()))
+                .isEqualTo("subfolder");
     }
 
     @Test
     void getNameShouldNoopWhenNoDelimiter() {
-        assertThat(MailboxPath.forUser(USER, "name").getName('.'))
-            .isEqualTo("name");
+        assertThat(MailboxPath.forUser(USER, 
"name").getName(folderDelimiter()))
+                .isEqualTo("name");
     }
 
     @Test
     void getNameShouldNoopWhenEmpty() {
-        assertThat(MailboxPath.forUser(USER, "").getName('.'))
-            .isEqualTo("");
+        assertThat(MailboxPath.forUser(USER, "").getName(folderDelimiter()))
+                .isEqualTo("");
     }
 
     @Test
     void getNameShouldNoopWhenBlank() {
-        assertThat(MailboxPath.forUser(USER, "  ").getName('.'))
-            .isEqualTo("  ");
+        assertThat(MailboxPath.forUser(USER, "  ").getName(folderDelimiter()))
+                .isEqualTo("  ");
     }
 
     @Test
     void getHierarchyLevelsShouldBeOrdered() {
-        assertThat(MailboxPath.forUser(USER, "inbox.folder.subfolder")
-            .getHierarchyLevels('.'))
-            .containsExactly(
-                MailboxPath.forUser(USER, "inbox"),
-                MailboxPath.forUser(USER, "inbox.folder"),
-                MailboxPath.forUser(USER, "inbox.folder.subfolder"));
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder.subfolder"))
+                .getHierarchyLevels(folderDelimiter()))
+                .containsExactly(
+                        MailboxPath.forUser(USER, "inbox"),
+                        MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder")),
+                        MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder.subfolder")));
     }
 
     @Test
-    void childShouldConcatenateChildNameWithParentForlder() {
+    void childShouldConcatenateChildNameWithParentFolder() {
         assertThat(MailboxPath.forUser(USER, "folder")
-            .child("toto", '.'))
-            .isEqualTo(MailboxPath.forUser(USER, "folder.toto"));
+                .child("toto", folderDelimiter()))
+                .isEqualTo(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("folder.toto")));
     }
 
     @Test
     void childShouldThrowWhenNull() {
         MailboxPath path = MailboxPath.forUser(USER, "folder");
-        assertThatThrownBy(() -> path.child(null, '.'))
-            .isInstanceOf(IllegalArgumentException.class);
+        assertThatThrownBy(() -> path.child(null, folderDelimiter()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     void childShouldThrowWhenEmpty() {
         MailboxPath path = MailboxPath.forUser(USER, "folder");
-        assertThatThrownBy(() -> path.child("", '.'))
-            .isInstanceOf(IllegalArgumentException.class);
+        assertThatThrownBy(() -> path.child("", folderDelimiter()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     void shouldThrowWhenLineBreak() {
-        assertThatThrownBy(() -> MailboxPath.forUser(USER, "a\r\n [ALERT] 
that's bad").assertAcceptable('.'))
-            .isInstanceOf(MailboxNameException.class);
+        assertThatThrownBy(() -> MailboxPath.forUser(USER, "a\r\n [ALERT] 
that's bad").assertAcceptable(folderDelimiter()))
+                .isInstanceOf(MailboxNameException.class);
     }
 
     @Test
     void childShouldThrowWhenBlank() {
         MailboxPath path = MailboxPath.forUser(USER, "folder");
-        assertThatThrownBy(() -> path.child(" ", '.'))
-            .isInstanceOf(IllegalArgumentException.class);
+        assertThatThrownBy(() -> path.child(" ", folderDelimiter()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     void childShouldThrowWhenContainsDelimiter() {
         MailboxPath path = MailboxPath.forUser(USER, "folder");
-        assertThatThrownBy(() -> path.child("a.b", '.'))
-            .isInstanceOf(IllegalArgumentException.class);
+        assertThatThrownBy(() -> 
path.child(adjustToActiveFolderDelimiter("a.b"), folderDelimiter()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     void getHierarchyLevelsShouldReturnPathWhenOneLevel() {
         assertThat(MailboxPath.forUser(USER, "inbox")
-            .getHierarchyLevels('.'))
-            .containsExactly(
-                MailboxPath.forUser(USER, "inbox"));
+                .getHierarchyLevels(folderDelimiter()))
+                .containsExactly(
+                        MailboxPath.forUser(USER, "inbox"));
     }
 
     @Test
     void getHierarchyLevelsShouldReturnPathWhenEmptyName() {
         assertThat(MailboxPath.forUser(USER, "")
-            .getHierarchyLevels('.'))
-            .containsExactly(
-                MailboxPath.forUser(USER, ""));
+                .getHierarchyLevels(folderDelimiter()))
+                .containsExactly(
+                        MailboxPath.forUser(USER, ""));
     }
 
     @Test
     void getHierarchyLevelsShouldReturnPathWhenBlankName() {
         assertThat(MailboxPath.forUser(USER, "  ")
-            .getHierarchyLevels('.'))
-            .containsExactly(
-                MailboxPath.forUser(USER, "  "));
+                .getHierarchyLevels(folderDelimiter()))
+                .containsExactly(
+                        MailboxPath.forUser(USER, "  "));
     }
 
     @Test
     void getHierarchyLevelsShouldReturnPathWhenNullName() {
         assertThat(MailboxPath.forUser(USER, null)
-            .getHierarchyLevels('.'))
-            .containsExactly(
-                MailboxPath.forUser(USER, null));
+                .getHierarchyLevels(folderDelimiter()))
+                .containsExactly(
+                        MailboxPath.forUser(USER, null));
     }
 
     @Test
     void sanitizeShouldNotThrowOnNullMailboxName() {
         assertThat(MailboxPath.forUser(USER, null)
-            .sanitize('.'))
-            .isEqualTo(
-                MailboxPath.forUser(USER, null));
+                .sanitize(folderDelimiter()))
+                .isEqualTo(
+                        MailboxPath.forUser(USER, null));
     }
 
     @Test
     void sanitizeShouldReturnEmptyWhenEmpty() {
         assertThat(MailboxPath.forUser(USER, "")
-            .sanitize('.'))
-            .isEqualTo(
-                MailboxPath.forUser(USER, ""));
+                .sanitize(folderDelimiter()))
+                .isEqualTo(
+                        MailboxPath.forUser(USER, ""));
     }
 
     @Test
     void sanitizeShouldRemoveMaximumOneTrailingDelimiterWhenAlone() {
-        assertThat(MailboxPath.forUser(USER, ".")
-            .sanitize('.'))
-            .isEqualTo(
-                MailboxPath.forUser(USER, ""));
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("."))
+                .sanitize(folderDelimiter()))
+                .isEqualTo(
+                        MailboxPath.forUser(USER, ""));
     }
 
     @Test
     void sanitizeShouldPreserveHeadingDelimiter() {
-        assertThat(MailboxPath.forUser(USER, ".a")
-            .sanitize('.'))
-            .isEqualTo(
-                MailboxPath.forUser(USER, ".a"));
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter(".a"))
+                .sanitize(folderDelimiter()))
+                .isEqualTo(
+                        MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter(".a")));
     }
 
     @Test
     void sanitizeShouldRemoveTrailingDelimiter() {
-        assertThat(MailboxPath.forUser(USER, "a.")
-            .sanitize('.'))
-            .isEqualTo(
-                MailboxPath.forUser(USER, "a"));
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a."))
+                .sanitize(folderDelimiter()))
+                .isEqualTo(
+                        MailboxPath.forUser(USER, "a"));
     }
 
     @Test
     void sanitizeShouldRemoveMaximumOneTrailingDelimiter() {
-        assertThat(MailboxPath.forUser(USER, "a..")
-            .sanitize('.'))
-            .isEqualTo(
-                MailboxPath.forUser(USER, "a."));
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a.."))
+                .sanitize(folderDelimiter()))
+                .isEqualTo(
+                        MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a.")));
     }
 
     @Test
     void sanitizeShouldPreserveRedundantDelimiters() {
-        assertThat(MailboxPath.forUser(USER, "a..a")
-            .sanitize('.'))
-            .isEqualTo(
-                MailboxPath.forUser(USER, "a..a"));
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a..a"))
+                .sanitize(folderDelimiter()))
+                .isEqualTo(
+                        MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a..a")));
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeFalseIfSingleLevelPath() {
         assertThat(MailboxPath.forUser(USER, "a")
-            .hasEmptyNameInHierarchy('.'))
-            .isFalse();
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isFalse();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeFalseIfNestedLevelWithNonEmptyNames() {
-        assertThat(MailboxPath.forUser(USER, "a.b.c")
-            .hasEmptyNameInHierarchy('.'))
-            .isFalse();
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a.b.c"))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isFalse();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfEmptyPath() {
         assertThat(MailboxPath.forUser(USER, "")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfBlankPath() {
         assertThat(MailboxPath.forUser(USER, " ")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfPathWithTwoEmptyNames() {
-        assertThat(MailboxPath.forUser(USER, ".")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("."))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void 
hasEmptyNameInHierarchyShouldBeTrueIfPathWithAnEmptyNameBetweenTwoNames() {
-        assertThat(MailboxPath.forUser(USER, "a..b")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a..b"))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void 
hasEmptyNameInHierarchyShouldBeTrueIfPathWithABlankNameBetweenTwoNames() {
-        assertThat(MailboxPath.forUser(USER, "a.   .b")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, adjustToActiveFolderDelimiter("a. 
  .b"))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfPathWithHeadingEmptyNames() {
-        assertThat(MailboxPath.forUser(USER, "..a")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("..a"))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfPathWithHeadingBlankName() {
-        assertThat(MailboxPath.forUser(USER, "  .a")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, adjustToActiveFolderDelimiter("  
.a"))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfPathWithATrailingEmptyName() {
-        assertThat(MailboxPath.forUser(USER, "a.")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a."))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfPathWithATrailingBlankName() {
-        assertThat(MailboxPath.forUser(USER, "a.  ")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, adjustToActiveFolderDelimiter("a. 
 "))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfPathWithTrailingEmptyNames() {
-        assertThat(MailboxPath.forUser(USER, "a..")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a.."))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void hasEmptyNameInHierarchyShouldBeTrueIfPathWithTrailingBlankNames() {
-        assertThat(MailboxPath.forUser(USER, "a. .  ")
-            .hasEmptyNameInHierarchy('.'))
-            .isTrue();
+        assertThat(MailboxPath.forUser(USER, adjustToActiveFolderDelimiter("a. 
.  "))
+                .hasEmptyNameInHierarchy(folderDelimiter()))
+                .isTrue();
     }
 
     @Test
     void assertAcceptableShouldThrowOnDoubleSeparator() {
-        assertThatThrownBy(() -> MailboxPath.forUser(USER, "a..b")
-            .assertAcceptable('.'))
-            .isInstanceOf(HasEmptyMailboxNameInHierarchyException.class);
+        assertThatThrownBy(() -> MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("a..b"))
+                .assertAcceptable(folderDelimiter()))
+                .isInstanceOf(HasEmptyMailboxNameInHierarchyException.class);
     }
 
     @Test
     void assertAcceptableShouldThrowWhenStartsWithSharp() {
         assertThatThrownBy(() -> MailboxPath.forUser(USER, "#ab")
-            .assertAcceptable('.'))
-            .isInstanceOf(MailboxNameException.class);
+                .assertAcceptable(folderDelimiter()))
+                .isInstanceOf(MailboxNameException.class);
     }
 
     @Test
     void assertAcceptableShouldNotThrowWhenSharpInTheMiddle() {
         assertThatCode(() -> MailboxPath.forUser(USER, "mailbox #17")
-            .assertAcceptable('.'))
-            .doesNotThrowAnyException();
+                .assertAcceptable(folderDelimiter()))
+                .doesNotThrowAnyException();
     }
 
     @Test
     void assertAcceptableShouldThrowOnPercent() {
         assertThatThrownBy(() -> MailboxPath.forUser(USER, "a%b")
-            .assertAcceptable('.'))
-            .isInstanceOf(MailboxNameException.class);
-    }
-
-    @Test
-    void assertAcceptableShouldNotThrowOnPercentWhenRelaxMode() {
-        System.setProperty("james.relaxed.mailbox.name.validation", "true");
-
-        assertThatCode(() -> MailboxPath.forUser(USER, "a%b"))
-            .doesNotThrowAnyException();
+                .assertAcceptable(folderDelimiter()))
+                .isInstanceOf(MailboxNameException.class);
     }
 
     @Test
     void assertAcceptableShouldThrowOnWildcard() {
         assertThatThrownBy(() -> MailboxPath.forUser(USER, "a*b")
-            .assertAcceptable('.'))
-            .isInstanceOf(MailboxNameException.class);
-    }
-
-    @Test
-    void assertAcceptableShouldNotThrowOnWildcardWhenRelaxMode() {
-        System.setProperty("james.relaxed.mailbox.name.validation", "true");
-
-        assertThatCode(() -> MailboxPath.forUser(USER, "a*b"))
-            .doesNotThrowAnyException();
+                .assertAcceptable(folderDelimiter()))
+                .isInstanceOf(MailboxNameException.class);
+    }
+
+    @Nested
+    class WithMailboxNameValidationRelaxed {
+        @BeforeEach
+        void setUp() {
+            MailboxPath.RELAX_MAILBOX_NAME_VALIDATION = true;
+            MailboxPath.INVALID_CHARS = MailboxPath.evaluateInvalidChars();
+            MailboxPath.INVALID_CHARS_MATCHER = 
CharMatcher.anyOf(MailboxPath.INVALID_CHARS);
+        }
+
+        @AfterEach
+        void tearDown() {
+            MailboxPath.RELAX_MAILBOX_NAME_VALIDATION = false;
+            MailboxPath.INVALID_CHARS = MailboxPath.evaluateInvalidChars();
+            MailboxPath.INVALID_CHARS_MATCHER = 
CharMatcher.anyOf(MailboxPath.INVALID_CHARS);
+        }
+
+        @Test
+        void assertAcceptableShouldNotThrowOnPercentWhenRelaxMode() {
+            assertThatCode(() -> MailboxPath.forUser(USER, "a%b")
+                    .assertAcceptable(folderDelimiter()))
+                    .doesNotThrowAnyException();
+        }
+
+        @Test
+        void assertAcceptableShouldNotThrowOnWildcardWhenRelaxMode() {
+            assertThatCode(() -> MailboxPath.forUser(USER, "a*b")
+                    .assertAcceptable(folderDelimiter()))
+                    .doesNotThrowAnyException();
+        }
     }
 
     @Test
     void assertAcceptableShouldThrowOnTooLongMailboxName() {
         assertThatThrownBy(() -> MailboxPath.forUser(USER, Strings.repeat("a", 
201))
-            .assertAcceptable('.'))
-            .isInstanceOf(TooLongMailboxNameException.class);
+                .assertAcceptable(folderDelimiter()))
+                .isInstanceOf(TooLongMailboxNameException.class);
     }
 
     @Test
     void assertAcceptableShouldNotThrowOnNotTooLongMailboxName() {
         assertThatCode(() -> MailboxPath.forUser(USER, Strings.repeat("a", 
200))
-            .assertAcceptable('.'))
-            .doesNotThrowAnyException();
+                .assertAcceptable(folderDelimiter()))
+                .doesNotThrowAnyException();
     }
 
     @Test
@@ -430,27 +466,30 @@ class MailboxPathTest {
 
     @Test
     void hasParentShouldReturnTrueWhenMailboxHasParent() {
-        MailboxPath mailboxPath = MailboxPath.forUser(USER, 
"inbox.folder.subfolder");
-        assertThat(mailboxPath.hasParent('.')).isTrue();
+        MailboxPath mailboxPath = MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder.subfolder"));
+        assertThat(mailboxPath.hasParent(folderDelimiter())).isTrue();
     }
 
     @Test
     void hasParentShouldReturnFalseWhenNoParent() {
         MailboxPath mailboxPath = MailboxPath.forUser(USER, "inbox");
-        assertThat(mailboxPath.hasParent('.')).isFalse();
+        assertThat(mailboxPath.hasParent(folderDelimiter())).isFalse();
     }
 
     @Test
     void getParentShouldReturnParents() {
-        MailboxPath mailboxPath = MailboxPath.forUser(USER, 
"inbox.folder.subfolder");
-        assertThat(mailboxPath.getParents('.'))
-            .containsExactly(MailboxPath.forUser(USER, "inbox"), 
MailboxPath.forUser(USER, "inbox.folder"));
+        MailboxPath mailboxPath = MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder.subfolder"));
+        assertThat(mailboxPath.getParents(folderDelimiter()))
+                .containsExactly(
+                        MailboxPath.forUser(USER, "inbox"),
+                        MailboxPath.forUser(USER, 
adjustToActiveFolderDelimiter("inbox.folder")));
     }
 
     @Test
     void getParentShouldReturnEmptyWhenTopLevelMailbox() {
         MailboxPath mailboxPath = MailboxPath.forUser(USER, "inbox");
-        assertThat(mailboxPath.getParents('.'))
-            .isEmpty();
+        assertThat(mailboxPath.getParents(folderDelimiter()))
+                .isEmpty();
+    }
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to