craigmcc 01/04/25 13:30:45 Modified: catalina/src/share/org/apache/catalina/util ResourceSet.java tester/src/tester/org/apache/tester Resources06.java Log: Add a test to ensure that the Set returned by ServletContext.getResourcePaths() is immutable -- which it wasn't, so fix that too. Revision Changes Path 1.2 +57 -3 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ResourceSet.java Index: ResourceSet.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ResourceSet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ResourceSet.java 2000/10/21 13:25:33 1.1 +++ ResourceSet.java 2001/04/25 20:30:37 1.2 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ResourceSet.java,v 1.1 2000/10/21 13:25:33 craigmcc Exp $ - * $Revision: 1.1 $ - * $Date: 2000/10/21 13:25:33 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ResourceSet.java,v 1.2 2001/04/25 20:30:37 craigmcc Exp $ + * $Revision: 1.2 $ + * $Date: 2001/04/25 20:30:37 $ * * ==================================================================== * @@ -78,7 +78,7 @@ * is not locked. * * @author Craig R. McClanahan - * @version $Revision: 1.1 $ $Date: 2000/10/21 13:25:33 $ + * @version $Revision: 1.2 $ $Date: 2001/04/25 20:30:37 $ */ public final class ResourceSet extends HashSet { @@ -173,6 +173,60 @@ */ private static final StringManager sm = StringManager.getManager("org.apache.catalina.util"); + + + // --------------------------------------------------------- Public Methods + + + /** + * Add the specified element to this set if it is not already present. + * Return <code>true</code> if the element was added. + * + * @param o The object to be added + * + * @exception IllegalStateException if this ResourceSet is locked + */ + public boolean add(Object o) { + + if (locked) + throw new IllegalStateException + (sm.getString("resourceSet.locked")); + return (super.add(o)); + + } + + + /** + * Remove all of the elements from this set. + * + * @exception IllegalStateException if this ResourceSet is locked + */ + public void clear() { + + if (locked) + throw new IllegalStateException + (sm.getString("resourceSet.locked")); + super.clear(); + + } + + + /** + * Remove the given element from this set if it is present. + * Return <code>true</code> if the element was removed. + * + * @param o The object to be removed + * + * @exception IllegalStateException if this ResourceSet is locked + */ + public boolean remove(Object o) { + + if (locked) + throw new IllegalStateException + (sm.getString("resourceSet.locked")); + return (super.remove(o)); + + } } 1.2 +31 -1 jakarta-tomcat-4.0/tester/src/tester/org/apache/tester/Resources06.java Index: Resources06.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/tester/src/tester/org/apache/tester/Resources06.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Resources06.java 2001/04/25 03:12:03 1.1 +++ Resources06.java 2001/04/25 20:30:42 1.2 @@ -73,7 +73,7 @@ * found in order to pass. * * @author Craig R. McClanahan - * @version $Revision: 1.1 $ $Date: 2001/04/25 03:12:03 $ + * @version $Revision: 1.2 $ $Date: 2001/04/25 20:30:42 $ */ public class Resources06 extends HttpServlet { @@ -125,6 +125,7 @@ // Request the set of resources in the specified path StaticLogger.write("Processing path '" + path + "'"); + String first = null; Set set = getServletContext().getResourcePaths(path); if (set == null) { sb.append(" No resources returned/"); @@ -135,6 +136,8 @@ Iterator resources = set.iterator(); while (resources.hasNext()) { String resource = (String) resources.next(); + if (first == null) + first = resource; StaticLogger.write("Found resource '" + resource + "'"); for (int i = 0; i < paths.length; i++) { if (paths[i].equals(resource)) { @@ -158,6 +161,33 @@ sb.append(" times/"); } } + + // Verify that the returned set is immutable + try { + String newElement = "NEW FOO"; + set.add(newElement); + if (set.contains(newElement)) + sb.append(" Set allowed add()/"); + } catch (Throwable t) { + ; + } + try { + if (first != null) { + set.remove(first); + if (!set.contains(first)) + sb.append(" Set allowed remove()/"); + } + } catch (Throwable t) { + ; + } + try { + set.clear(); + if (set.size() == 0) + sb.append(" Set allowed clear()/"); + } catch (Throwable t) { + ; + } + // Report any failures we have encountered if (sb.length() > 0) {