anchor.diff:  char_to_lower($Y) -> $y;
   char_to_lower($Z) -> $z;
   char_to_lower(Ch) -> Ch.
  +
  +-spec char_to_upper(char()) -> char().
  +char_to_upper($a) -> $A;
  +char_to_upper($b) -> $B;
  +char_to_upper($c) -> $C;
  +char_to_upper($d) -> $D;
  +char_to_upper($e) -> $E;
  +char_to_upper($f) -> $F;
  +char_to_upper($g) -> $G;
  +char_to_upper($h) -> $H;
  +char_to_upper($i) -> $I;
  +char_to_upper($j) -> $J;
  +char_to_upper($k) -> $K;
  +char_to_upper($l) -> $L;
  +char_to_upper($m) -> $M;
  +char_to_upper($n) -> $N;
  +char_to_upper($o) -> $O;
  +char_to_upper($p) -> $P;
  +char_to_upper($q) -> $Q;
  +char_to_upper($r) -> $R;
  +char_to_upper($s) -> $S;
  +char_to_upper($t) -> $T;
  +char_to_upper($u) -> $U;
  +char_to_upper($v) -> $V;
  +char_to_upper($w) -> $W;
  +char_to_upper($x) -> $X;
  +char_to_upper($y) -> $Y;
  +char_to_upper($z) -> $Z;
  +char_to_upper(Ch) -> Ch.
  +
  +%% Tests.
  +
  +-ifdef(TEST).
  +
  +format_header_test_() ->
  +	%% {Header, Result}
  +	Tests = [
  +		{<<"Sec-Websocket-Version">>, <<"Sec-Websocket-Version">>},
  +		{<<"Sec-WebSocket-Version">>, <<"Sec-Websocket-Version">>},
  +		{<<"sec-websocket-version">>, <<"Sec-Websocket-Version">>},
  +		{<<"SEC-WEBSOCKET-VERSION">>, <<"Sec-Websocket-Version">>},
  +		%% These last tests ensures we're formatting headers exactly like OTP.
  +		%% Even though it's dumb, it's better for compatibility reasons.
  +		{<<"Sec-WebSocket--Version">>, <<"Sec-Websocket--version">>},
  +		{<<"Sec-WebSocket---Version">>, <<"Sec-Websocket---Version">>}
  +	],
  +	[{H, fun() -> R = format_header(H) end} || {H, R} <- Tests].
  +
  +-endif.
  
positive.code: version_to_connection({1, 1}) -> keepalive;
  version_to_connection(_Any) -> close.
  
  -spec connection_to_atom(binary()) -> keepalive | close.
  connection_to_atom(<<"keep-alive">>) ->
  	keepalive;
  
negative.code: -export([init/4, parse_request/1]). %% FSM.
  
  -include("include/http.hrl").
  -include_lib("eunit/include/eunit.hrl").
  
  -record(state, {
  	listener :: pid(),
  