anchor.diff:   </head>
    <body id=\"home\" class=\"tundra\"><![CDATA[&lt;<this<!-- is -->CDATA>&gt;]]></body>
   </html>">>,
  -    Expect = {<<"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;">>]}]},
  -    Expect = parse(D0),
  +    ?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>">>,
  -    Expect = [{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">>}],
  -    Expect = tokens(D0),
  +    ?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>">>,
  -    Expect = {<<"channel">>,[],
  -              [{<<"title">>,[],[<<"from __future__ import *">>]},
  -               {<<"link">>,[],[
  -                               <<"http://bob.pythonmac.org">>,
  -                               {<<"br">>,[],[]},
  -                               <<"foo">>]},
  -               {<<"description">>,[],[<<"Bob's Rants">>]}]},
  -    Expect = parse(D0),
  +    ?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}],
  -    {<<"html">>, [], []} = parse_tokens(D0),
  +    ?assertEqual(
  +       {<<"html">>, [], []},
  +       parse_tokens(D0)),
       D1 = D0 ++ [{end_tag, <<"html">>}],
  -    {<<"html">>, [], []} = parse_tokens(D1),
  +    ?assertEqual(
  +       {<<"html">>, [], []},
  +       parse_tokens(D1)),
       D2 = D0 ++ [{start_tag, <<"body">>, [], false}],
  -    {<<"html">>, [], [{<<"body">>, [], []}]} = parse_tokens(D2),
  +    ?assertEqual(
  +       {<<"html">>, [], [{<<"body">>, [], []}]},
  +       parse_tokens(D2)),
       D3 = D0 ++ [{start_tag, <<"head">>, [], false},
                   {end_tag, <<"head">>},
                   {start_tag, <<"body">>, [], false}],
  -    {<<"html">>, [], [{<<"head">>, [], []}, {<<"body">>, [], []}]} = parse_tokens(D3),
  +    ?assertEqual(
  +       {<<"html">>, [], [{<<"head">>, [], []}, {<<"body">>, [], []}]},
  +       parse_tokens(D3)),
       D4 = D3 ++ [{data,<<"\n">>,true},
                   {start_tag,<<"div">>,[{<<"class">>,<<"a">>}],false},
                   {start_tag,<<"a">>,[{<<"name">>,<<"#anchor">>}],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:                 {start_tag,<<"div">>,[{<<"class">>,<<"c">>}],false},
                  {end_tag,<<"div">>},
                  {end_tag,<<"div">>}],
      ?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">>}],
      ?assertEqual(
         {<<"html">>, [], [<<"\nboohoo\n">>]},
         parse_tokens(D5)),
      D6 = [{start_tag,<<"html">>,[],false},
            {data,<<"\n">>,true},
            {data,<<"\n">>,true},
            {end_tag,<<"html">>}],
      ?assertEqual(
         {<<"html">>, [], []},
         parse_tokens(D6)),
      D7 = [{start_tag,<<"html">>,[],false},
            {start_tag,<<"ul">>,[],false},
            {start_tag,<<"li">>,[],false},
  