|
|
@@ -50,21 +50,14 @@
|
|
50
|
50
|
}
|
|
51
|
51
|
</style>
|
|
52
|
52
|
<script src="js/markdown.js"></script>
|
|
|
53
|
+ <!-- Testing infrastructure -->
|
|
53
|
54
|
<script>
|
|
54
|
|
- function onLoad() {
|
|
55
|
|
- let testClasses = [
|
|
56
|
|
- InlineTests,
|
|
57
|
|
- BlockTests,
|
|
58
|
|
- ];
|
|
59
|
|
- TestClassRunner.runAll(testClasses);
|
|
60
|
|
- }
|
|
61
|
|
-
|
|
62
|
55
|
/**
|
|
63
|
56
|
* @param {String} text
|
|
64
|
57
|
* @returns {String}
|
|
65
|
58
|
*/
|
|
66
|
59
|
function escapeHTML(text) {
|
|
67
|
|
- return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
|
60
|
+ return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\n/g, '<br/>\n');
|
|
68
|
61
|
}
|
|
69
|
62
|
|
|
70
|
63
|
class ResultType {
|
|
|
@@ -106,7 +99,14 @@
|
|
106
|
99
|
if (test) this.fail(failMessage || `expected false, got ${test}`);
|
|
107
|
100
|
}
|
|
108
|
101
|
assertEqual(a, b, failMessage=null) {
|
|
109
|
|
- if (a != b) this.fail(failMessage || `equality failed: ${a} != ${b}`);
|
|
|
102
|
+ if (a == b) return;
|
|
|
103
|
+ const aVal = `${a}`;
|
|
|
104
|
+ const bVal = `${b}`;
|
|
|
105
|
+ if (aVal.length > 20 || bVal.length > 20) {
|
|
|
106
|
+ this.fail(failMessage || `equality failed:\n${aVal}\n!=\n${bVal}`);
|
|
|
107
|
+ } else {
|
|
|
108
|
+ this.fail(failMessage || `equality failed: ${aVal} != ${bVal}`);
|
|
|
109
|
+ }
|
|
110
|
110
|
}
|
|
111
|
111
|
expectError(e=true) {
|
|
112
|
112
|
if (this.currentRunner) this.currentRunner.expectedError = e;
|
|
|
@@ -176,6 +176,9 @@
|
|
176
|
176
|
} else {
|
|
177
|
177
|
this.result = ResultType.errored;
|
|
178
|
178
|
this.message = e.message;
|
|
|
179
|
+ if (e.stack !== undefined) {
|
|
|
180
|
+ this.message += "\n" + e.stack;
|
|
|
181
|
+ }
|
|
179
|
182
|
}
|
|
180
|
183
|
} finally {
|
|
181
|
184
|
this.expectedError = null;
|
|
|
@@ -316,215 +319,319 @@
|
|
316
|
319
|
}, 1);
|
|
317
|
320
|
}
|
|
318
|
321
|
}
|
|
319
|
|
-
|
|
320
|
|
- // ---------------------------------------------------------------
|
|
|
322
|
+ </script>
|
|
|
323
|
+ <!-- Tests -->
|
|
|
324
|
+ <script>
|
|
|
325
|
+ function onLoad() {
|
|
|
326
|
+ let testClasses = [
|
|
|
327
|
+ TokenTests,
|
|
|
328
|
+ InlineTests,
|
|
|
329
|
+ BlockTests,
|
|
|
330
|
+ ];
|
|
|
331
|
+ TestClassRunner.runAll(testClasses);
|
|
|
332
|
+ }
|
|
|
333
|
+ document.addEventListener('DOMContentLoaded', onLoad);
|
|
321
|
334
|
|
|
322
|
335
|
function normalizeWhitespace(str) {
|
|
323
|
336
|
return str.replace(/\s+/g, ' ').replace(/(?:^\s+|\s+$)/g, '');
|
|
324
|
337
|
}
|
|
325
|
338
|
|
|
|
339
|
+ class TokenTests extends BaseTest {
|
|
|
340
|
+ test_findFirstTokens() {
|
|
|
341
|
+ const tokens = [
|
|
|
342
|
+ new MDToken('Lorem', MDTokenType.Text),
|
|
|
343
|
+ new MDToken(' ', MDTokenType.Whitespace),
|
|
|
344
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
345
|
+ new MDToken('ipsum', MDTokenType.Text),
|
|
|
346
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
347
|
+ new MDToken(' ', MDTokenType.Whitespace),
|
|
|
348
|
+ new MDToken('dolor', MDTokenType.Text),
|
|
|
349
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
350
|
+ new MDToken('sit', MDTokenType.Text),
|
|
|
351
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
352
|
+ ];
|
|
|
353
|
+ const pattern = [
|
|
|
354
|
+ MDTokenType.Underscore,
|
|
|
355
|
+ ];
|
|
|
356
|
+ const result = MDToken.findFirstTokens(tokens, pattern);
|
|
|
357
|
+ const expected = {
|
|
|
358
|
+ tokens: [ tokens[2] ],
|
|
|
359
|
+ index: 2,
|
|
|
360
|
+ };
|
|
|
361
|
+ this.assertEqual(JSON.stringify(result), JSON.stringify(expected));
|
|
|
362
|
+ }
|
|
|
363
|
+
|
|
|
364
|
+ test_findPairedTokens() {
|
|
|
365
|
+ const tokens = [
|
|
|
366
|
+ new MDToken('Lorem', MDTokenType.Text),
|
|
|
367
|
+ new MDToken(' ', MDTokenType.Whitespace),
|
|
|
368
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
369
|
+ new MDToken('ipsum', MDTokenType.Text),
|
|
|
370
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
371
|
+ new MDToken(' ', MDTokenType.Whitespace),
|
|
|
372
|
+ new MDToken('dolor', MDTokenType.Text),
|
|
|
373
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
374
|
+ new MDToken('sit', MDTokenType.Text),
|
|
|
375
|
+ new MDToken('_', MDTokenType.Underscore),
|
|
|
376
|
+ ];
|
|
|
377
|
+ const pattern = [
|
|
|
378
|
+ MDTokenType.Underscore,
|
|
|
379
|
+ ];
|
|
|
380
|
+ const result = MDToken.findPairedTokens(tokens, pattern, pattern);
|
|
|
381
|
+ const expected = {
|
|
|
382
|
+ startTokens: [ tokens[2] ],
|
|
|
383
|
+ contentTokens: [ tokens[3] ],
|
|
|
384
|
+ endTokens: [ tokens[4] ],
|
|
|
385
|
+ startIndex: 2,
|
|
|
386
|
+ contentIndex: 3,
|
|
|
387
|
+ endIndex: 4,
|
|
|
388
|
+ totalLength: 3,
|
|
|
389
|
+ }
|
|
|
390
|
+ this.assertEqual(JSON.stringify(result), JSON.stringify(expected));
|
|
|
391
|
+ }
|
|
|
392
|
+ }
|
|
|
393
|
+
|
|
326
|
394
|
class InlineTests extends BaseTest {
|
|
|
395
|
+ /** @type {Markdown} */
|
|
|
396
|
+ parser;
|
|
|
397
|
+ md(markdown) {
|
|
|
398
|
+ return normalizeWhitespace(this.parser.toHTML(markdown));
|
|
|
399
|
+ }
|
|
|
400
|
+
|
|
|
401
|
+ setUp() {
|
|
|
402
|
+ this.parser = Markdown.completeParser;
|
|
|
403
|
+ }
|
|
|
404
|
+
|
|
327
|
405
|
test_simpleSingleParagraph() {
|
|
328
|
406
|
let markdown = 'Lorem ipsum';
|
|
329
|
407
|
let expected = '<p>Lorem ipsum</p>';
|
|
330
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
408
|
+ let actual = this.md(markdown);
|
|
331
|
409
|
this.assertEqual(actual, expected);
|
|
332
|
410
|
}
|
|
333
|
411
|
|
|
334
|
412
|
test_strong() {
|
|
335
|
413
|
let markdown = 'Lorem **ipsum** dolor **sit**';
|
|
336
|
414
|
let expected = '<p>Lorem <strong>ipsum</strong> dolor <strong>sit</strong></p>';
|
|
337
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
415
|
+ let actual = this.md(markdown);
|
|
338
|
416
|
this.assertEqual(actual, expected);
|
|
339
|
417
|
}
|
|
340
|
418
|
|
|
341
|
419
|
test_emphasis() {
|
|
342
|
420
|
let markdown = 'Lorem _ipsum_ dolor _sit_';
|
|
343
|
421
|
let expected = '<p>Lorem <em>ipsum</em> dolor <em>sit</em></p>';
|
|
344
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
422
|
+ let actual = this.md(markdown);
|
|
345
|
423
|
this.assertEqual(actual, expected);
|
|
346
|
424
|
}
|
|
347
|
425
|
|
|
348
|
|
- test_strongEmphasis_easy() {
|
|
|
426
|
+ test_strongEmphasis_cleanNesting1() {
|
|
349
|
427
|
let markdown = 'Lorem **ipsum *dolor* sit** amet';
|
|
350
|
428
|
let expected = '<p>Lorem <strong>ipsum <em>dolor</em> sit</strong> amet</p>';
|
|
351
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
429
|
+ let actual = this.md(markdown);
|
|
352
|
430
|
this.assertEqual(actual, expected);
|
|
353
|
431
|
}
|
|
354
|
432
|
|
|
355
|
|
- test_strongEmphasis_medium() {
|
|
|
433
|
+ test_strongEmphasis_cleanNesting2() {
|
|
|
434
|
+ let markdown = 'Lorem *ipsum **dolor** sit* amet';
|
|
|
435
|
+ let expected = '<p>Lorem <em>ipsum <strong>dolor</strong> sit</em> amet</p>';
|
|
|
436
|
+ let actual = this.md(markdown);
|
|
|
437
|
+ this.assertEqual(actual, expected);
|
|
|
438
|
+ }
|
|
|
439
|
+
|
|
|
440
|
+ test_strongEmphasis_tightNesting() {
|
|
356
|
441
|
let markdown = 'Lorem ***ipsum*** dolor';
|
|
357
|
442
|
let expected1 = '<p>Lorem <strong><em>ipsum</em></strong> dolor</p>';
|
|
358
|
443
|
let expected2 = '<p>Lorem <em><strong>ipsum</strong></em> dolor</p>';
|
|
359
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
444
|
+ let actual = this.md(markdown);
|
|
360
|
445
|
this.assertTrue(actual == expected1 || actual == expected2);
|
|
361
|
446
|
}
|
|
362
|
447
|
|
|
363
|
|
- test_strongEmphasis_hard1() {
|
|
|
448
|
+ test_strongEmphasis_lopsidedNesting1() {
|
|
364
|
449
|
let markdown = 'Lorem ***ipsum* dolor** sit';
|
|
365
|
450
|
let expected = '<p>Lorem <strong><em>ipsum</em> dolor</strong> sit</p>';
|
|
366
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
451
|
+ let actual = this.md(markdown);
|
|
367
|
452
|
this.assertEqual(actual, expected);
|
|
368
|
453
|
}
|
|
369
|
454
|
|
|
370
|
|
- test_strongEmphasis_hard2() {
|
|
|
455
|
+ test_strongEmphasis_lopsidedNesting2() {
|
|
371
|
456
|
let markdown = 'Lorem ***ipsum** dolor* sit';
|
|
372
|
457
|
let expected = '<p>Lorem <em><strong>ipsum</strong> dolor</em> sit</p>';
|
|
373
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
458
|
+ let actual = this.md(markdown);
|
|
|
459
|
+ this.assertEqual(actual, expected);
|
|
|
460
|
+ }
|
|
|
461
|
+
|
|
|
462
|
+ test_strongEmphasis_lopsidedNesting3() {
|
|
|
463
|
+ let markdown = 'Lorem **ipsum *dolor*** sit';
|
|
|
464
|
+ let expected = '<p>Lorem <strong>ipsum <em>dolor</em></strong> sit</p>';
|
|
|
465
|
+ let actual = this.md(markdown);
|
|
|
466
|
+ this.assertEqual(actual, expected);
|
|
|
467
|
+ }
|
|
|
468
|
+
|
|
|
469
|
+ test_strongEmphasis_lopsidedNesting4() {
|
|
|
470
|
+ let markdown = 'Lorem *ipsum **dolor*** sit';
|
|
|
471
|
+ let expected = '<p>Lorem <em>ipsum <strong>dolor</strong></em> sit</p>';
|
|
|
472
|
+ let actual = this.md(markdown);
|
|
374
|
473
|
this.assertEqual(actual, expected);
|
|
375
|
474
|
}
|
|
376
|
475
|
|
|
377
|
476
|
test_inlineCode() {
|
|
378
|
477
|
let markdown = 'Lorem `ipsum` dolor';
|
|
379
|
478
|
let expected = '<p>Lorem <code>ipsum</code> dolor</p>';
|
|
380
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
479
|
+ let actual = this.md(markdown);
|
|
381
|
480
|
this.assertEqual(actual, expected);
|
|
382
|
481
|
}
|
|
383
|
482
|
|
|
384
|
483
|
test_inlineCode_withInnerBacktick() {
|
|
385
|
484
|
let markdown = 'Lorem ``ip`su`m`` dolor';
|
|
386
|
485
|
let expected = '<p>Lorem <code>ip`su`m</code> dolor</p>';
|
|
387
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
486
|
+ let actual = this.md(markdown);
|
|
388
|
487
|
this.assertEqual(actual, expected);
|
|
389
|
488
|
}
|
|
390
|
489
|
|
|
391
|
490
|
test_strikethrough_single() {
|
|
392
|
491
|
let markdown = 'Lorem ~ipsum~ dolor';
|
|
393
|
492
|
let expected = '<p>Lorem <strike>ipsum</strike> dolor</p>';
|
|
394
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
493
|
+ let actual = this.md(markdown);
|
|
395
|
494
|
this.assertEqual(actual, expected);
|
|
396
|
495
|
}
|
|
397
|
496
|
|
|
398
|
497
|
test_strikethrough_double() {
|
|
399
|
498
|
let markdown = 'Lorem ~~ipsum~~ dolor';
|
|
400
|
499
|
let expected = '<p>Lorem <strike>ipsum</strike> dolor</p>';
|
|
401
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
500
|
+ let actual = this.md(markdown);
|
|
402
|
501
|
this.assertEqual(actual, expected);
|
|
403
|
502
|
}
|
|
404
|
503
|
|
|
405
|
504
|
test_link_fullyQualified() {
|
|
406
|
505
|
let markdown = 'Lorem [ipsum](https://example.com/path/page.html) dolor';
|
|
407
|
506
|
let expected = '<p>Lorem <a href="https://example.com/path/page.html">ipsum</a> dolor</p>';
|
|
408
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
507
|
+ let actual = this.md(markdown);
|
|
409
|
508
|
this.assertEqual(actual, expected);
|
|
410
|
509
|
}
|
|
411
|
510
|
|
|
412
|
511
|
test_link_relative() {
|
|
413
|
512
|
let markdown = 'Lorem [ipsum](page.html) dolor';
|
|
414
|
513
|
let expected = '<p>Lorem <a href="page.html">ipsum</a> dolor</p>';
|
|
415
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
514
|
+ let actual = this.md(markdown);
|
|
416
|
515
|
this.assertEqual(actual, expected);
|
|
417
|
516
|
}
|
|
418
|
517
|
|
|
419
|
518
|
test_link_title() {
|
|
420
|
519
|
let markdown = 'Lorem [ipsum](page.html "link title") dolor';
|
|
421
|
520
|
let expected = '<p>Lorem <a href="page.html" title="link title">ipsum</a> dolor</p>';
|
|
422
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
521
|
+ let actual = this.md(markdown);
|
|
423
|
522
|
this.assertEqual(actual, expected);
|
|
424
|
523
|
}
|
|
425
|
524
|
|
|
426
|
525
|
test_link_literal() {
|
|
427
|
526
|
let markdown = 'Lorem <https://example.com> dolor';
|
|
428
|
527
|
let expected = '<p>Lorem <a href="https://example.com">https://example.com</a> dolor</p>';
|
|
429
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
528
|
+ let actual = this.md(markdown);
|
|
430
|
529
|
this.assertEqual(actual, expected);
|
|
431
|
530
|
}
|
|
432
|
531
|
|
|
433
|
532
|
test_link_ref() {
|
|
434
|
533
|
let markdown = "Lorem [ipsum][ref] dolor\n\n[ref]: https://example.com";
|
|
435
|
534
|
let expected = '<p>Lorem <a href="https://example.com">ipsum</a> dolor</p>';
|
|
436
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
535
|
+ let actual = this.md(markdown);
|
|
437
|
536
|
this.assertEqual(actual, expected);
|
|
438
|
537
|
}
|
|
439
|
538
|
|
|
440
|
539
|
test_link_email() {
|
|
441
|
540
|
let markdown = 'Lorem [ipsum](user@example.com) dolor';
|
|
442
|
541
|
let expected = '<p>Lorem <a href="mailto:user@example.com">ipsum</a> dolor</p>';
|
|
443
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
542
|
+ let actual = this.md(markdown);
|
|
444
|
543
|
this.assertEqual(actual, expected);
|
|
445
|
544
|
}
|
|
446
|
545
|
|
|
447
|
546
|
test_link_email_withTitle() {
|
|
448
|
547
|
let markdown = 'Lorem [ipsum](user@example.com "title") dolor';
|
|
449
|
548
|
let expected = '<p>Lorem <a href="mailto:user@example.com" title="title">ipsum</a> dolor</p>';
|
|
450
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
549
|
+ let actual = this.md(markdown);
|
|
451
|
550
|
this.assertEqual(actual, expected);
|
|
452
|
551
|
}
|
|
453
|
552
|
|
|
454
|
553
|
test_link_literalEmail() {
|
|
455
|
554
|
let markdown = 'Lorem <user@example.com> dolor';
|
|
456
|
555
|
let expected = '<p>Lorem <a href="mailto:user@example.com">user@example.com</a> dolor</p>';
|
|
457
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
556
|
+ let actual = this.md(markdown);
|
|
458
|
557
|
this.assertEqual(actual, expected);
|
|
459
|
558
|
}
|
|
460
|
559
|
|
|
461
|
560
|
test_image() {
|
|
462
|
561
|
let markdown = 'Lorem  dolor';
|
|
463
|
562
|
let expected = '<p>Lorem <img src="image.jpg" alt="alt text"> dolor</p>';
|
|
464
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
563
|
+ let actual = this.md(markdown);
|
|
465
|
564
|
this.assertEqual(actual, expected);
|
|
466
|
565
|
}
|
|
467
|
566
|
|
|
468
|
567
|
test_image_noAlt() {
|
|
469
|
568
|
let markdown = 'Lorem  dolor';
|
|
470
|
569
|
let expected = '<p>Lorem <img src="image.jpg"> dolor</p>';
|
|
471
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
570
|
+ let actual = this.md(markdown);
|
|
472
|
571
|
this.assertEqual(actual, expected);
|
|
473
|
572
|
}
|
|
474
|
573
|
|
|
475
|
574
|
test_image_withTitle() {
|
|
476
|
575
|
let markdown = 'Lorem  dolor';
|
|
477
|
576
|
let expected = '<p>Lorem <img src="image.jpg" alt="alt text" title="image title"> dolor</p>';
|
|
478
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
577
|
+ let actual = this.md(markdown);
|
|
479
|
578
|
this.assertEqual(actual, expected);
|
|
480
|
579
|
}
|
|
481
|
580
|
}
|
|
482
|
581
|
|
|
483
|
582
|
class BlockTests extends BaseTest {
|
|
|
583
|
+ /** @type {Markdown} */
|
|
|
584
|
+ parser;
|
|
|
585
|
+ md(markdown) {
|
|
|
586
|
+ return normalizeWhitespace(this.parser.toHTML(markdown));
|
|
|
587
|
+ }
|
|
|
588
|
+
|
|
|
589
|
+ setUp() {
|
|
|
590
|
+ this.parser = Markdown.completeParser;
|
|
|
591
|
+ }
|
|
|
592
|
+
|
|
484
|
593
|
test_paragraphs() {
|
|
485
|
594
|
let markdown = "Lorem ipsum\n\nDolor sit amet";
|
|
486
|
595
|
let expected = "<p>Lorem ipsum</p> <p>Dolor sit amet</p>";
|
|
487
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
596
|
+ let actual = this.md(markdown);
|
|
488
|
597
|
this.assertEqual(actual, expected);
|
|
489
|
598
|
}
|
|
490
|
599
|
|
|
491
|
600
|
test_paragraph_lineGrouping() {
|
|
492
|
601
|
let markdown = "Lorem ipsum\ndolor sit amet";
|
|
493
|
602
|
let expected = "<p>Lorem ipsum dolor sit amet</p>";
|
|
494
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
603
|
+ let actual = this.md(markdown);
|
|
495
|
604
|
this.assertEqual(actual, expected);
|
|
496
|
605
|
}
|
|
497
|
606
|
|
|
498
|
607
|
test_unorderedList() {
|
|
499
|
608
|
let markdown = "* Lorem\n* Ipsum\n* Dolor";
|
|
500
|
609
|
let expected = '<ul> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ul>';
|
|
501
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
610
|
+ let actual = this.md(markdown);
|
|
502
|
611
|
this.assertEqual(actual, expected);
|
|
503
|
612
|
}
|
|
504
|
613
|
|
|
505
|
614
|
test_orderedList() {
|
|
506
|
615
|
let markdown = "1. Lorem\n1. Ipsum\n5. Dolor";
|
|
507
|
616
|
let expected = '<ol start="1"> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ol>';
|
|
508
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
617
|
+ let actual = this.md(markdown);
|
|
509
|
618
|
this.assertEqual(actual, expected);
|
|
510
|
619
|
}
|
|
511
|
620
|
|
|
512
|
621
|
test_orderedList_numbering() {
|
|
513
|
622
|
let markdown = "4. Lorem\n1. Ipsum\n9. Dolor";
|
|
514
|
623
|
let expected = '<ol start="4"> <li>Lorem</li> <li>Ipsum</li> <li>Dolor</li> </ol>';
|
|
515
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
624
|
+ let actual = this.md(markdown);
|
|
516
|
625
|
this.assertEqual(actual, expected);
|
|
517
|
626
|
}
|
|
518
|
627
|
|
|
519
|
628
|
test_blockquote() {
|
|
520
|
629
|
let markdown = '> Lorem ipsum dolor';
|
|
521
|
630
|
let expected = '<blockquote> <p>Lorem ipsum dolor</p> </blockquote>';
|
|
522
|
|
- let actual = normalizeWhitespace(Markdown.toHTML(markdown));
|
|
|
631
|
+ let actual = this.md(markdown);
|
|
523
|
632
|
this.assertEqual(actual, expected);
|
|
524
|
633
|
}
|
|
525
|
634
|
}
|
|
526
|
|
-
|
|
527
|
|
- document.addEventListener('DOMContentLoaded', onLoad);
|
|
528
|
635
|
</script>
|
|
529
|
636
|
</head>
|
|
530
|
637
|
<body>
|