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

Side by Side 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, 3 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 unified diff | Download patch
« no previous file with comments | « lib/src/treebuilder.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /// Additional feature tests that aren't based on test data. 1 /// Additional feature tests that aren't based on test data.
2 library parser_feature_test; 2 library parser_feature_test;
3 3
4 import 'package:unittest/unittest.dart'; 4 import 'package:unittest/unittest.dart';
5 import 'package:html/dom.dart'; 5 import 'package:html/dom.dart';
6 import 'package:html/parser.dart'; 6 import 'package:html/parser.dart';
7 import 'package:html/src/constants.dart'; 7 import 'package:html/src/constants.dart';
8 import 'package:html/src/encoding_parser.dart'; 8 import 'package:html/src/encoding_parser.dart';
9 import 'package:html/src/treebuilder.dart'; 9 import 'package:html/src/treebuilder.dart';
10 import 'package:source_span/source_span.dart';
10 11
11 main() { 12 main() {
13 _testElementSpans();
12 test('doctype is cloneable', () { 14 test('doctype is cloneable', () {
13 var doc = parse('<!doctype HTML>'); 15 var doc = parse('<!doctype HTML>');
14 DocumentType doctype = doc.nodes[0]; 16 DocumentType doctype = doc.nodes[0];
15 expect(doctype.clone(false).toString(), '<!DOCTYPE html>'); 17 expect(doctype.clone(false).toString(), '<!DOCTYPE html>');
16 }); 18 });
17 19
18 test('line counter', () { 20 test('line counter', () {
19 // http://groups.google.com/group/html5lib-discuss/browse_frm/thread/f4f00e4 a2f26d5c0 21 // http://groups.google.com/group/html5lib-discuss/browse_frm/thread/f4f00e4 a2f26d5c0
20 var doc = parse("<pre>\nx\n&gt;\n</pre>"); 22 var doc = parse("<pre>\nx\n&gt;\n</pre>");
21 expect(doc.body.innerHtml, "<pre>x\n&gt;\n</pre>"); 23 expect(doc.body.innerHtml, "<pre>x\n&gt;\n</pre>");
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 test('stops if no match', () { 327 test('stops if no match', () {
326 // missing closing tag 328 // missing closing tag
327 expect(getEncoding('<meta charset="utf-16"'), null); 329 expect(getEncoding('<meta charset="utf-16"'), null);
328 }); 330 });
329 331
330 test('ignores whitespace', () { 332 test('ignores whitespace', () {
331 expect(getEncoding(' <meta charset="utf-16">'), 'utf-16'); 333 expect(getEncoding(' <meta charset="utf-16">'), 'utf-16');
332 }); 334 });
333 }); 335 });
334 } 336 }
337
338 _testElementSpans() {
339 assertSpan(SourceSpan span, int offset, int end, String text) {
340 expect(span, isNotNull);
341 expect(span.start.offset, offset);
342 expect(span.end.offset, end);
343 expect(span.text, text);
344 }
345
346 group('element spans', () {
347 test('html and body', () {
348 var text = '<html><body>123</body></html>';
349 var doc = parse(text, generateSpans: true);
350 {
351 var elem = doc.querySelector('html');
352 assertSpan(elem.sourceSpan, 0, 6, '<html>');
353 assertSpan(elem.endSourceSpan, 22, 29, '</html>');
354 }
355 {
356 var elem = doc.querySelector('body');
357 assertSpan(elem.sourceSpan, 6, 12, '<body>');
358 assertSpan(elem.endSourceSpan, 15, 22, '</body>');
359 }
360 });
361
362 test('normal', () {
363 var text = '<div><element><span></span></element></div>';
364 var doc = parse(text, generateSpans: true);
365 var elem = doc.querySelector('element');
366 assertSpan(elem.sourceSpan, 5, 14, '<element>');
367 assertSpan(elem.endSourceSpan, 27, 37, '</element>');
368 });
369
370 test('block', () {
371 var text = '<div>123</div>';
372 var doc = parse(text, generateSpans: true);
373 var elem = doc.querySelector('div');
374 assertSpan(elem.sourceSpan, 0, 5, '<div>');
375 assertSpan(elem.endSourceSpan, 8, 14, '</div>');
376 });
377
378 test('form', () {
379 var text = '<form>123</form>';
380 var doc = parse(text, generateSpans: true);
381 var elem = doc.querySelector('form');
382 assertSpan(elem.sourceSpan, 0, 6, '<form>');
383 assertSpan(elem.endSourceSpan, 9, 16, '</form>');
384 });
385
386 test('p explicit end', () {
387 var text = '<p>123</p>';
388 var doc = parse(text, generateSpans: true);
389 var elem = doc.querySelector('p');
390 assertSpan(elem.sourceSpan, 0, 3, '<p>');
391 assertSpan(elem.endSourceSpan, 6, 10, '</p>');
392 });
393
394 test('p implicit end', () {
395 var text = '<div><p>123<p>456</div>';
396 var doc = parse(text, generateSpans: true);
397 var elem = doc.querySelector('p');
398 assertSpan(elem.sourceSpan, 5, 8, '<p>');
399 expect(elem.endSourceSpan, isNull);
400 });
401
402 test('li', () {
403 var text = '<li>123</li>';
404 var doc = parse(text, generateSpans: true);
405 var elem = doc.querySelector('li');
406 assertSpan(elem.sourceSpan, 0, 4, '<li>');
407 assertSpan(elem.endSourceSpan, 7, 12, '</li>');
408 });
409
410 test('heading', () {
411 var text = '<h1>123</h1>';
412 var doc = parse(text, generateSpans: true);
413 var elem = doc.querySelector('h1');
414 assertSpan(elem.sourceSpan, 0, 4, '<h1>');
415 assertSpan(elem.endSourceSpan, 7, 12, '</h1>');
416 });
417
418 test('formatting', () {
419 var text = '<b>123</b>';
420 var doc = parse(text, generateSpans: true);
421 var elem = doc.querySelector('b');
422 assertSpan(elem.sourceSpan, 0, 3, '<b>');
423 assertSpan(elem.endSourceSpan, 6, 10, '</b>');
424 });
425
426 test('table tbody', () {
427 var text = '<table><tbody> </tbody></table>';
428 var doc = parse(text, generateSpans: true);
429 {
430 var elem = doc.querySelector('tbody');
431 assertSpan(elem.sourceSpan, 7, 14, '<tbody>');
432 assertSpan(elem.endSourceSpan, 16, 24, '</tbody>');
433 }
434 });
435
436 test('table tr td', () {
437 var text = '<table><tr><td>123</td></tr></table>';
438 var doc = parse(text, generateSpans: true);
439 {
440 var elem = doc.querySelector('table');
441 assertSpan(elem.sourceSpan, 0, 7, '<table>');
442 assertSpan(elem.endSourceSpan, 28, 36, '</table>');
443 }
444 {
445 var elem = doc.querySelector('tr');
446 assertSpan(elem.sourceSpan, 7, 11, '<tr>');
447 assertSpan(elem.endSourceSpan, 23, 28, '</tr>');
448 }
449 {
450 var elem = doc.querySelector('td');
451 assertSpan(elem.sourceSpan, 11, 15, '<td>');
452 assertSpan(elem.endSourceSpan, 18, 23, '</td>');
453 }
454 });
455
456 test('select optgroup option', () {
457 var text = '<select><optgroup><option>123</option></optgroup></select>';
458 var doc = parse(text, generateSpans: true);
459 {
460 var elem = doc.querySelector('select');
461 assertSpan(elem.sourceSpan, 0, 8, '<select>');
462 assertSpan(elem.endSourceSpan, 49, 58, '</select>');
463 }
464 {
465 var elem = doc.querySelector('optgroup');
466 assertSpan(elem.sourceSpan, 8, 18, '<optgroup>');
467 assertSpan(elem.endSourceSpan, 38, 49, '</optgroup>');
468 }
469 {
470 var elem = doc.querySelector('option');
471 assertSpan(elem.sourceSpan, 18, 26, '<option>');
472 assertSpan(elem.endSourceSpan, 29, 38, '</option>');
473 }
474 });
475 });
476 }
OLDNEW
« 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