Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Unified Diff: test/utils.dart

Issue 1274753003: Allow resolving links that contain inline syntax. (Closed) Base URL: https://github.com/dart-lang/markdown.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/markdown_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/utils.dart
diff --git a/test/utils.dart b/test/utils.dart
new file mode 100644
index 0000000000000000000000000000000000000000..73ad7ef2ed901729eb16dc2093b1ee5ca045dd37
--- /dev/null
+++ b/test/utils.dart
@@ -0,0 +1,94 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library markdown.test.utils;
+
+import 'package:unittest/unittest.dart';
+
+import 'package:markdown/markdown.dart';
+
+/// Removes eight spaces of leading indentation from a multiline string.
+///
+/// Note that this is very sensitive to how the literals are styled. They should
+/// be:
+/// '''
+/// Text starts on own line. Lines up with subsequent lines.
+/// Lines are indented exactly 8 characters from the left margin.'''
+///
+/// This does nothing if text is only a single line.
+// TODO(nweiz): Make this auto-detect the indentation level from the first
+// non-whitespace line.
+String cleanUpLiteral(String text) {
+ var lines = text.split('\n');
+ if (lines.length <= 1) return text;
+
+ for (var j = 0; j < lines.length; j++) {
+ if (lines[j].length > 8) {
+ lines[j] = lines[j].substring(8, lines[j].length);
+ } else {
+ lines[j] = '';
+ }
+ }
+
+ return lines.join('\n');
+}
+
+void validate(String description, String markdown, String html,
+ {List<InlineSyntax> inlineSyntaxes,
+ Resolver linkResolver, Resolver imageLinkResolver,
+ bool inlineOnly: false}) {
+ test(description, () {
+ markdown = cleanUpLiteral(markdown);
+ html = cleanUpLiteral(html);
+
+ var result = markdownToHtml(markdown,
+ inlineSyntaxes: inlineSyntaxes,
+ linkResolver: linkResolver,
+ imageLinkResolver: imageLinkResolver,
+ inlineOnly: inlineOnly);
+ var passed = compareOutput(html, result);
+
+ if (!passed) {
+ // Remove trailing newline.
+ html = html.substring(0, html.length - 1);
+
+ var sb = new StringBuffer();
+ sb.writeln('Expected: ${html.replaceAll("\n", "\n ")}');
+ sb.writeln(' Actual: ${result.replaceAll("\n", "\n ")}');
+
+ fail(sb.toString());
+ }
+ });
+}
+
+/// Does a loose comparison of the two strings of HTML. Ignores differences in
+/// newlines and indentation.
+bool compareOutput(String a, String b) {
+ int i = 0;
+ int j = 0;
+
+ skipIgnored(String s, int i) {
+ // Ignore newlines.
+ while ((i < s.length) && (s[i] == '\n')) {
+ i++;
+ // Ignore indentation.
+ while ((i < s.length) && (s[i] == ' ')) i++;
+ }
+
+ return i;
+ }
+
+ while (true) {
+ i = skipIgnored(a, i);
+ j = skipIgnored(b, j);
+
+ // If one string runs out of non-ignored strings, the other must too.
+ if (i == a.length) return j == b.length;
+ if (j == b.length) return i == a.length;
+
+ if (a[i] != b[j]) return false;
+ i++;
+ j++;
+ }
+}
« no previous file with comments | « test/markdown_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698