public Enumerator createChannelEnumerator() {
        return fileChannelManager.createChannelEnumerator();
    }
@Test
    void channelEnumerator(@TempDir File tempPath) throws Exception {
        String[] tempDirs =
                new String[] {
                    new File(tempPath, "a").getAbsolutePath(),
                    new File(tempPath, "b").getAbsolutePath(),
                    new File(tempPath, "c").getAbsolutePath(),
                    new File(tempPath, "d").getAbsolutePath(),
                    new File(tempPath, "e").getAbsolutePath(),
                };

        int[] counters = new int[tempDirs.length];
        try (IOManager ioMan = new TestIOManager(tempDirs)) {
            FileIOChannel.Enumerator enumerator = ioMan.createChannelEnumerator();

            for (int i = 0; i < 3 * tempDirs.length; i++) {
                FileIOChannel.ID id = enumerator.next();

                File pathFile = id.getPathFile();
                Files.createFile(pathFile.toPath());

                assertThat(pathFile)
                        .withFailMessage("Channel IDs must name an absolute path.")
                        .isAbsolute();
                assertThat(pathFile)
                        .withFailMessage("Channel IDs must name a file, not a directory.")
                        .isFile();

                assertThat(pathFile.getParentFile().getParentFile().getParentFile())
                        .withFailMessage("Path is not in the temp directory.")
                        .isEqualTo(tempPath);

                for (int k = 0; k < tempDirs.length; k++) {
                    if (pathFile.getParentFile().getParent().equals(tempDirs[k])) {
                        counters[k]++;
                    }
                }
            }

            for (int k = 0; k < tempDirs.length; k++) {
                assertThat(counters[k]).isEqualTo(3);
            }
        }
    }