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

Unified Diff: test/parser_feature_test.dart

Issue 1312363005: Add Element.endSourceSpan (Closed) Base URL: https://github.com/dart-lang/html@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 | « lib/src/treebuilder.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/parser_feature_test.dart
diff --git a/test/parser_feature_test.dart b/test/parser_feature_test.dart
index 568819b5e885143dbd68f5f6ec160d0619acf704..54d68a945845ac4d4d03f87f991fc5c713ad3d79 100644
--- a/test/parser_feature_test.dart
+++ b/test/parser_feature_test.dart
@@ -7,8 +7,10 @@ import 'package:html/parser.dart';
import 'package:html/src/constants.dart';
import 'package:html/src/encoding_parser.dart';
import 'package:html/src/treebuilder.dart';
+import 'package:source_span/source_span.dart';
main() {
+ _testElementSpans();
test('doctype is cloneable', () {
var doc = parse('<!doctype HTML>');
DocumentType doctype = doc.nodes[0];
@@ -332,3 +334,143 @@ On line 4, column 3 of ParseError: Unexpected DOCTYPE. Ignored.
});
});
}
+
+_testElementSpans() {
+ assertSpan(SourceSpan span, int offset, int end, String text) {
+ expect(span, isNotNull);
+ expect(span.start.offset, offset);
+ expect(span.end.offset, end);
+ expect(span.text, text);
+ }
+
+ group('element spans', () {
+ test('html and body', () {
+ var text = '<html><body>123</body></html>';
+ var doc = parse(text, generateSpans: true);
+ {
+ var elem = doc.querySelector('html');
+ assertSpan(elem.sourceSpan, 0, 6, '<html>');
+ assertSpan(elem.endSourceSpan, 22, 29, '</html>');
+ }
+ {
+ var elem = doc.querySelector('body');
+ assertSpan(elem.sourceSpan, 6, 12, '<body>');
+ assertSpan(elem.endSourceSpan, 15, 22, '</body>');
+ }
+ });
+
+ test('normal', () {
+ var text = '<div><element><span></span></element></div>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('element');
+ assertSpan(elem.sourceSpan, 5, 14, '<element>');
+ assertSpan(elem.endSourceSpan, 27, 37, '</element>');
+ });
+
+ test('block', () {
+ var text = '<div>123</div>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('div');
+ assertSpan(elem.sourceSpan, 0, 5, '<div>');
+ assertSpan(elem.endSourceSpan, 8, 14, '</div>');
+ });
+
+ test('form', () {
+ var text = '<form>123</form>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('form');
+ assertSpan(elem.sourceSpan, 0, 6, '<form>');
+ assertSpan(elem.endSourceSpan, 9, 16, '</form>');
+ });
+
+ test('p explicit end', () {
+ var text = '<p>123</p>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('p');
+ assertSpan(elem.sourceSpan, 0, 3, '<p>');
+ assertSpan(elem.endSourceSpan, 6, 10, '</p>');
+ });
+
+ test('p implicit end', () {
+ var text = '<div><p>123<p>456</div>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('p');
+ assertSpan(elem.sourceSpan, 5, 8, '<p>');
+ expect(elem.endSourceSpan, isNull);
+ });
+
+ test('li', () {
+ var text = '<li>123</li>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('li');
+ assertSpan(elem.sourceSpan, 0, 4, '<li>');
+ assertSpan(elem.endSourceSpan, 7, 12, '</li>');
+ });
+
+ test('heading', () {
+ var text = '<h1>123</h1>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('h1');
+ assertSpan(elem.sourceSpan, 0, 4, '<h1>');
+ assertSpan(elem.endSourceSpan, 7, 12, '</h1>');
+ });
+
+ test('formatting', () {
+ var text = '<b>123</b>';
+ var doc = parse(text, generateSpans: true);
+ var elem = doc.querySelector('b');
+ assertSpan(elem.sourceSpan, 0, 3, '<b>');
+ assertSpan(elem.endSourceSpan, 6, 10, '</b>');
+ });
+
+ test('table tbody', () {
+ var text = '<table><tbody> </tbody></table>';
+ var doc = parse(text, generateSpans: true);
+ {
+ var elem = doc.querySelector('tbody');
+ assertSpan(elem.sourceSpan, 7, 14, '<tbody>');
+ assertSpan(elem.endSourceSpan, 16, 24, '</tbody>');
+ }
+ });
+
+ test('table tr td', () {
+ var text = '<table><tr><td>123</td></tr></table>';
+ var doc = parse(text, generateSpans: true);
+ {
+ var elem = doc.querySelector('table');
+ assertSpan(elem.sourceSpan, 0, 7, '<table>');
+ assertSpan(elem.endSourceSpan, 28, 36, '</table>');
+ }
+ {
+ var elem = doc.querySelector('tr');
+ assertSpan(elem.sourceSpan, 7, 11, '<tr>');
+ assertSpan(elem.endSourceSpan, 23, 28, '</tr>');
+ }
+ {
+ var elem = doc.querySelector('td');
+ assertSpan(elem.sourceSpan, 11, 15, '<td>');
+ assertSpan(elem.endSourceSpan, 18, 23, '</td>');
+ }
+ });
+
+ test('select optgroup option', () {
+ var text = '<select><optgroup><option>123</option></optgroup></select>';
+ var doc = parse(text, generateSpans: true);
+ {
+ var elem = doc.querySelector('select');
+ assertSpan(elem.sourceSpan, 0, 8, '<select>');
+ assertSpan(elem.endSourceSpan, 49, 58, '</select>');
+ }
+ {
+ var elem = doc.querySelector('optgroup');
+ assertSpan(elem.sourceSpan, 8, 18, '<optgroup>');
+ assertSpan(elem.endSourceSpan, 38, 49, '</optgroup>');
+ }
+ {
+ var elem = doc.querySelector('option');
+ assertSpan(elem.sourceSpan, 18, 26, '<option>');
+ assertSpan(elem.endSourceSpan, 29, 38, '</option>');
+ }
+ });
+ });
+}
« no previous file with comments | « lib/src/treebuilder.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698