Merge pull request dart-lang/markdown#105 from dart-lang/strong

Find and fix a gnarly oversight with using the wrong 'Element' class
diff --git a/pkgs/markdown/tool/common_mark_stats.dart b/pkgs/markdown/tool/common_mark_stats.dart
index 6d50731..2bcb4c3 100644
--- a/pkgs/markdown/tool/common_mark_stats.dart
+++ b/pkgs/markdown/tool/common_mark_stats.dart
@@ -7,8 +7,9 @@
 
 import 'package:args/args.dart' show ArgParser;
 import 'package:collection/collection.dart';
+import 'package:html/dom.dart' as dom;
 import 'package:html/parser.dart' show parseFragment;
-import 'package:markdown/markdown.dart';
+import 'package:markdown/markdown.dart' show markdownToHtml;
 import 'package:path/path.dart' as p;
 
 const _commonMarkTests = 'common_mark_tests.json';
@@ -58,7 +59,7 @@
       var actual = parseFragment(output);
       nestedMap[e.example] = compareHtml(expected.children, actual.children);
       if (verbose && !nestedMap[e.example]) {
-        print('FAIL: http://spec.commonmark.org/0.24/#example-${e.example}');
+        print('FAIL: http://spec.commonmark.org/0.25/#example-${e.example}');
         print('input:');
         print(indent(e.markdown));
         print('expected:');
@@ -125,7 +126,8 @@
 }
 
 /// Compare two DOM trees for equality.
-bool compareHtml(List<Element> expectedElements, List<Element> actualElements) {
+bool compareHtml(
+    List<dom.Element> expectedElements, List<dom.Element> actualElements) {
   if (expectedElements.length != actualElements.length) {
     return false;
   }
@@ -138,34 +140,32 @@
       return false;
     }
 
-    if (expected is Element) {
-      if (expected.localName != actual.localName) {
+    if (expected.localName != actual.localName) {
+      return false;
+    }
+
+    if (expected.attributes.length != actual.attributes.length) {
+      return false;
+    }
+
+    var expectedAttrKeys = expected.attributes.keys.toList();
+    expectedAttrKeys.sort();
+
+    var actualAttrKeys = actual.attributes.keys.toList();
+    actualAttrKeys.sort();
+
+    for (var attrNum = 0; attrNum < actualAttrKeys.length; attrNum++) {
+      var expectedAttrKey = expectedAttrKeys[attrNum];
+      var actualAttrKey = actualAttrKeys[attrNum];
+
+      if (expectedAttrKey != actualAttrKey) {
         return false;
       }
 
-      if (expected.attributes.length != actual.attributes.length) {
+      if (expected.attributes[expectedAttrKey] !=
+          actual.attributes[actualAttrKey]) {
         return false;
       }
-
-      var expectedAttrKeys = expected.attributes.keys.toList();
-      expectedAttrKeys.sort();
-
-      var actualAttrKeys = actual.attributes.keys.toList();
-      actualAttrKeys.sort();
-
-      for (var attrNum = 0; attrNum < actualAttrKeys.length; attrNum++) {
-        var expectedAttrKey = expectedAttrKeys[attrNum];
-        var actualAttrKey = actualAttrKeys[attrNum];
-
-        if (expectedAttrKey != actualAttrKey) {
-          return false;
-        }
-
-        if (expected.attributes[expectedAttrKey] !=
-            actual.attributes.keys[actualAttrKey]) {
-          return false;
-        }
-      }
     }
 
     var childrenEqual = compareHtml(expected.children, actual.children);
diff --git a/pkgs/markdown/tool/common_mark_stats.json b/pkgs/markdown/tool/common_mark_stats.json
index b5cfaaf..7f783f3 100644
--- a/pkgs/markdown/tool/common_mark_stats.json
+++ b/pkgs/markdown/tool/common_mark_stats.json
@@ -3,14 +3,14 @@
   "30": true,
   "31": true,
   "32": true,
-  "33": true,
+  "33": false,
   "34": true,
   "35": true,
   "36": true,
   "37": false,
   "38": true,
   "39": true,
-  "40": true,
+  "40": false,
   "41": true,
   "42": true,
   "43": true,
@@ -18,7 +18,7 @@
   "45": true,
   "46": true,
   "47": true,
-  "48": true
+  "48": false
  },
  "Autolinks": {
   "557": true,
@@ -30,7 +30,7 @@
   "563": true,
   "564": false,
   "565": false,
-  "566": true,
+  "566": false,
   "567": false,
   "568": false,
   "569": true,
@@ -50,11 +50,11 @@
   "290": true,
   "291": true,
   "292": true,
-  "293": true,
+  "293": false,
   "294": true,
-  "295": true,
-  "296": true,
-  "297": true
+  "295": false,
+  "296": false,
+  "297": false
  },
  "Blank lines": {
   "187": true
@@ -99,7 +99,7 @@
   "319": true,
   "320": true,
   "321": true,
-  "322": true,
+  "322": false,
   "323": false,
   "324": true
  },
@@ -179,7 +179,7 @@
   "397": false,
   "398": false,
   "399": true,
-  "400": true,
+  "400": false,
   "401": true,
   "402": true,
   "403": false,
@@ -194,8 +194,8 @@
   "412": true,
   "413": false,
   "414": true,
-  "415": true,
-  "416": true,
+  "415": false,
+  "416": false,
   "417": true,
   "418": true,
   "419": true,
@@ -224,8 +224,8 @@
   "442": false,
   "443": true,
   "444": true,
-  "445": true,
-  "446": true,
+  "445": false,
+  "446": false,
   "447": true,
   "448": true,
   "449": true,
@@ -242,8 +242,8 @@
   "302": true,
   "303": true,
   "304": true,
-  "305": true,
-  "306": true,
+  "305": false,
+  "306": false,
   "307": true,
   "308": true,
   "309": true
@@ -267,14 +267,14 @@
   "102": true,
   "103": true,
   "104": true,
-  "105": true,
+  "105": false,
   "106": true,
   "107": true,
   "108": true,
   "109": true,
   "110": true,
   "111": true,
-  "112": true,
+  "112": false,
   "113": false
  },
  "Hard line breaks": {
@@ -340,23 +340,23 @@
  },
  "Images": {
   "535": true,
-  "536": true,
-  "537": true,
-  "538": true,
-  "539": true,
-  "540": true,
+  "536": false,
+  "537": false,
+  "538": false,
+  "539": false,
+  "540": false,
   "541": true,
   "542": false,
   "543": true,
-  "544": true,
+  "544": false,
   "545": true,
   "546": true,
   "547": true,
-  "548": true,
+  "548": false,
   "549": true,
   "550": true,
   "551": true,
-  "552": true,
+  "552": false,
   "553": true,
   "554": true,
   "555": true,
@@ -390,9 +390,9 @@
   "163": true,
   "164": false,
   "165": true,
-  "166": true,
+  "166": false,
   "167": true,
-  "168": true,
+  "168": false,
   "169": true,
   "170": true,
   "171": true,
@@ -413,16 +413,16 @@
   "459": true,
   "460": true,
   "461": false,
-  "462": true,
-  "463": true,
+  "462": false,
+  "463": false,
   "464": false,
-  "465": true,
-  "466": true,
-  "467": true,
+  "465": false,
+  "466": false,
+  "467": false,
   "468": true,
-  "469": true,
-  "470": true,
-  "471": true,
+  "469": false,
+  "470": false,
+  "471": false,
   "472": false,
   "473": false,
   "474": true,
@@ -437,13 +437,13 @@
   "483": true,
   "484": false,
   "485": false,
-  "486": true,
-  "487": true,
+  "486": false,
+  "487": false,
   "488": true,
   "489": true,
   "490": true,
   "491": true,
-  "492": true,
+  "492": false,
   "493": true,
   "494": true,
   "495": true,
@@ -455,13 +455,13 @@
   "501": true,
   "502": true,
   "503": true,
-  "504": true,
+  "504": false,
   "505": true,
   "506": true,
   "507": false,
   "508": true,
   "509": true,
-  "510": true,
+  "510": false,
   "511": true,
   "512": false,
   "513": true,
@@ -481,7 +481,7 @@
   "527": true,
   "528": true,
   "529": true,
-  "530": true,
+  "530": false,
   "531": true,
   "532": true,
   "533": true,
@@ -501,13 +501,13 @@
   "223": true,
   "224": false,
   "225": false,
-  "226": true,
+  "226": false,
   "227": false,
-  "228": true,
-  "229": true,
+  "228": false,
+  "229": false,
   "230": true,
   "231": false,
-  "232": true,
+  "232": false,
   "233": true,
   "234": false,
   "235": false,
@@ -533,14 +533,14 @@
   "255": false,
   "256": false,
   "257": true,
-  "258": true,
+  "258": false,
   "259": false
  },
  "Lists": {
   "260": false,
   "261": false,
   "262": true,
-  "263": true,
+  "263": false,
   "264": false,
   "265": true,
   "266": false,
@@ -582,10 +582,10 @@
   "579": true,
   "580": true,
   "581": true,
-  "582": true,
+  "582": false,
   "583": true,
   "584": true,
-  "585": true,
+  "585": false,
   "586": true,
   "587": false,
   "588": true,
@@ -596,13 +596,13 @@
   "593": true,
   "594": true,
   "595": true,
-  "596": true
+  "596": false
  },
  "Setext headings": {
   "49": true,
   "50": false,
   "51": true,
-  "52": true,
+  "52": false,
   "53": true,
   "54": false,
   "55": true,
diff --git a/pkgs/markdown/tool/common_mark_stats.txt b/pkgs/markdown/tool/common_mark_stats.txt
index 48523fc..7082c31 100644
--- a/pkgs/markdown/tool/common_mark_stats.txt
+++ b/pkgs/markdown/tool/common_mark_stats.txt
@@ -1,27 +1,27 @@
-  18 of   19 –  94.7%  ATX headings
-  11 of   19 –  57.9%  Autolinks
-  12 of   13 –  92.3%  Backslash escapes
+  15 of   19 –  78.9%  ATX headings
+  10 of   19 –  52.6%  Autolinks
+   8 of   13 –  61.5%  Backslash escapes
    1 of    1 – 100.0%  Blank lines
   18 of   25 –  72.0%  Block quotes
-  14 of   15 –  93.3%  Code spans
-  86 of  129 –  66.7%  Emphasis and strong emphasis
-  12 of   12 – 100.0%  Entity and numeric character references
-  26 of   27 –  96.3%  Fenced code blocks
+  13 of   15 –  86.7%  Code spans
+  81 of  129 –  62.8%  Emphasis and strong emphasis
+  10 of   12 –  83.3%  Entity and numeric character references
+  24 of   27 –  88.9%  Fenced code blocks
   15 of   15 – 100.0%  Hard line breaks
   42 of   42 – 100.0%  HTML blocks
-  21 of   22 –  95.5%  Images
+  13 of   22 –  59.1%  Images
   10 of   12 –  83.3%  Indented code blocks
    1 of    1 – 100.0%  Inlines
-  13 of   23 –  56.5%  Link reference definitions
-  66 of   81 –  81.5%  Links
-  25 of   47 –  53.2%  List items
-   4 of   24 –  16.7%  Lists
+  11 of   23 –  47.8%  Link reference definitions
+  52 of   81 –  64.2%  Links
+  20 of   47 –  42.6%  List items
+   3 of   24 –  12.5%  Lists
    8 of    8 – 100.0%  Paragraphs
    1 of    1 – 100.0%  Precedence
-  18 of   21 –  85.7%  Raw HTML
-  16 of   26 –  61.5%  Setext headings
+  15 of   21 –  71.4%  Raw HTML
+  15 of   26 –  57.7%  Setext headings
    2 of    2 – 100.0%  Soft line breaks
    6 of    9 –  66.7%  Tabs
    3 of    3 – 100.0%  Textual content
   16 of   19 –  84.2%  Thematic breaks
- 465 of  616 –  75.5%  TOTAL
+ 413 of  616 –  67.0%  TOTAL
diff --git a/pkgs/markdown/tool/dartdoc-compare.dart b/pkgs/markdown/tool/dartdoc-compare.dart
index 24c23ae..5b9cff7 100644
--- a/pkgs/markdown/tool/dartdoc-compare.dart
+++ b/pkgs/markdown/tool/dartdoc-compare.dart
@@ -68,7 +68,7 @@
     return result == 0;
   }
 
-  run_dartdoc(markdown_ref, package) {
+  String run_dartdoc(markdown_ref, package) {
     print("==========================================================");
     print("Running dartdoc for ${markdown_ref}...");
     print("==========================================================");
@@ -77,7 +77,8 @@
       if (!sdk) system('pub', ['get']);
       var out = Directory.systemTemp
           .createTempSync("dartdoc-compare-${markdown_ref}__");
-      var sdk_options = sdk ? ["--sdk-docs", "--dart-sdk=$package"] : [];
+      var sdk_options =
+          sdk ? ["--sdk-docs", "--dart-sdk=$package"] : <String>[];
       var cmd = "dart";
       var args = ["${dartdoc_bin}", "--output=${out.path}"]
         ..addAll(sdk_options);
@@ -107,7 +108,7 @@
     return system('pub', ['get']);
   }
 
-  static system(cmd, args) {
+  static system(String cmd, List<String> args) {
     var result = Process.runSync(cmd, args);
     print(result.stdout);
     print(result.stderr);