anchor.diff:    Path() {
     }
   
  +  /**
  +   * Create a new instance from a String that represents a URI.
  +   */
     Path.fromString(String path) {
  -    for (String part in path.split("/")) {
  -      if (part != null && !part.isEmpty) parts.add(part);
  +    if (path != null) {
  +      for (String part in path.split("/")) {
  +        if (part != null && !part.isEmpty) parts.add(part);
  +      }
       }
     }
   
  +  /**
  +   * Create a child path from this one.
  +   */
     Path subPath({int start, int end}) {
       Path result = null;
   
       if (start != null) {
  -      if(parts.getRange(start, end).length > 0){
  +      if (parts.getRange(start, end).length > 0) {
           result = new Path();
           parts.getRange(start, end).forEach((String p) => result.parts.add(p));
         }
  
positive.code:     return result;
    }
  
    int get length {
      return parts.length;
    }
  
    String getPathParams(String url) {
  
    }
  
    bool hasPathParam() {
      bool result = false;
  
      for (var i = 0;i < parts.length; i++) {
        if (parts[i].indexOf(":") > 0) {
          result = true;
          break;
        }
      }
  
      return result;
    }
  
    Path join(Path path) {
      Path result = new Path();
      parts.forEach((p) => result.parts.add(p));
      path.parts.forEach((p) => result.parts.add(p));
  
negative.code: library darter.http.path;
  
  /**
   * Its main goals is to turn it easy to:
   * 1. compare whether two paths are equal or not.
   *  2. get subpaths from paths.
   *  3. efficiently handle path parts.
   */
  class Path {
    List<String> parts = [];
  