2013-07-03 15:01:01 +00:00
/ * \
title : test - wikitext - parser . js
type : application / javascript
tags : [ [ $ : / t a g s / t e s t - s p e c ] ]
Tests for wikitext parser
\ * /
( function ( ) {
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict" ;
describe ( "WikiText parser tests" , function ( ) {
// Create a wiki
var wiki = new $tw . Wiki ( ) ;
// Define a parsing shortcut
var parse = function ( text ) {
2013-11-08 08:51:14 +00:00
return wiki . parseText ( "text/vnd.tiddlywiki" , text ) . tree ;
2013-07-03 15:01:01 +00:00
} ;
it ( "should parse tags" , function ( ) {
expect ( parse ( "<br>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'br' , isBlock : false , attributes : { } , start : 0 , end : 4 } ] } ]
) ;
expect ( parse ( "</br>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'text' , text : '</br>' } ] } ]
) ;
expect ( parse ( "<div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { } , children : [ ] , start : 0 , end : 5 } ] } ]
) ;
expect ( parse ( "<div/>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isSelfClosing : true , isBlock : false , attributes : { } , start : 0 , end : 6 } ] } ]
) ;
expect ( parse ( "<div></div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { } , children : [ ] , start : 0 , end : 5 } ] } ]
) ;
expect ( parse ( "<div>some text</div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { } , children : [ { type : 'text' , text : 'some text' } ] , start : 0 , end : 5 } ] } ]
) ;
expect ( parse ( "<div attribute>some text</div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { attribute : { type : 'string' , value : 'true' , start : 4 , end : 14 , name : 'attribute' } } , children : [ { type : 'text' , text : 'some text' } ] , start : 0 , end : 15 } ] } ]
) ;
expect ( parse ( "<div attribute='value'>some text</div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { attribute : { type : 'string' , name : 'attribute' , value : 'value' , start : 4 , end : 22 } } , children : [ { type : 'text' , text : 'some text' } ] , start : 0 , end : 23 } ] } ]
) ;
expect ( parse ( "<div attribute={{TiddlerTitle}}>some text</div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { attribute : { type : 'indirect' , name : 'attribute' , textReference : 'TiddlerTitle' , start : 4 , end : 31 } } , children : [ { type : 'text' , text : 'some text' } ] , start : 0 , end : 32 } ] } ]
) ;
expect ( parse ( "<$reveal state='$:/temp/search' type='nomatch' text=''>" ) ) . toEqual (
2014-05-14 07:51:08 +00:00
[ { type : 'element' , tag : 'p' , children : [ { type : 'reveal' , tag : '$reveal' , start : 0 , attributes : { state : { start : 8 , name : 'state' , type : 'string' , value : '$:/temp/search' , end : 31 } , type : { start : 31 , name : 'type' , type : 'string' , value : 'nomatch' , end : 46 } , text : { start : 46 , name : 'text' , type : 'string' , value : '' , end : 54 } } , end : 55 , isBlock : false , children : [ ] } ] } ]
2013-07-03 15:01:01 +00:00
) ;
expect ( parse ( "<div attribute={{TiddlerTitle!!field}}>some text</div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { attribute : { type : 'indirect' , name : 'attribute' , textReference : 'TiddlerTitle!!field' , start : 4 , end : 38 } } , children : [ { type : 'text' , text : 'some text' } ] , start : 0 , end : 39 } ] } ]
2013-10-31 12:37:47 +00:00
) ;
expect ( parse ( "<div attribute={{Tiddler Title!!field}}>some text</div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , tag : 'div' , isBlock : false , attributes : { attribute : { type : 'indirect' , name : 'attribute' , textReference : 'Tiddler Title!!field' , start : 4 , end : 39 } } , children : [ { type : 'text' , text : 'some text' } ] , start : 0 , end : 40 } ] } ]
2013-07-03 15:01:01 +00:00
) ;
2014-02-20 21:42:31 +00:00
expect ( parse ( "<div attribute={{TiddlerTitle!!field}}>\n\nsome text</div>" ) ) . toEqual (
2013-07-03 15:01:01 +00:00
[ { type : 'element' , start : 0 , attributes : { attribute : { start : 4 , name : 'attribute' , type : 'indirect' , textReference : 'TiddlerTitle!!field' , end : 38 } } , tag : 'div' , end : 39 , isBlock : true , children : [ { type : 'element' , tag : 'p' , children : [ { type : 'text' , text : 'some text' } ] } ] } ]
) ;
2014-02-20 21:42:31 +00:00
expect ( parse ( "<div><div attribute={{TiddlerTitle!!field}}>\n\nsome text</div></div>" ) ) . toEqual (
2013-07-03 15:01:01 +00:00
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , start : 0 , attributes : { } , tag : 'div' , end : 5 , isBlock : false , children : [ { type : 'element' , start : 5 , attributes : { attribute : { start : 9 , name : 'attribute' , type : 'indirect' , textReference : 'TiddlerTitle!!field' , end : 43 } } , tag : 'div' , end : 44 , isBlock : true , children : [ { type : 'element' , tag : 'p' , children : [ { type : 'text' , text : 'some text' } ] } ] } ] } ] } ]
) ;
2014-02-20 21:42:31 +00:00
expect ( parse ( "<div><div attribute={{TiddlerTitle!!field}}>\n\n!some heading</div></div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , start : 0 , attributes : { } , tag : 'div' , end : 5 , isBlock : false , children : [ { type : 'element' , start : 5 , attributes : { attribute : { start : 9 , name : 'attribute' , type : 'indirect' , textReference : 'TiddlerTitle!!field' , end : 43 } } , tag : 'div' , end : 44 , isBlock : true , children : [ { type : 'element' , tag : 'h1' , attributes : { class : { type : 'string' , value : '' } } , children : [ { type : 'text' , text : 'some heading</div></div>' } ] } ] } ] } ] } ]
) ;
expect ( parse ( "<div><div attribute={{TiddlerTitle!!field}}>\n!some heading</div></div>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'element' , start : 0 , attributes : { } , tag : 'div' , end : 5 , isBlock : false , children : [ { type : 'element' , start : 5 , attributes : { attribute : { start : 9 , name : 'attribute' , type : 'indirect' , textReference : 'TiddlerTitle!!field' , end : 43 } } , tag : 'div' , end : 44 , isBlock : false , children : [ { type : 'text' , text : '\n!some heading' } ] } ] } ] } ]
) ;
2013-07-03 15:01:01 +00:00
} ) ;
it ( "should parse macro definitions" , function ( ) {
expect ( parse ( "\\define myMacro()\nnothing\n\\end\n" ) ) . toEqual (
2018-07-03 11:09:59 +00:00
[ { type : 'set' , attributes : { name : { type : 'string' , value : 'myMacro' } , value : { type : 'string' , value : 'nothing' } } , children : [ ] , params : [ ] , isMacroDefinition : true } ]
2013-07-03 15:01:01 +00:00
) ;
} ) ;
2013-11-17 21:53:12 +00:00
it ( "should parse macro calls" , function ( ) {
expect ( parse ( "<<john>><<paul>><<george>><<ringo>>" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'macrocall' , name : 'john' , params : [ ] } , { type : 'macrocall' , name : 'paul' , params : [ ] } , { type : 'macrocall' , name : 'george' , params : [ ] } , { type : 'macrocall' , name : 'ringo' , params : [ ] } ] } ]
) ;
} ) ;
2013-12-30 11:45:18 +00:00
it ( "should parse horizontal rules" , function ( ) {
expect ( parse ( "---Not a rule\n\n----\n\nBetween\n\n---" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'entity' , entity : '—' } , { type : 'text' , text : 'Not a rule' } ] } , { type : 'element' , tag : 'hr' } , { type : 'element' , tag : 'p' , children : [ { type : 'text' , text : 'Between' } ] } , { type : 'element' , tag : 'hr' } ]
) ;
} ) ;
2013-12-14 17:05:57 +00:00
it ( "should parse hard linebreak areas" , function ( ) {
expect ( parse ( "\"\"\"Something\nin the\nway she moves\n\"\"\"\n\n" ) ) . toEqual (
[ { type : 'element' , tag : 'p' , children : [ { type : 'text' , text : 'Something' } , { type : 'element' , tag : 'br' } , { type : 'text' , text : 'in the' } , { type : 'element' , tag : 'br' } , { type : 'text' , text : 'way she moves' } , { type : 'element' , tag : 'br' } ] } ]
) ;
} ) ;
2013-07-03 15:01:01 +00:00
} ) ;
} ) ( ) ;