anchor.diff:  %%%
   %%% * Url can be given either as a "url" parameter or as host/port/ssl/path
   %%%   Default host is 127.0.0.1 in run/1 but could be passed in run/2
  -%%%   as well. Including "host" in the input file will override the default.
  +%%%   as well. Request parameters overrides the ones in the request files.
   %%%
   %%% * Tags with special meaning in response files. Try not to overuse these:
   %%%    ">>_"   Match anything (i.e. no real validation, only check existence)
  
positive.code:   ResponseFiles = get_files(Dir, "response"),
    lists:zip(RequestFiles, ResponseFiles).
  
  run_scenario(S, DefaultHost, Params) ->
    run_scenario(S, DefaultHost, Params, []).
  
  run_scenario([], _DefaultHost, _Params, Acc)                    ->
    lists:reverse(Acc);
  run_scenario([{ReqFile, RespFile}|T], DefaultHost, Params, Acc) ->
    Request        = read_request(ReqFile, DefaultHost, Params),
    ExpResponse    = read_response(RespFile, Params),
    ActualResponse = make_request(Request),
    case Result = validate_response(ExpResponse, ActualResponse) of
      pass -> ok;
      _    -> print_debug(ReqFile, Request, ExpResponse, ActualResponse)
    end,
    run_scenario(T, DefaultHost, Params, [{ReqFile, Result} | Acc]).
  
  print_debug(ReqFile, Request, ExpResponse, ActualResponse) ->
    ct:pal("~p:~n~p~n~n"
  
negative.code:          "Actual response:~n~p~n",
           [ReqFile, Request, ExpResponse, ActualResponse]).
  
  read_request(RequestFile, Request, Params) ->
    Data    = parse_file(RequestFile, Params),
    Headers = lk("headers", Data),
    RawBody = read_body(RequestFile, Params),
    #request{ url      = lk(url, Request, lk("url", Data))
            , host     = lk(host, Request, lk("host", Data))
            , port     = lk(port, Request, lk("port", Data))
            , ssl      = lk(ssl, Request, lk("ssl", Data))
            , path     = lk(path, Request, lk("path", Data))
            , method   = lk(method, Request, lk("method", Data))
            , headers  = Headers
            , body     = maybe_parse_body(Headers, RawBody)
            , raw_body = RawBody
  