// CodeMirror, copyright © by Marijn Haverbeke and others // Distributed under an MIT license: codemirror.net/LICENSE

(function() {

var mode = CodeMirror.getMode({tabSize: 4}, 'textile');
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }

MT('simpleParagraphs',
    'Some text.',
    '',
    'Some more text.');

/*
 * Phrase Modifiers
 */

MT('em',
    'foo [em _bar_]');

MT('emBoogus',
    'code_mirror');

MT('strong',
    'foo [strong *bar*]');

MT('strongBogus',
    '3 * 3 = 9');

MT('italic',
    'foo [em __bar__]');

MT('italicBogus',
    'code__mirror');

MT('bold',
    'foo [strong **bar**]');

MT('boldBogus',
    '3 ** 3 = 27');

MT('simpleLink',
    '[link "CodeMirror":http://codemirror.net]');

MT('referenceLink',
    '[link "CodeMirror":code_mirror]',
    'Normal Text.',
    '[link [[code_mirror]]http://codemirror.net]');

MT('footCite',
    'foo bar[qualifier [[1]]]');

MT('footCiteBogus',
    'foo bar[[1a2]]');

MT('special-characters',
        'Registered [tag (r)], ' +
        'Trademark [tag (tm)], and ' +
        'Copyright [tag (c)] 2008');

MT('cite',
    "A book is [keyword ??The Count of Monte Cristo??] by Dumas.");

MT('additionAndDeletion',
    'The news networks declared [negative -Al Gore-] ' +
      '[positive +George W. Bush+] the winner in Florida.');

MT('subAndSup',
    'f(x, n) = log [builtin ~4~] x [builtin ^n^]');

MT('spanAndCode',
    'A [quote %span element%] and [atom @code element@]');

MT('spanBogus',
    'Percentage 25% is not a span.');

MT('citeBogus',
    'Question? is not a citation.');

MT('codeBogus',
    'user@example.com');

MT('subBogus',
    '~username');

MT('supBogus',
    'foo ^ bar');

MT('deletionBogus',
    '3 - 3 = 0');

MT('additionBogus',
    '3 + 3 = 6');

MT('image',
    'An image: [string !http://www.example.com/image.png!]');

MT('imageWithAltText',
    'An image: [string !http://www.example.com/image.png (Alt Text)!]');

MT('imageWithUrl',
    'An image: [string !http://www.example.com/image.png!:http://www.example.com/]');

/*
 * Headers
 */

MT('h1',
    '[header&header-1 h1. foo]');

MT('h2',
    '[header&header-2 h2. foo]');

MT('h3',
    '[header&header-3 h3. foo]');

MT('h4',
    '[header&header-4 h4. foo]');

MT('h5',
    '[header&header-5 h5. foo]');

MT('h6',
    '[header&header-6 h6. foo]');

MT('h7Bogus',
    'h7. foo');

MT('multipleHeaders',
    '[header&header-1 h1. Heading 1]',
    '',
    'Some text.',
    '',
    '[header&header-2 h2. Heading 2]',
    '',
    'More text.');

MT('h1inline',
    '[header&header-1 h1. foo ][header&header-1&em _bar_][header&header-1  baz]');

/*
 * Lists
 */

MT('ul',
    'foo',
    'bar',
    '',
    '[variable-2 * foo]',
    '[variable-2 * bar]');

MT('ulNoBlank',
    'foo',
    'bar',
    '[variable-2 * foo]',
    '[variable-2 * bar]');

MT('ol',
    'foo',
    'bar',
    '',
    '[variable-2 # foo]',
    '[variable-2 # bar]');

MT('olNoBlank',
    'foo',
    'bar',
    '[variable-2 # foo]',
    '[variable-2 # bar]');

MT('ulFormatting',
    '[variable-2 * ][variable-2&em _foo_][variable-2 bar]',
    '[variable-2 * ][variable-2&strong *][variable-2&em&strong _foo_]' +
      '[variable-2&strong *][variable-2  bar]',
    '[variable-2 * ][variable-2&strong *foo*][variable-2 bar]');

MT('olFormatting',
    '[variable-2 # ][variable-2&em _foo_][variable-2 bar]',
    '[variable-2 # ][variable-2&strong *][variable-2&em&strong _foo_]' +
      '[variable-2&strong *][variable-2  bar]',
    '[variable-2 # ][variable-2&strong *foo*][variable-2 bar]');

MT('ulNested',
    '[variable-2 * foo]',
    '[variable-3 ** bar]',
    '[keyword *** bar]',
    '[variable-2 **** bar]',
    '[variable-3 ** bar]');

MT('olNested',
    '[variable-2 # foo]',
    '[variable-3 ## bar]',
    '[keyword ### bar]',
    '[variable-2 #### bar]',
    '[variable-3 ## bar]');

MT('ulNestedWithOl',
    '[variable-2 * foo]',
    '[variable-3 ## bar]',
    '[keyword *** bar]',
    '[variable-2 #### bar]',
    '[variable-3 ** bar]');

MT('olNestedWithUl',
    '[variable-2 # foo]',
    '[variable-3 ** bar]',
    '[keyword ### bar]',
    '[variable-2 **** bar]',
    '[variable-3 ## bar]');

MT('definitionList',
    '[number - coffee := Hot ][number&em _and_][number  black]',
    '',
    'Normal text.');

MT('definitionListSpan',
    '[number - coffee :=]',
    '',
    '[number Hot ][number&em _and_][number  black =:]',
    '',
    'Normal text.');

MT('boo',
    '[number - dog := woof woof]',
    '[number - cat := meow meow]',
    '[number - whale :=]',
    '[number Whale noises.]',
    '',
    '[number Also, ][number&em _splashing_][number . =:]');

/*
 * Attributes
 */

MT('divWithAttribute',
    '[punctuation div][punctuation&attribute (#my-id)][punctuation . foo bar]');

MT('divWithAttributeAnd2emRightPadding',
    '[punctuation div][punctuation&attribute (#my-id)((][punctuation . foo bar]');

MT('divWithClassAndId',
    '[punctuation div][punctuation&attribute (my-class#my-id)][punctuation . foo bar]');

MT('paragraphWithCss',
    'p[attribute {color:red;}]. foo bar');

MT('paragraphNestedStyles',
    'p. [strong *foo ][strong&em _bar_][strong *]');

MT('paragraphWithLanguage',
    'p[attribute [[fr]]]. Parlez-vous français?');

MT('paragraphLeftAlign',
    'p[attribute <]. Left');

MT('paragraphRightAlign',
    'p[attribute >]. Right');

MT('paragraphRightAlign',
    'p[attribute =]. Center');

MT('paragraphJustified',
    'p[attribute <>]. Justified');

MT('paragraphWithLeftIndent1em',
    'p[attribute (]. Left');

MT('paragraphWithRightIndent1em',
    'p[attribute )]. Right');

MT('paragraphWithLeftIndent2em',
    'p[attribute ((]. Left');

MT('paragraphWithRightIndent2em',
    'p[attribute ))]. Right');

MT('paragraphWithLeftIndent3emRightIndent2em',
    'p[attribute ((())]. Right');

MT('divFormatting',
    '[punctuation div. ][punctuation&strong *foo ]' +
      '[punctuation&strong&em _bar_][punctuation&strong *]');

MT('phraseModifierAttributes',
    'p[attribute (my-class)]. This is a paragraph that has a class and' +
    ' this [em _][em&attribute (#special-phrase)][em emphasized phrase_]' +
    ' has an id.');

MT('linkWithClass',
    '[link "(my-class). This is a link with class":http://redcloth.org]');

/*
 * Layouts
 */

MT('paragraphLayouts',
    'p. This is one paragraph.',
    '',
    'p. This is another.');

MT('div',
    '[punctuation div. foo bar]');

MT('pre',
    '[operator pre. Text]');

MT('bq.',
    '[bracket bq. foo bar]',
    '',
    'Normal text.');

MT('footnote',
    '[variable fn123. foo ][variable&strong *bar*]');

/*
 * Spanning Layouts
 */

MT('bq..ThenParagraph',
    '[bracket bq.. foo bar]',
    '',
    '[bracket More quote.]',
    'p. Normal Text');

MT('bq..ThenH1',
    '[bracket bq.. foo bar]',
    '',
    '[bracket More quote.]',
    '[header&header-1 h1. Header Text]');

MT('bc..ThenParagraph',
    '[atom bc.. # Some ruby code]',
    '[atom obj = {foo: :bar}]',
    '[atom puts obj]',
    '',
    '[atom obj[[:love]] = "*love*"]',
    '[atom puts obj.love.upcase]',
    '',
    'p. Normal text.');

MT('fn1..ThenParagraph',
    '[variable fn1.. foo bar]',
    '',
    '[variable More.]',
    'p. Normal Text');

MT('pre..ThenParagraph',
    '[operator pre.. foo bar]',
    '',
    '[operator More.]',
    'p. Normal Text');

/*
 * Tables
 */

MT('table',
    '[variable-3&operator |_. name |_. age|]',
    '[variable-3 |][variable-3&strong *Walter*][variable-3 |   5  |]',
    '[variable-3 |Florence|   6  |]',
    '',
    'p. Normal text.');

MT('tableWithAttributes',
    '[variable-3&operator |_. name |_. age|]',
    '[variable-3 |][variable-3&attribute /2.][variable-3  Jim |]',
    '[variable-3 |][variable-3&attribute \\2{color: red}.][variable-3  Sam |]');

/*
 * HTML
 */

MT('html',
    '[comment <div id="wrapper">]',
    '[comment <section id="introduction">]',
    '',
    '[header&header-1 h1. Welcome]',
    '',
    '[variable-2 * Item one]',
    '[variable-2 * Item two]',
    '',
    '[comment <a href="http://example.com">Example</a>]',
    '',
    '[comment </section>]',
    '[comment </div>]');

MT('inlineHtml',
    'I can use HTML directly in my [comment <span class="youbetcha">Textile</span>].');

/*
 * No-Textile
 */

MT('notextile',
  '[string-2 notextile. *No* formatting]');

MT('notextileInline',
    'Use [string-2 ==*asterisks*==] for [strong *strong*] text.');

MT('notextileWithPre',
    '[operator pre. *No* formatting]');

MT('notextileWithSpanningPre',
    '[operator pre.. *No* formatting]',
    '',
    '[operator *No* formatting]');

})();