anchor.diff:                     format('via', <<"SIP/2.0/UDP 127.0.0.1:15060;param=value;flag">>)),
        ?_assertEqual(<<"SIP/2.0/UDP pc33.atlanta.com;extra=\"Hello world\"">>,
                      format('via', [via(udp, {"pc33.atlanta.com", undefined}, [{extra, <<"Hello world">>}])])),
  -     ?_assertEqual(via(udp, {"pc33.atlanta.com", undefined}, [{ttl, 3}, {maddr, {224, 0, 0, 1}}, {received, {127, 0, 0, 1}}, {branch, <<"z9hG4bK776asdhds">>}]),
  +     ?_assertEqual([via(udp, {"pc33.atlanta.com", undefined}, [{ttl, 3}, {maddr, {224, 0, 0, 1}}, {received, {127, 0, 0, 1}}, {branch, <<"z9hG4bK776asdhds">>}])],
                      parse('via', <<"SIP/2.0/UDP pc33.atlanta.com;ttl=3;maddr=224.0.0.1;received=127.0.0.1;branch=z9hG4bK776asdhds">>)),
  -     ?_assertEqual(via(udp, {"pc33.atlanta.com", undefined}, [{ttl, 3}, {maddr, "sip.mcast.net"}, {received, {127, 0, 0, 1}}, {branch, <<"z9hG4bK776asdhds">>}]),
  +     ?_assertEqual([via(udp, {"pc33.atlanta.com", undefined}, [{ttl, 3}, {maddr, "sip.mcast.net"}, {received, {127, 0, 0, 1}}, {branch, <<"z9hG4bK776asdhds">>}])],
                      parse('via', <<"SIP/2.0/UDP pc33.atlanta.com;ttl=3;maddr=sip.mcast.net;received=127.0.0.1;branch=z9hG4bK776asdhds">>)),
   
        % Allow
  
positive.code: %% Allow   = "Allow" HCOLON [Method *(COMMA Method)]
  %% Require = "Require" HCOLON option-tag *(COMMA option-tag)
  parse(Name, Bin) when
    Name =:= 'allow'; Name =:= 'require' ->
      Normalize = if Name =:= 'allow' -> fun sip_binary:to_upper/1;
                     true -> fun sip_binary:to_lower/1
                  end,
      {MethodBin, Bin2} = sip_binary:parse_token(Bin),
      Method = sip_binary:binary_to_existing_atom(Normalize(MethodBin)),
      case Bin2 of
          <<?COMMA, Bin3/binary>> ->
              % Parse the rest of the Allow
              % *(COMMA Method)
              [Method | parse('allow', Bin3)];
  
          <<>> -> [Method]
      end;
  
negative.code:                    parse('allow', <<"INVITE, ACK, CANCEL, OPTIONS, BYE">>)),
       ?_assertEqual(<<"INVITE, ACK, CANCEL, OPTIONS, BYE">>,
                     format('allow', ['INVITE', 'ACK', 'CANCEL', 'OPTIONS', 'BYE'])),
  
       % Require, Proxy-Require, Supported, Unsupported
       ?_assertEqual([foo, bar], parse('require', <<"foo, bar">>)),
       ?_assertEqual(<<"foo, bar">>, format('require', [foo, bar])),
  
       ?_assertEqual([foo, bar], parse('proxy-require', <<"foo, bar">>)),
       ?_assertEqual(<<"foo, bar">>, format('proxy-require', [foo, bar])),
  
       ?_assertEqual([foo, bar], parse('supported', <<"foo, bar">>)),
       ?_assertEqual(<<"foo, bar">>, format('supported', [foo, bar])),
  
       ?_assertEqual([foo, bar], parse('unsupported', <<"foo, bar">>)),
       ?_assertEqual(<<"foo, bar">>, format('unsupported', [foo, bar])),
  
       % Subject (FIXME: implement proper tests)
       ?_assertEqual(<<"I know you're there, pick up the phone and talk to me!">>,
  