anchor.diff:                  {start_tag,<<"div">>,[{<<"class">>,<<"c">>}],false},
                   {end_tag,<<"div">>},
                   {end_tag,<<"div">>}],
  -    {<<"html">>, [],
  -     [{<<"head">>, [], []},
  -      {<<"body">>, [],
  -       [{<<"div">>, [{<<"class">>, <<"a">>}], [{<<"a">>, [{<<"name">>, <<"#anchor">>}], []}]},
  -        {<<"div">>, [{<<"class">>, <<"b">>}], [{<<"div">>, [{<<"class">>, <<"c">>}], []}]}
  -       ]}]} = parse_tokens(D4),
  +    ?assertEqual(
  +       {<<"html">>, [],
  +        [{<<"head">>, [], []},
  +         {<<"body">>, [],
  +          [{<<"div">>, [{<<"class">>, <<"a">>}], [{<<"a">>, [{<<"name">>, <<"#anchor">>}], []}]},
  +           {<<"div">>, [{<<"class">>, <<"b">>}], [{<<"div">>, [{<<"class">>, <<"c">>}], []}]}
  +          ]}]},
  +       parse_tokens(D4)),
       D5 = [{start_tag,<<"html">>,[],false},
             {data,<<"\n">>,true},
             {data,<<"boo">>,false},
             {data,<<"hoo">>,false},
             {data,<<"\n">>,true},
             {end_tag,<<"html">>}],
  -    {<<"html">>, [], [<<"\nboohoo\n">>]} = parse_tokens(D5),
  +    ?assertEqual(
  +       {<<"html">>, [], [<<"\nboohoo\n">>]},
  +       parse_tokens(D5)),
       D6 = [{start_tag,<<"html">>,[],false},
             {data,<<"\n">>,true},
             {data,<<"\n">>,true},
             {end_tag,<<"html">>}],
  -    {<<"html">>, [], []} = parse_tokens(D6),
  +    ?assertEqual(
  +       {<<"html">>, [], []},
  +       parse_tokens(D6)),
       D7 = [{start_tag,<<"html">>,[],false},
             {start_tag,<<"ul">>,[],false},
             {start_tag,<<"li">>,[],false},
  
positive.code: to_tokens(T={comment, _}) ->
      [T];
  to_tokens({Tag0, Acc}) ->
      to_tokens({Tag0, [], Acc});
  to_tokens({Tag0, Attrs, Acc}) ->
      Tag = to_tag(Tag0),
  
negative.code:  </head>
   <body id=\"home\" class=\"tundra\"><![CDATA[&lt;<this<!-- is -->CDATA>&gt;]]></body>
  </html>">>,
      ?assertEqual(
         {<<"html">>, [],
          [{<<"head">>, [],
            [{<<"meta">>,
              [{<<"http-equiv">>,<<"Content-Type">>},
               {<<"content">>,<<"text/html; charset=UTF-8">>}],
              []},
             {<<"title">>,[],[<<"Foo">>]},
             {<<"link">>,
              [{<<"rel">>,<<"stylesheet">>},
               {<<"type">>,<<"text/css">>},
               {<<"href">>,<<"/static/rel/dojo/resources/dojo.css">>},
               {<<"media">>,<<"screen">>}],
              []},
             {<<"link">>,
              [{<<"rel">>,<<"stylesheet">>},
               {<<"type">>,<<"text/css">>},
               {<<"href">>,<<"/static/foo.css">>},
               {<<"media">>,<<"screen">>}],
              []},
             {comment,<<"[if lt IE 7]>\n   <style type=\"text/css\">\n     .no_ie { display: none; }\n   </style>\n   <![endif]">>},
             {<<"link">>,
              [{<<"rel">>,<<"icon">>},
               {<<"href">>,<<"/static/images/favicon.ico">>},
               {<<"type">>,<<"image/x-icon">>}],
              []},
             {<<"link">>,
              [{<<"rel">>,<<"shortcut icon">>},
               {<<"href">>,<<"/static/images/favicon.ico">>},
               {<<"type">>,<<"image/x-icon">>}],
              []}]},
           {<<"body">>,
            [{<<"id">>,<<"home">>},
             {<<"class">>,<<"tundra">>}],
            [<<"&lt;<this<!-- is -->CDATA>&gt;">>]}]},
         parse(D0)),
      ok.
  
  tokens2_test() ->
      D0 = <<"<channel><title>from __future__ import *</title><link>http://bob.pythonmac.org</link><description>Bob's Rants</description></channel>">>,
      ?assertEqual(
         [{start_tag,<<"channel">>,[],false},
          {start_tag,<<"title">>,[],false},
          {data,<<"from __future__ import *">>,false},
          {end_tag,<<"title">>},
          {start_tag,<<"link">>,[],true},
          {data,<<"http://bob.pythonmac.org">>,false},
          {end_tag,<<"link">>},
          {start_tag,<<"description">>,[],false},
          {data,<<"Bob's Rants">>,false},
          {end_tag,<<"description">>},
          {end_tag,<<"channel">>}],
         tokens(D0)),
      ok.
  
  to_tokens_test() ->
      ?assertEqual(
         [{start_tag, <<"p">>, [{class, 1}], false},
          {end_tag, <<"p">>}],
         to_tokens({p, [{class, 1}], []})),
      ?assertEqual(
         [{start_tag, <<"p">>, [], false},
          {end_tag, <<"p">>}],
         to_tokens({p})),
      ?assertEqual(
         [{'=', <<"data">>}],
         to_tokens({'=', <<"data">>})),
      ?assertEqual(
         [{comment, <<"comment">>}],
         to_tokens({comment, <<"comment">>})),
      %% This is only allowed in sub-tags:
      %% {p, [{"class", "foo"}]} as {p, [{"class", "foo"}], []}
      %% On the outside it's always treated as follows:
      %% {p, [], [{"class", "foo"}]} as {p, [], [{"class", "foo"}]}
      ?assertEqual(
         [{start_tag, <<"html">>, [], false},
          {start_tag, <<"p">>, [{class, 1}], false},
          {end_tag, <<"p">>},
          {end_tag, <<"html">>}],
         to_tokens({html, [{p, [{class, 1}]}]})),
      ok.
  
  parse2_test() ->
      D0 = <<"<channel><title>from __future__ import *</title><link>http://bob.pythonmac.org<br>foo</link><description>Bob's Rants</description></channel>">>,
      ?assertEqual(
         {<<"channel">>,[],
          [{<<"title">>,[],[<<"from __future__ import *">>]},
           {<<"link">>,[],[
                           <<"http://bob.pythonmac.org">>,
                           {<<"br">>,[],[]},
                           <<"foo">>]},
           {<<"description">>,[],[<<"Bob's Rants">>]}]},
         parse(D0)),
      ok.
  
  parse_tokens_test() ->
      D0 = [{doctype,[<<"HTML">>,<<"PUBLIC">>,<<"-//W3C//DTD HTML 4.01 Transitional//EN">>]},
            {data,<<"\n">>,true},
            {start_tag,<<"html">>,[],false}],
      ?assertEqual(
         {<<"html">>, [], []},
         parse_tokens(D0)),
      D1 = D0 ++ [{end_tag, <<"html">>}],
      ?assertEqual(
         {<<"html">>, [], []},
         parse_tokens(D1)),
      D2 = D0 ++ [{start_tag, <<"body">>, [], false}],
      ?assertEqual(
         {<<"html">>, [], [{<<"body">>, [], []}]},
         parse_tokens(D2)),
      D3 = D0 ++ [{start_tag, <<"head">>, [], false},
                  {end_tag, <<"head">>},
                  {start_tag, <<"body">>, [], false}],
      ?assertEqual(
         {<<"html">>, [], [{<<"head">>, [], []}, {<<"body">>, [], []}]},
         parse_tokens(D3)),
      D4 = D3 ++ [{data,<<"\n">>,true},
                  {start_tag,<<"div">>,[{<<"class">>,<<"a">>}],false},
                  {start_tag,<<"a">>,[{<<"name">>,<<"#anchor">>}],false},
  