anchor.diff:  void main() {
     group('parsing', () {
       test('comment', () {
  -      validate('<?xml version="1.0" encoding="UTF-8"?>' '<schema><!-- comment --></schema>');
  +      assetParseInvariants('<?xml version="1.0" encoding="UTF-8"?>' '<schema><!-- comment --></schema>');
       });
       test('comment with xml', () {
  -      validate('<?xml version="1.0" encoding="UTF-8"?>' '<schema><!-- <foo></foo> --></schema>');
  +      assetParseInvariants('<?xml version="1.0" encoding="UTF-8"?>' '<schema><!-- <foo></foo> --></schema>');
       });
       test('complicated', () {
  -      validate('<?xml foo?>\n' '<!DOCTYPE [ something ]>\n'
  +      assetParseInvariants('<?xml foo?>\n' '<!DOCTYPE [ something ]>\n'
             '<ns:foo attr="not namespaced" n1:ans="namespaced 1" n2:ans="namespace 2" >\n' '  <element/>\n'
             '  <ns:element/>\n' '  <!-- comment -->\n' '  <![CDATA[cdata]]>\n' '  <?processing instruction?>\n'
             '</ns:foo>');
       });
       test('doctype', () {
  -      validate('<!DOCTYPE with <schema> [ <!-- schema --> ]>\n<schema />');
  +      assetParseInvariants('<!DOCTYPE with <schema> [ <!-- schema --> ]>\n<schema />');
       });
       test('empty element', () {
  -      validate('<schema/>');
  +      assetParseInvariants('<schema/>');
       });
       test('namespace', () {
  -      validate('<xs:schema xs:attr="1"></xs:schema>');
  +      assetParseInvariants('<xs:schema xs:attr="1"></xs:schema>');
       });
       test('simple', () {
  -      validate('<schema></schema>');
  +      assetParseInvariants('<schema></schema>');
       });
       test('simple double quote attribute', () {
  -      validate('<schema foo="bar"></schema>');
  +      assetParseInvariants('<schema foo="bar"></schema>');
       });
       test('simple single quote attribute', () {
  -      validate('<schema foo=\'bar\'></schema>');
  +      assetParseInvariants('<schema foo=\'bar\'></schema>');
       });
       test('short cdata section', () {
  -      validate('<data><![CDATA[]]></data>');
  +      assetParseInvariants('<data><![CDATA[]]></data>');
       });
       test('short cdata section', () {
  -      validate('<data><![CDATA[<data></data>]]></data>');
  +      assetParseInvariants('<data><![CDATA[<data></data>]]></data>');
       });
       test('short processing instruction', () {
  -      validate('<?xml?><data />');
  +      assetParseInvariants('<?xml?><data />');
       });
       test('long processing instruction', () {
  -      validate('<?xml version="1.0"?><data />');
  +      assetParseInvariants('<?xml version="1.0"?><data />');
       });
       test('whitespace after prolog', () {
  -      validate('<?xml version="1.0" encoding="UTF-8"?>\n\t<schema></schema>\t\n');
  +      assetParseInvariants('<?xml version="1.0" encoding="UTF-8"?>\n\t<schema></schema>\t\n');
       });
     });
     group('nodes', () {
  
positive.code: void assertNameInvariant(XmlNode xml) {
    for (var node in xml.descendants) {
      if (node is XmlElement) {
        var element = node;
        assertQualifiedInvariant(element.name);
      }
      if (node is XmlAttribute) {
        var attribute = node;
        assertQualifiedInvariant(attribute.name);
      }
    }
  }
  
negative.code:         builder.attribute('lang', 'en', namespace: uri);
          builder.element('element', namespace: uri);
        }, namespace: uri);
        var xml = builder.build();
        assertTreeInvariants(xml);
        var actual = xml.toString();
        var expected =
            '<schema xmlns="http://www.w3.org/2001/XMLSchema" lang="en">'
              '<element />'
  