// Initiate ModeTest and set defaults var MT = ModeTest; MT.modeName = 'gfm'; MT.modeOptions = {}; // Emphasis characters within a word MT.testMode( 'emInWordAsterisk', 'foo*bar*hello', [ null, 'foo', 'em', '*bar*', null, 'hello' ] ); MT.testMode( 'emInWordUnderscore', 'foo_bar_hello', [ null, 'foo_bar_hello' ] ); MT.testMode( 'emStrongUnderscore', '___foo___ bar', [ 'strong', '__', 'emstrong', '_foo__', 'em', '_', null, ' bar' ] ); // Fenced code blocks MT.testMode( 'fencedCodeBlocks', '```\nfoo\n\n```\nbar', [ 'comment', '```', 'comment', 'foo', 'comment', '```', null, 'bar' ] ); // Fenced code block mode switching MT.testMode( 'fencedCodeBlockModeSwitching', '```javascript\nfoo\n\n```\nbar', [ 'comment', '```javascript', 'variable', 'foo', 'comment', '```', null, 'bar' ] ); // SHA MT.testMode( 'SHA', 'foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2 bar', [ null, 'foo ', 'link', 'be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2', null, ' bar' ] ); // GitHub highlights hashes 7-40 chars in length MT.testMode( 'shortSHA', 'foo be6a8cc bar', [ null, 'foo ', 'link', 'be6a8cc', null, ' bar' ] ); // Invalid SHAs // // GitHub does not highlight hashes shorter than 7 chars MT.testMode( 'tooShortSHA', 'foo be6a8c bar', [ null, 'foo be6a8c bar' ] ); // GitHub does not highlight hashes longer than 40 chars MT.testMode( 'longSHA', 'foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar', [ null, 'foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar' ] ); MT.testMode( 'badSHA', 'foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar', [ null, 'foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar' ] ); // User@SHA MT.testMode( 'userSHA', 'foo bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2 hello', [ null, 'foo ', 'link', 'bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2', null, ' hello' ] ); // User/Project@SHA MT.testMode( 'userProjectSHA', 'foo bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2 world', [ null, 'foo ', 'link', 'bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2', null, ' world' ] ); // #Num MT.testMode( 'num', 'foo #1 bar', [ null, 'foo ', 'link', '#1', null, ' bar' ] ); // bad #Num MT.testMode( 'badNum', 'foo #1bar hello', [ null, 'foo #1bar hello' ] ); // User#Num MT.testMode( 'userNum', 'foo bar#1 hello', [ null, 'foo ', 'link', 'bar#1', null, ' hello' ] ); // User/Project#Num MT.testMode( 'userProjectNum', 'foo bar/hello#1 world', [ null, 'foo ', 'link', 'bar/hello#1', null, ' world' ] ); // Vanilla links MT.testMode( 'vanillaLink', 'foo http://www.example.com/ bar', [ null, 'foo ', 'link', 'http://www.example.com/', null, ' bar' ] ); MT.testMode( 'vanillaLinkPunctuation', 'foo http://www.example.com/. bar', [ null, 'foo ', 'link', 'http://www.example.com/', null, '. bar' ] ); MT.testMode( 'vanillaLinkExtension', 'foo http://www.example.com/index.html bar', [ null, 'foo ', 'link', 'http://www.example.com/index.html', null, ' bar' ] ); // Not a link MT.testMode( 'notALink', '```css\nfoo {color:black;}\n```http://www.example.com/', [ 'comment', '```css', 'tag', 'foo', null, ' {', 'property', 'color', 'operator', ':', 'keyword', 'black', null, ';}', 'comment', '```', 'link', 'http://www.example.com/' ] ); // Not a link MT.testMode( 'notALink', '``foo `bar` http://www.example.com/`` hello', [ 'comment', '``foo `bar` http://www.example.com/``', null, ' hello' ] ); // Not a link MT.testMode( 'notALink', '`foo\nhttp://www.example.com/\n`foo\n\nhttp://www.example.com/', [ 'comment', '`foo', 'link', 'http://www.example.com/', 'comment', '`foo', 'link', 'http://www.example.com/' ] );