// Path: lib-core/src/main/java/com/kdgregory/pathfinder/core/impl/PathRepoImpl.java
// public class PathRepoImpl
// implements PathRepo
// {
//     private SortedMap<String,SortedMap<HttpMethod,Destination>> urlMap
//             = new TreeMap<String,SortedMap<HttpMethod,Destination>>();
// 
// 
// //----------------------------------------------------------------------------
// //  PathRepo
// //----------------------------------------------------------------------------
// 
//     @Override
//     public void put(String url, Destination dest)
//     {
//         getOrCreateDestMap(url).clear();
//         put(url, HttpMethod.ALL, dest);
//     }
// 
// 
//     @Override
//     public void put(String url, HttpMethod method, Destination dest)
//     {
//         SortedMap<HttpMethod,Destination> destMap = getOrCreateDestMap(url);
//         destMap.put(method, dest);
//     }
// 
// 
//     @Override
//     public void put(String url, Map<HttpMethod,Destination> destMap)
//     {
//         SortedMap<HttpMethod,Destination> internal = getOrCreateDestMap(url);
//         internal.clear();
//         internal.putAll(destMap);
//     }
// 
// 
//     @Override
//     public Destination get(String url, HttpMethod method)
//     {
//         SortedMap<HttpMethod,Destination> destMap = getOrCreateDestMap(url);
//         Destination dest = destMap.get(method);
//         if (dest != null)
//             return dest;
// 
//         return destMap.get(HttpMethod.ALL);
//     }
// 
// 
//     @Override
//     public Map<HttpMethod,Destination> get(String url)
//     {
//         return Collections.unmodifiableMap(getOrCreateDestMap(url));
//     }
// 
// 
//     @Override
//     public void remove(String url, HttpMethod method)
//     {
//         Map<HttpMethod,Destination> destMap = urlMap.get(url);
//         if (destMap == null)
//             return;
// 
//         if (method.equals(HttpMethod.ALL))
//         {
//             destMap.clear();
//             return;
//         }
// 
//         if (destMap.containsKey(HttpMethod.ALL))
//         {
//             Destination dest = destMap.remove(HttpMethod.ALL);
//             destMap.put(HttpMethod.GET, dest);
//             destMap.put(HttpMethod.POST, dest);
//             destMap.put(HttpMethod.PUT, dest);
//             destMap.put(HttpMethod.DELETE, dest);
//         }
// 
//         destMap.remove(method);
//     }
// 
// 
//     @Override
//     public Iterator<String> iterator()
//     {
//         List<String> urls = new ArrayList<String>(urlMap.size());
//         for (Map.Entry<String,SortedMap<HttpMethod,Destination>> entry : urlMap.entrySet())
//         {
//             if (entry.getValue().size() > 0)
//                 urls.add(entry.getKey());
//         }
//         return urls.iterator();
//     }
// 
// 
//     @Override
//     public int urlCount()
//     {
//         int count = 0;
//         for (Map.Entry<String,SortedMap<HttpMethod,Destination>> entry : urlMap.entrySet())
//         {
//             count += (entry.getValue().size() > 0) ? 1 : 0;
//         }
// 
//         return count;
//     }
// 
// 
// //----------------------------------------------------------------------------
// //  Otheer Public Methods
// //----------------------------------------------------------------------------
// 
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder(64 * urlMap.size());
//         sb.append("[");
//         for (String url : urlMap.keySet())
//         {
//             if (sb.length() > 1)
//                 sb.append(",");
//             sb.append(url);
//         }
//         sb.append("]");
//         return sb.toString();
//     }
// 
// 
// //----------------------------------------------------------------------------
// //  Private methods
// //----------------------------------------------------------------------------
// 
//     private SortedMap<HttpMethod,Destination> getOrCreateDestMap(String url)
//     {
//         SortedMap<HttpMethod,Destination> destMap = urlMap.get(url);
//         if (destMap == null)
//         {
//             destMap = new TreeMap<HttpMethod,Destination>();
//             urlMap.put(url, destMap);
//         }
//         return destMap;
//     }
// }


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.*;
import com.kdgregory.pathfinder.core.impl.PathRepoImpl;
        {
            throw new IllegalStateException("we shouldn't be testing output");
        }

        @Override
        public String toString(Map<InvocationOptions,Boolean> options)
        {
            throw new IllegalStateException("we shouldn't be testing output");
        }
    }


//----------------------------------------------------------------------------
//  TestCases
//----------------------------------------------------------------------------

    @Test
    public void testMethodStrings() throws Exception
    {
        assertEquals("ALL", "",          HttpMethod.ALL.toString());
        assertEquals("GET", "GET",       HttpMethod.GET.toString());
        assertEquals("POST", "POST",     HttpMethod.POST.toString());
        assertEquals("PUT", "PUT",       HttpMethod.PUT.toString());
        assertEquals("DELETE", "DELETE", HttpMethod.DELETE.toString());
    }


    @Test
    public void testPutAndGetWithExplicitMethod() throws Exception
    {
// Path: lib-core/src/main/java/com/kdgregory/pathfinder/core/impl/PathRepoImpl.java
// public class PathRepoImpl
// implements PathRepo
// {
//     private SortedMap<String,SortedMap<HttpMethod,Destination>> urlMap
//             = new TreeMap<String,SortedMap<HttpMethod,Destination>>();
// 
// 
// //----------------------------------------------------------------------------
// //  PathRepo
// //----------------------------------------------------------------------------
// 
//     @Override
//     public void put(String url, Destination dest)
//     {
//         getOrCreateDestMap(url).clear();
//         put(url, HttpMethod.ALL, dest);
//     }
// 
// 
//     @Override
//     public void put(String url, HttpMethod method, Destination dest)
//     {
//         SortedMap<HttpMethod,Destination> destMap = getOrCreateDestMap(url);
//         destMap.put(method, dest);
//     }
// 
// 
//     @Override
//     public void put(String url, Map<HttpMethod,Destination> destMap)
//     {
//         SortedMap<HttpMethod,Destination> internal = getOrCreateDestMap(url);
//         internal.clear();
//         internal.putAll(destMap);
//     }
// 
// 
//     @Override
//     public Destination get(String url, HttpMethod method)
//     {
//         SortedMap<HttpMethod,Destination> destMap = getOrCreateDestMap(url);
//         Destination dest = destMap.get(method);
//         if (dest != null)
//             return dest;
// 
//         return destMap.get(HttpMethod.ALL);
//     }
// 
// 
//     @Override
//     public Map<HttpMethod,Destination> get(String url)
//     {
//         return Collections.unmodifiableMap(getOrCreateDestMap(url));
//     }
// 
// 
//     @Override
//     public void remove(String url, HttpMethod method)
//     {
//         Map<HttpMethod,Destination> destMap = urlMap.get(url);
//         if (destMap == null)
//             return;
// 
//         if (method.equals(HttpMethod.ALL))
//         {
//             destMap.clear();
//             return;
//         }
// 
//         if (destMap.containsKey(HttpMethod.ALL))
//         {
//             Destination dest = destMap.remove(HttpMethod.ALL);
//             destMap.put(HttpMethod.GET, dest);
//             destMap.put(HttpMethod.POST, dest);
//             destMap.put(HttpMethod.PUT, dest);
//             destMap.put(HttpMethod.DELETE, dest);
//         }
// 
//         destMap.remove(method);
//     }
// 
// 
//     @Override
//     public Iterator<String> iterator()
//     {
//         List<String> urls = new ArrayList<String>(urlMap.size());
//         for (Map.Entry<String,SortedMap<HttpMethod,Destination>> entry : urlMap.entrySet())
//         {
//             if (entry.getValue().size() > 0)
//                 urls.add(entry.getKey());
//         }
//         return urls.iterator();
//     }
// 
// 
//     @Override
//     public int urlCount()
//     {
//         int count = 0;
//         for (Map.Entry<String,SortedMap<HttpMethod,Destination>> entry : urlMap.entrySet())
//         {
//             count += (entry.getValue().size() > 0) ? 1 : 0;
//         }
// 
//         return count;
//     }
// 
// 
// //----------------------------------------------------------------------------
// //  Otheer Public Methods
// //----------------------------------------------------------------------------
// 
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder(64 * urlMap.size());
//         sb.append("[");
//         for (String url : urlMap.keySet())
//         {
//             if (sb.length() > 1)
//                 sb.append(",");
//             sb.append(url);
//         }
//         sb.append("]");
//         return sb.toString();
//     }
// 
// 
// //----------------------------------------------------------------------------
// //  Private methods
// //----------------------------------------------------------------------------
// 
//     private SortedMap<HttpMethod,Destination> getOrCreateDestMap(String url)
//     {
//         SortedMap<HttpMethod,Destination> destMap = urlMap.get(url);
//         if (destMap == null)
//         {
//             destMap = new TreeMap<HttpMethod,Destination>();
//             urlMap.put(url, destMap);
//         }
//         return destMap;
//     }
// }


// Path: lib-core/src/test/java/com/kdgregory/pathfinder/core/TestPathRepo.java
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.*;
import com.kdgregory.pathfinder.core.impl.PathRepoImpl;

        {
            throw new IllegalStateException("we shouldn't be testing output");
        }

        @Override
        public String toString(Map<InvocationOptions,Boolean> options)
        {
            throw new IllegalStateException("we shouldn't be testing output");
        }
    }


//----------------------------------------------------------------------------
//  TestCases
//----------------------------------------------------------------------------

    @Test
    public void testMethodStrings() throws Exception
    {
        assertEquals("ALL", "",          HttpMethod.ALL.toString());
        assertEquals("GET", "GET",       HttpMethod.GET.toString());
        assertEquals("POST", "POST",     HttpMethod.POST.toString());
        assertEquals("PUT", "PUT",       HttpMethod.PUT.toString());
        assertEquals("DELETE", "DELETE", HttpMethod.DELETE.toString());
    }


    @Test
    public void testPutAndGetWithExplicitMethod() throws Exception
    {
        PathRepoImpl repo = new PathRepoImpl();