| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- class BrokenSyntaxTests extends BaseTest {
- #parser;
-
- setUp() {
- this.#parser = Markdown.completeParser;
- }
-
- /**
- * @param {string} markdown
- */
- #iterateCharacters(markdown) {
- for (var i = 1; i < markdown.length; i++) {
- const portion = markdown.substring(0, i);
- this.#parser.toHTML(portion);
- }
- }
-
- test_brokenSyntax() {
- // Just try a bunch of broken syntax and make sure no exceptions are
- // thrown or infinite loops triggered. Don't care about what's rendered
- // as most of these are incomplete or invalid syntax.
- this.#iterateCharacters("# ");
- this.#iterateCharacters("## ");
- this.#iterateCharacters("Underlined\n-");
- this.#iterateCharacters("* ");
- this.#iterateCharacters(" * A");
- this.#iterateCharacters("- A");
- this.#iterateCharacters(" - A");
- this.#iterateCharacters("+ A");
- this.#iterateCharacters(" + A");
- this.#iterateCharacters("1. A");
- this.#iterateCharacters(" 1. A");
- this.#iterateCharacters("1. A\n 1. B\n 2. C\n2. D");
- this.#iterateCharacters("> A");
- this.#iterateCharacters("> \nA");
- this.#iterateCharacters("> \n>");
- this.#iterateCharacters(">>");
- this.#iterateCharacters("> > A");
- this.#iterateCharacters("> \n> A");
- this.#iterateCharacters("> > \n> A");
- this.#iterateCharacters("```\ncode\n```");
- this.#iterateCharacters("```java\ncode\n```");
- this.#iterateCharacters(" code\n code\n\n");
- this.#iterateCharacters("------");
- this.#iterateCharacters(" - - - --*");
- this.#iterateCharacters("Header|Header\n--|--\nCell|Cell");
- this.#iterateCharacters("Header\n--|--\nCell");
- this.#iterateCharacters("|Header|\n|-|\n|Cell|");
- this.#iterateCharacters("|Header|\n|--|--|--|\n|Cell|");
- this.#iterateCharacters("|Header|Header|\n|--|\n|Cell|Cell|");
- this.#iterateCharacters("|Header|\n|:-|\n|Cell|");
- this.#iterateCharacters("|Header|\n|:-:|\n|Cell|");
- this.#iterateCharacters("|Header|\n|-:|\n|Cell|");
- this.#iterateCharacters("term\n: definition\nterm\n: definition");
- this.#iterateCharacters("term\n:definition\nterm\n:definition");
- this.#iterateCharacters("HTML\n\n*[HTML]: Hypertext");
- this.#iterateCharacters("HTML\n*[HTML]: Hypertext");
- this.#iterateCharacters("*[HTML]: Hypertext\nHTML");
- this.#iterateCharacters("---{.foo}\n");
- this.#iterateCharacters("---{#foo}\n");
- this.#iterateCharacters("---{.foo #foo lang=en}\n");
- this.#iterateCharacters("lorem *ipsum* dolor *sit* amet");
- this.#iterateCharacters("*lorem* ipsum *dolor* sit *amet*");
- this.#iterateCharacters("*lorem *ipsum *dolor*** sit");
- this.#iterateCharacters("***lorem* ipsum* dolor* sit");
- this.#iterateCharacters("lorem _ipsum_ dolor _sit_ amet");
- this.#iterateCharacters("_lorem_ ipsum _dolor_ sit _amet_");
- this.#iterateCharacters("_lorem _ipsum _dolor___ sit");
- this.#iterateCharacters("___lorem_ ipsum_ dolor_ sit");
- this.#iterateCharacters("lorem **ipsum** dolor **sit** amet");
- this.#iterateCharacters("**lorem** ipsum **dolor** sit **amet**");
- this.#iterateCharacters("**lorem **ipsum **dolor****** sit");
- this.#iterateCharacters("******lorem** ipsum** dolor** sit");
- this.#iterateCharacters("lorem __ipsum__ dolor __sit__ amet");
- this.#iterateCharacters("__lorem__ ipsum __dolor__ sit __amet__");
- this.#iterateCharacters("lorem __ipsum__ dolor __sit__ amet");
- this.#iterateCharacters("__lorem __ipsum __dolor______ sit");
- this.#iterateCharacters("______lorem__ ipsum__ dolor__ sit");
- this.#iterateCharacters("*_**`~~^==!__~*^!``**-+!**`==!~_^**``_");
- this.#iterateCharacters("[link[(index.html(");
- this.#iterateCharacters("[link[](index.html()");
- this.#iterateCharacters("[link]](index.html))");
- this.#iterateCharacters("[[link]((index.html)");
- this.#iterateCharacters("]link])index.html)");
- this.#iterateCharacters("[ link ] ( index.html )");
- this.#iterateCharacters("(user@example.com)");
- this.#iterateCharacters("(https://user@example.com)");
- this.#iterateCharacters("(index.html \"title\")");
- this.#iterateCharacters("(index.html \"title)");
- this.#iterateCharacters("(index.html title\")");
- this.#iterateCharacters("(index.html title)");
- this.#iterateCharacters("![alt][image.jpg]");
- this.#iterateCharacters("");
- this.#iterateCharacters("! [alt](image.jpg)");
- this.#iterateCharacters("!(image.jpg)");
- this.#iterateCharacters("[][]]][][[][][][[][[]][][][][][[[]]]][]][][");
- this.#iterateCharacters("())())()()()(())(()((())))(()((()");
- this.#iterateCharacters("<https://example.com>");
- this.#iterateCharacters("<<https://example.com>");
- this.#iterateCharacters("<https://example.com>>");
- this.#iterateCharacters("[link][ref]\n\n[ref]: page.html");
- this.#iterateCharacters("[link][ref]\n[ref]: page.html");
- this.#iterateCharacters("[link][ref]\n\n[ref]:page.html");
- this.#iterateCharacters("[ref]: page.html\n\n[link][ref]");
- this.#iterateCharacters("[link][ref]\n\n[ref]: page.html \"title\"");
- this.#iterateCharacters("[link][ref]\n\n[ref]: page.html title");
- this.#iterateCharacters("Lorem[^1] ipsum[^abc] dolor[^-1]\n\n[^abc]: def\n[^1]: def\n[^-1]: def\n[^abc]: def");
- this.#iterateCharacters("Lorem[^1]\n\n[^2]: def");
- this.#iterateCharacters("[^1]] [[^2] [^3]] [[^4]] ]^5[");
- this.#iterateCharacters("[^1]: Def\n\nLorem[^1]");
- this.#iterateCharacters("[^1]: Def\n\nLorem[^2]");
- this.#iterateCharacters("Lorem <foo> ipsum");
- this.#iterateCharacters("Lorem <span> ipsum");
- this.#iterateCharacters("Lorem <span class=\"foo\" id=\"foo\" lang=\"en\"> ipsum");
- this.#iterateCharacters("Lorem </span> ipsum");
- this.#iterateCharacters("Lorem </span foo=\"bar\">");
- this.#iterateCharacters("Lorem <span foo='bar' baz=ipsum dolor> sit");
- this.#iterateCharacters("\\*\\\\*\\\\\\*\\\\\\\\*\\*");
- }
- }
|