@SuppressWarnings("checkstyle:MethodLength")
    @Test
    void testListMethods() {
        FilterChain mock = createNiceMock(FilterChain.class);
        Filter filter = createNiceMock(Filter.class);

        NamedFilterList list = new SimpleNamedFilterList("test");
        list.add(filter);
        FilterChain chain = list.proxy(mock);
        assertNotNull(chain);
        assertNotSame(mock, chain);

        Filter singleFilter = new SslFilter();
        List<? extends Filter> multipleFilters = CollectionUtils.asList(new PortFilter(), new UserFilter());

        list.add(0, singleFilter);
        assertEquals(2, list.size());
        assertTrue(list.get(0) instanceof SslFilter);
        assertArrayEquals(new Object[]{singleFilter, filter}, list.toArray());

        list.addAll(multipleFilters);
        assertEquals(4, list.size());
        assertTrue(list.get(2) instanceof PortFilter);
        assertTrue(list.get(3) instanceof UserFilter);

        list.addAll(0, CollectionUtils.asList(new PermissionsAuthorizationFilter(), new RolesAuthorizationFilter()));
        assertEquals(6, list.size());
        assertTrue(list.get(0) instanceof PermissionsAuthorizationFilter);
        assertTrue(list.get(1) instanceof RolesAuthorizationFilter);
        assertEquals(2, list.indexOf(singleFilter));
        assertEquals(multipleFilters, list.subList(4, list.size()));

        assertTrue(list.contains(singleFilter));
        assertTrue(list.containsAll(multipleFilters));

        assertFalse(list.isEmpty());
        list.clear();
        assertTrue(list.isEmpty());

        list.add(singleFilter);
        Iterator i = list.iterator();
        assertTrue(i.hasNext());
        assertEquals(i.next(), singleFilter);

        ListIterator li = list.listIterator();
        assertTrue(li.hasNext());
        assertEquals(li.next(), singleFilter);

        li = list.listIterator(0);
        assertTrue(li.hasNext());
        assertEquals(li.next(), singleFilter);

        list.set(0, singleFilter);
        assertEquals(list.get(0), singleFilter);

        Filter[] filters = new Filter[list.size()];
        filters = list.toArray(filters);
        assertEquals(1, filters.length);
        assertEquals(filters[0], singleFilter);

        assertEquals(0, list.lastIndexOf(singleFilter));

        list.remove(singleFilter);
        assertTrue(list.isEmpty());

        list.add(singleFilter);
        list.remove(0);
        assertTrue(list.isEmpty());

        list.add(singleFilter);
        list.addAll(multipleFilters);
        assertEquals(3, list.size());
        list.removeAll(multipleFilters);
        assertEquals(1, list.size());
        assertEquals(list.get(0), singleFilter);

        list.addAll(multipleFilters);
        assertEquals(3, list.size());
        list.retainAll(multipleFilters);
        assertEquals(2, list.size());
        assertEquals(new ArrayList<>(list), multipleFilters);
    }
Exists mainly to increase code coverage as the SimpleNamedFilterList
implementation is a direct pass through.
web/src/test/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterListTest.java