2013-05-25 16:26:22 +00:00
/ * \
title : test - filters . js
type : application / javascript
tags : [ [ $ : / t a g s / t e s t - s p e c ] ]
Tests the filtering mechanism .
\ * /
( function ( ) {
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict" ;
describe ( "Filter tests" , function ( ) {
2018-10-30 17:39:18 +00:00
// Test filter parsing
it ( "should parse new-style rich operator suffixes" , function ( ) {
expect ( $tw . wiki . parseFilter ( "[search:: four, , five,, six [operand]]" ) ) . toEqual (
[ { prefix : '' , operators : [ { operator : 'search' , suffix : ': four, , five,, six ' , suffixes : [ [ ] , [ 'four' , 'five' , 'six' ] ] , operand : 'operand' } ] } ]
) ;
expect ( $tw . wiki . parseFilter ( "[search: one, two ,three :[operand]]" ) ) . toEqual (
[ { prefix : '' , operators : [ { operator : 'search' , suffix : ' one, two ,three :' , suffixes : [ [ 'one' , 'two' , 'three' ] , [ ] ] , operand : 'operand' } ] } ]
) ;
expect ( $tw . wiki . parseFilter ( "[search: one, two ,three :[operand]]" ) ) . toEqual (
[ { prefix : '' , operators : [ { operator : 'search' , suffix : ' one, two ,three :' , suffixes : [ [ 'one' , 'two' , 'three' ] , [ ] ] , operand : 'operand' } ] } ]
) ;
expect ( $tw . wiki . parseFilter ( "[search: one, two ,three : four, , five,, six [operand]]" ) ) . toEqual (
[ { prefix : '' , operators : [ { operator : 'search' , suffix : ' one, two ,three : four, , five,, six ' , suffixes : [ [ 'one' , 'two' , 'three' ] , [ 'four' , 'five' , 'six' ] ] , operand : 'operand' } ] } ]
) ;
expect ( $tw . wiki . parseFilter ( "[search: , : [operand]]" ) ) . toEqual (
[ { prefix : '' , operators : [ { operator : 'search' , suffix : ' , : ' , suffixes : [ [ ] , [ ] ] , operand : 'operand' } ] } ]
) ;
} ) ;
2013-05-25 16:26:22 +00:00
// Create a wiki
2014-03-17 10:50:18 +00:00
var wiki = new $tw . Wiki ( {
shadowTiddlers : {
"$:/TiddlerFive" : {
tiddler : new $tw . Tiddler ( { title : "$:/TiddlerFive" ,
text : "Everything in federation" ,
tags : [ "two" ]
} ) ,
} ,
"TiddlerSix" : {
tiddler : new $tw . Tiddler ( { title : "TiddlerSix" ,
text : "Missing inaction from TiddlerOne" ,
tags : [ ]
} ) ,
} ,
"TiddlerSeventh" : {
tiddler : new $tw . Tiddler ( { title : "TiddlerSeventh" ,
text : "" ,
list : "TiddlerOne [[Tiddler Three]] [[a fourth tiddler]] MissingTiddler" ,
2015-01-27 17:20:03 +00:00
tags : [ "one" ]
2014-03-17 10:50:18 +00:00
} ) ,
} ,
"Tiddler8" : {
tiddler : new $tw . Tiddler ( { title : "Tiddler8" ,
text : "Tidd" ,
2015-01-27 17:20:03 +00:00
tags : [ "one" ] ,
2014-03-17 10:50:18 +00:00
"test-field" : "JoeBloggs"
} )
}
}
} ) ;
2013-05-25 16:26:22 +00:00
// Add a few tiddlers
wiki . addTiddler ( {
title : "TiddlerOne" ,
text : "The quick brown fox in $:/TiddlerTwo" ,
tags : [ "one" ] ,
2015-01-27 01:02:15 +00:00
authors : "Joe Bloggs" ,
2013-05-27 16:59:47 +00:00
modifier : "JoeBloggs" ,
2014-01-30 06:11:54 +00:00
modified : "201304152222" } ) ;
2013-05-25 16:26:22 +00:00
wiki . addTiddler ( {
title : "$:/TiddlerTwo" ,
text : "The rain in Spain\nfalls mainly on the plain and [[a fourth tiddler]]" ,
2013-05-27 16:59:47 +00:00
tags : [ "two" ] ,
2015-01-27 01:02:15 +00:00
authors : "[[John Doe]]" ,
2013-05-27 16:59:47 +00:00
modifier : "JohnDoe" ,
2014-01-30 06:11:54 +00:00
modified : "201304152211" } ) ;
2013-05-25 16:26:22 +00:00
wiki . addTiddler ( {
title : "Tiddler Three" ,
text : "The speed of sound in light\n\nThere is no TiddlerZero but TiddlerSix" ,
2013-05-27 16:59:47 +00:00
tags : [ "one" , "two" ] ,
modifier : "JohnDoe" ,
2014-01-30 14:28:54 +00:00
modified : "201304162202" } ) ;
2013-05-25 16:26:22 +00:00
wiki . addTiddler ( {
title : "a fourth tiddler" ,
text : "The quality of mercy is not drained by [[Tiddler Three]]" ,
2013-05-27 16:59:47 +00:00
tags : [ ] ,
2017-02-22 12:13:59 +00:00
empty : "not" ,
2013-05-27 16:59:47 +00:00
modifier : "JohnDoe" } ) ;
2013-08-07 15:06:46 +00:00
wiki . addTiddler ( {
title : "one" ,
text : "This is the text of tiddler [[one]]" ,
list : "[[Tiddler Three]] [[TiddlerOne]]" ,
2017-02-22 12:13:59 +00:00
empty : "" ,
2013-08-07 15:06:46 +00:00
modifier : "JohnDoe" } ) ;
2013-05-25 16:26:22 +00:00
// Our tests
2018-11-20 13:29:44 +00:00
it ( "should handle the ~ prefix" , function ( ) {
expect ( wiki . filterTiddlers ( "[modifier[JoeBloggs]] ~[[No such tiddler]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[modifier[JaneBloggs]] ~[[No such tiddler]]" ) . join ( "," ) ) . toBe ( "No such tiddler" ) ;
expect ( wiki . filterTiddlers ( "~[[No such tiddler]]" ) . join ( "," ) ) . toBe ( "No such tiddler" ) ;
expect ( wiki . filterTiddlers ( "[my-field[present]] ~[[No such tiddler]]" ) . join ( "," ) ) . toBe ( "No such tiddler" ) ;
} ) ;
2017-09-07 14:48:00 +00:00
it ( "should handle the lookup operator" , function ( ) {
expect ( wiki . filterTiddlers ( "Six Seventh 8 +[lookup[Tiddler]]" ) . join ( "," ) ) . toBe ( "Missing inaction from TiddlerOne,,Tidd" ) ;
expect ( wiki . filterTiddlers ( "Six Seventh 8 +[lookup:8[Tiddler]]" ) . join ( "," ) ) . toBe ( "Missing inaction from TiddlerOne,Tidd,Tidd" ) ;
} ) ;
2014-03-17 10:50:18 +00:00
it ( "should retrieve shadow tiddlers" , function ( ) {
expect ( wiki . getTiddlerText ( "Tiddler8" ) ) . toBe ( "Tidd" ) ;
} ) ;
2013-05-25 16:26:22 +00:00
it ( "should handle the title operator" , function ( ) {
expect ( wiki . filterTiddlers ( "TiddlerOne [title[$:/TiddlerTwo]] [[Tiddler Three]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,Tiddler Three" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!title[Tiddler Three]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,a fourth tiddler,one" ) ;
2013-05-25 16:26:22 +00:00
expect ( wiki . filterTiddlers ( "TiddlerOne [title[$:/TiddlerTwo]] [[Tiddler Three]] [[A Missing Tiddler]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,Tiddler Three,A Missing Tiddler" ) ;
} ) ;
it ( "should handle the field operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[modifier[JoeBloggs]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!modifier[JoeBloggs]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,Tiddler Three,a fourth tiddler,one" ) ;
expect ( wiki . filterTiddlers ( "[!is[system]!modifier[JoeBloggs]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,a fourth tiddler,one" ) ;
2014-01-24 19:15:34 +00:00
expect ( wiki . filterTiddlers ( "[field:modifier[JoeBloggs]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[!field:modifier[JoeBloggs]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,Tiddler Three,a fourth tiddler,one" ) ;
expect ( wiki . filterTiddlers ( "[!is[system]!field:modifier[JoeBloggs]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,a fourth tiddler,one" ) ;
} ) ;
2014-09-09 14:57:41 +00:00
it ( "should handle the regexp operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[regexp[id]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,Tiddler Three,a fourth tiddler" ) ;
expect ( wiki . filterTiddlers ( "[!regexp[id]]" ) . join ( "," ) ) . toBe ( "one" ) ;
expect ( wiki . filterTiddlers ( "[regexp[Tid]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[regexp[(?i)Tid]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,Tiddler Three,a fourth tiddler" ) ;
expect ( wiki . filterTiddlers ( "[!regexp[Tid(?i)]]" ) . join ( "," ) ) . toBe ( "one" ) ;
} ) ;
2014-01-24 19:15:34 +00:00
it ( "should handle the field operator with a regular expression operand" , function ( ) {
expect ( wiki . filterTiddlers ( "[modifier/JoeBloggs/]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[modifier/Jo/]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,Tiddler Three,a fourth tiddler,one" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the prefix operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[prefix[Tiddler]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[prefix[nothing]]" ) . join ( "," ) ) . toBe ( "" ) ;
} ) ;
it ( "should handle the sort and sortcs operators" , function ( ) {
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[!sort[title]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,Tiddler Three,one,a fourth tiddler,$:/TiddlerTwo" ) ;
2014-05-16 13:46:55 +00:00
// Temporarily commenting out the following two lines because of platform differences for localeCompare between the browser and Node.js
// expect(wiki.filterTiddlers("[sortcs[title]]").join(",")).toBe("$:/TiddlerTwo,Tiddler Three,TiddlerOne,a fourth tiddler,one");
// expect(wiki.filterTiddlers("[!sortcs[title]]").join(",")).toBe("one,a fourth tiddler,TiddlerOne,Tiddler Three,$:/TiddlerTwo");
2013-05-25 16:26:22 +00:00
} ) ;
2014-01-25 17:44:14 +00:00
it ( "should handle the reverse, first, last, butfirst, butlast, rest and nth operators" , function ( ) {
expect ( wiki . filterTiddlers ( "[sort[title]first[]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]first[2]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]first[8]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]first[x]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]last[]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]last[2]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]last[8]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]last[x]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]reverse[]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,Tiddler Three,one,a fourth tiddler,$:/TiddlerTwo" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]reverse[x]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,Tiddler Three,one,a fourth tiddler,$:/TiddlerTwo" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]butlast[]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]butlast[2]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]butlast[8]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]butlast[x]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]rest[]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]rest[2]]" ) . join ( "," ) ) . toBe ( "one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]rest[8]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]rest[x]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]nth[]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]nth[2]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]nth[8]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[sort[title]nth[x]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo" ) ;
} ) ;
2013-05-25 16:26:22 +00:00
it ( "should handle the tag operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[tag[one]sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!tag[one]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one" ) ;
2013-05-25 16:26:22 +00:00
expect ( wiki . filterTiddlers ( "[prefix[Tidd]tag[one]sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[!is[shadow]tag[two]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,Tiddler Three" ) ;
2014-04-03 19:49:16 +00:00
expect ( wiki . filterTiddlers ( "[all[shadows]tag[two]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerFive" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the tags operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[tags[]sort[title]]" ) . join ( "," ) ) . toBe ( "one,two" ) ;
expect ( wiki . filterTiddlers ( "[[TiddlerOne]tags[]sort[title]]" ) . join ( "," ) ) . toBe ( "one" ) ;
} ) ;
it ( "should handle the tagging operator" , function ( ) {
2015-01-27 17:20:03 +00:00
expect ( wiki . filterTiddlers ( "[[one]tagging[]sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,Tiddler8,TiddlerOne,TiddlerSeventh" ) ;
2015-03-11 21:58:45 +00:00
expect ( wiki . filterTiddlers ( "[[one]tagging[]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne,TiddlerSeventh,Tiddler8" ) ;
2014-03-11 15:53:41 +00:00
expect ( wiki . filterTiddlers ( "[[two]tagging[]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerFive,$:/TiddlerTwo,Tiddler Three" ) ;
2014-04-27 20:58:41 +00:00
var fakeWidget = { getVariable : function ( ) { return "one" ; } } ;
2015-03-11 21:58:45 +00:00
expect ( wiki . filterTiddlers ( "[all[current]tagging[]]" , fakeWidget ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne,TiddlerSeventh,Tiddler8" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
2013-09-14 15:28:46 +00:00
it ( "should handle the untagged operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[untagged[]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one" ) ;
expect ( wiki . filterTiddlers ( "[!untagged[]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,Tiddler Three,TiddlerOne" ) ;
} ) ;
2013-05-25 16:26:22 +00:00
it ( "should handle the links operator" , function ( ) {
2015-01-11 16:44:51 +00:00
expect ( wiki . filterTiddlers ( "[!is[shadow]links[]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerSix,TiddlerZero" ) ;
2014-04-03 19:49:16 +00:00
expect ( wiki . filterTiddlers ( "[all[shadows]links[]sort[title]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the backlinks operator" , function ( ) {
2015-01-11 16:44:51 +00:00
expect ( wiki . filterTiddlers ( "[!is[shadow]backlinks[]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one,TiddlerOne" ) ;
2014-04-03 19:49:16 +00:00
expect ( wiki . filterTiddlers ( "[all[shadows]backlinks[]sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the has operator" , function ( ) {
2013-05-27 16:59:47 +00:00
expect ( wiki . filterTiddlers ( "[has[modified]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,Tiddler Three,TiddlerOne" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!has[modified]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
2017-02-22 12:13:59 +00:00
it ( "should handle the has:field operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[has:field[empty]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one" ) ;
expect ( wiki . filterTiddlers ( "[!has:field[empty]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,Tiddler Three,TiddlerOne" ) ;
} ) ;
2013-05-25 16:26:22 +00:00
it ( "should handle the limit operator" , function ( ) {
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!is[system]sort[title]limit[2]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one" ) ;
2013-05-25 16:26:22 +00:00
expect ( wiki . filterTiddlers ( "[prefix[Tid]sort[title]limit[1]]" ) . join ( "," ) ) . toBe ( "Tiddler Three" ) ;
2013-10-01 10:27:26 +00:00
expect ( wiki . filterTiddlers ( "[prefix[Tid]sort[title]!limit[1]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the list operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[list[TiddlerSeventh]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,MissingTiddler,Tiddler Three,TiddlerOne" ) ;
2014-04-03 19:49:16 +00:00
expect ( wiki . filterTiddlers ( "[tag[one]list[TiddlerSeventh]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,MissingTiddler,Tiddler Three,TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
2013-09-22 09:02:40 +00:00
it ( "should handle the next operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[[Tiddler Three]next[TiddlerSeventh]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler" ) ;
expect ( wiki . filterTiddlers ( "[[MissingTiddler]next[TiddlerSeventh]]" ) . join ( "," ) ) . toBe ( "" ) ;
} ) ;
it ( "should handle the previous operator" , function ( ) {
2013-09-22 20:17:46 +00:00
expect ( wiki . filterTiddlers ( "[[Tiddler Three]previous[TiddlerSeventh]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
2013-09-22 09:02:40 +00:00
expect ( wiki . filterTiddlers ( "[[TiddlerOne]previous[TiddlerSeventh]]" ) . join ( "," ) ) . toBe ( "" ) ;
} ) ;
2013-05-27 16:59:47 +00:00
it ( "should handle the search operator" , function ( ) {
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[search[the]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[search{Tiddler8}sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
2018-10-30 17:39:18 +00:00
expect ( wiki . filterTiddlers ( "[search:modifier[og]sort[title]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[search:modifier,authors:casesensitive[Do]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[search:modifier,authors:casesensitive[do]sort[title]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[search:authors:casesensitive,whitespace[John Doe]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo" ) ;
expect ( wiki . filterTiddlers ( "[search:modifier:regexp[(d|bl)o(ggs|e)]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[search:-modifier,authors:[g]sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[search:*:[g]sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
2013-05-27 16:59:47 +00:00
} ) ;
2018-12-17 11:19:48 +00:00
it ( "should yield search results that have search tokens spread across different fields" , function ( ) {
expect ( wiki . filterTiddlers ( "[search[fox one]sort[title]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
} ) ;
2013-05-27 16:59:47 +00:00
it ( "should handle the each operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[each[modifier]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,TiddlerOne" ) ;
2015-11-13 10:07:24 +00:00
expect ( wiki . filterTiddlers ( "[each:list-item[tags]sort[title]]" ) . join ( "," ) ) . toBe ( "one,two" ) ;
expect ( wiki . filterTiddlers ( "[each:list-item[authors]sort[title]]" ) . join ( "," ) ) . toBe ( "Bloggs,Joe,John Doe" ) ;
2013-05-27 16:59:47 +00:00
} ) ;
it ( "should handle the eachday operator" , function ( ) {
2013-09-21 09:07:49 +00:00
expect ( wiki . filterTiddlers ( "[eachday[modified]sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
2013-05-27 16:59:47 +00:00
} ) ;
it ( "should handle the sameday operator" , function ( ) {
2014-01-30 06:11:54 +00:00
expect ( wiki . filterTiddlers ( "[sameday[201304152200]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
describe ( "testing the is operator" , function ( ) {
it ( "should handle the '[is[current]]' operator" , function ( ) {
2014-04-27 20:58:41 +00:00
var fakeWidget = { getVariable : function ( ) { return "Tiddler Three" ; } } ;
expect ( wiki . filterTiddlers ( "[is[current]]" , fakeWidget ) . join ( "," ) ) . toBe ( "Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[[Tiddler Three]is[current]]" , fakeWidget ) . join ( "," ) ) . toBe ( "Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[[$:/TiddlerTwo]is[current]]" , fakeWidget ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[!is[current]sort[title]]" , fakeWidget ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the '[is[system]]' operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[is[system]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!is[system]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the '[is[shadow]]' operator" , function ( ) {
2014-04-03 19:49:16 +00:00
expect ( wiki . filterTiddlers ( "[all[shadows]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerFive,Tiddler8,TiddlerSeventh,TiddlerSix" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!is[shadow]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the '[is[missing]]' operator" , function ( ) {
2019-02-07 17:59:12 +00:00
expect ( wiki . filterTiddlers ( "[all[]]" ) . join ( "," ) ) . toBe ( "TiddlerOne,$:/TiddlerTwo,Tiddler Three,a fourth tiddler,one" ) ;
2015-01-11 16:44:51 +00:00
expect ( wiki . filterTiddlers ( "[all[missing]]" ) . join ( "," ) ) . toBe ( "TiddlerZero" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!is[missing]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
expect ( wiki . filterTiddlers ( "[[TiddlerOne]is[missing]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[[TiddlerZero]is[missing]]" ) . join ( "," ) ) . toBe ( "TiddlerZero" ) ;
expect ( wiki . filterTiddlers ( "[!title[Tiddler Three]is[missing]]" ) . join ( "," ) ) . toBe ( "" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!title[Tiddler Three]!is[missing]sort[title]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,TiddlerOne" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
it ( "should handle the '[is[orphan]]' operator" , function ( ) {
expect ( wiki . filterTiddlers ( "[is[orphan]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,TiddlerOne" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!is[orphan]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,Tiddler Three,one" ) ;
2013-05-25 16:26:22 +00:00
expect ( wiki . filterTiddlers ( "[[TiddlerOne]is[orphan]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[[TiddlerOne]!is[orphan]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[!title[Tiddler Three]is[orphan]sort[title]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler,TiddlerOne" ) ;
2013-08-07 15:06:46 +00:00
expect ( wiki . filterTiddlers ( "[!title[Tiddler Three]!is[orphan]]" ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,one" ) ;
2013-05-25 16:26:22 +00:00
} ) ;
} ) ;
it ( "should handle the operand prefixes" , function ( ) {
expect ( wiki . filterTiddlers ( "[prefix[Tiddler]] +[sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
} ) ;
2013-05-27 16:59:47 +00:00
it ( "should handle indirect operands" , function ( ) {
expect ( wiki . filterTiddlers ( "[prefix{Tiddler8}] +[sort[title]]" ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[modifier{Tiddler8!!test-field}] +[sort[title]]" ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
2014-04-27 20:58:41 +00:00
var fakeWidget = { getVariable : function ( ) { return "Tiddler Three" ; } } ;
expect ( wiki . filterTiddlers ( "[modifier{!!modifier}] +[sort[title]]" , fakeWidget ) . join ( "," ) ) . toBe ( "$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three" ) ;
2013-05-27 16:59:47 +00:00
} ) ;
2014-07-25 14:26:44 +00:00
it ( "should handle variable operands" , function ( ) {
var widget = require ( "$:/core/modules/widgets/widget.js" ) ;
// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers
var rootWidget = new widget . widget ( {
type : "widget" ,
children : [ { type : "widget" , children : [ ] } ]
} , {
wiki : $tw . wiki ,
document : $tw . document
} ) ;
rootWidget . makeChildWidgets ( ) ;
var anchorWidget = rootWidget . children [ 0 ] ;
rootWidget . setVariable ( "myVar" , "Tidd" ) ;
rootWidget . setVariable ( "myVar2" , "JoeBloggs" ) ;
expect ( wiki . filterTiddlers ( "[prefix<myVar>] +[sort[title]]" , anchorWidget ) . join ( "," ) ) . toBe ( "Tiddler Three,TiddlerOne" ) ;
expect ( wiki . filterTiddlers ( "[modifier<myVar2>] +[sort[title]]" , anchorWidget ) . join ( "," ) ) . toBe ( "TiddlerOne" ) ;
} ) ;
2014-05-12 14:16:44 +00:00
it ( "should handle the before and after operators" , function ( ) {
expect ( wiki . filterTiddlers ( "[list[TiddlerSeventh]after[TiddlerOne]]" ) . join ( "," ) ) . toBe ( "Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[list[TiddlerSeventh]after[a fourth tiddler]]" ) . join ( "," ) ) . toBe ( "MissingTiddler" ) ;
expect ( wiki . filterTiddlers ( "[list[TiddlerSeventh]after[MissingTiddler]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[list[TiddlerSeventh]before[TiddlerOne]]" ) . join ( "," ) ) . toBe ( "" ) ;
expect ( wiki . filterTiddlers ( "[list[TiddlerSeventh]before[a fourth tiddler]]" ) . join ( "," ) ) . toBe ( "Tiddler Three" ) ;
expect ( wiki . filterTiddlers ( "[list[TiddlerSeventh]before[MissingTiddler]]" ) . join ( "," ) ) . toBe ( "a fourth tiddler" ) ;
} ) ;
2019-02-07 11:18:53 +00:00
it ( "should handle the string operators" , function ( ) {
expect ( wiki . filterTiddlers ( "John Paul George Ringo +[length[]]" ) . join ( "," ) ) . toBe ( "4,4,6,5" ) ;
expect ( wiki . filterTiddlers ( "John Paul George Ringo +[uppercase[]]" ) . join ( "," ) ) . toBe ( "JOHN,PAUL,GEORGE,RINGO" ) ;
expect ( wiki . filterTiddlers ( "John Paul George Ringo +[lowercase[]]" ) . join ( "," ) ) . toBe ( "john,paul,george,ringo" ) ;
expect ( wiki . filterTiddlers ( "John Paul George Ringo +[concat[y]]" ) . join ( "," ) ) . toBe ( "Johny,Pauly,Georgey,Ringoy" ) ;
expect ( wiki . filterTiddlers ( "John Paul George Ringo +[split[]]" ) . join ( "," ) ) . toBe ( "J,o,h,n,P,a,u,l,G,e,o,r,g,e,R,i,n,g,o" ) ;
2019-02-08 15:59:07 +00:00
expect ( wiki . filterTiddlers ( "[[John. Paul. George. Ringo.]] +[split[.]trim[]]" ) . join ( "," ) ) . toBe ( "John,Paul,George,Ringo" ) ;
expect ( wiki . filterTiddlers ( "John Paul George Ringo +[split[e]]" ) . join ( "," ) ) . toBe ( "John,Paul,G,org,Ringo" ) ;
2019-02-07 12:48:23 +00:00
expect ( wiki . filterTiddlers ( "John Paul George Ringo +[join[ ]split[e]join[ee]split[ ]]" ) . join ( "," ) ) . toBe ( "John,Paul,Geeorgee,Ringo" ) ;
2019-02-07 11:18:53 +00:00
expect ( wiki . filterTiddlers ( "[[ John ]] [[Paul ]] [[ George]] Ringo +[trim[]join[-]]" ) . join ( "," ) ) . toBe ( "John-Paul-George-Ringo" ) ;
} ) ;
it ( "should handle the mathematics operators" , function ( ) {
2019-02-06 14:19:55 +00:00
expect ( wiki . filterTiddlers ( "[[2]add[2]]" ) . join ( "," ) ) . toBe ( "4" ) ;
expect ( wiki . filterTiddlers ( "[[4]subtract[2]]" ) . join ( "," ) ) . toBe ( "2" ) ;
expect ( wiki . filterTiddlers ( "[[24]divide[8]]" ) . join ( "," ) ) . toBe ( "3" ) ;
expect ( wiki . filterTiddlers ( "[[355]divide[113]sign[]multiply[4]]" ) . join ( "," ) ) . toBe ( "4" ) ;
expect ( wiki . filterTiddlers ( "[[355]divide[113]add[0.5]round[]multiply[4]]" ) . join ( "," ) ) . toBe ( "16" ) ;
expect ( wiki . filterTiddlers ( "1 2 3 4 +[sum[]]" ) . join ( "," ) ) . toBe ( "10" ) ;
expect ( wiki . filterTiddlers ( "1 2 3 4 +[product[]]" ) . join ( "," ) ) . toBe ( "24" ) ;
expect ( wiki . filterTiddlers ( "1 2 3 4 +[maxall[]]" ) . join ( "," ) ) . toBe ( "4" ) ;
expect ( wiki . filterTiddlers ( "1 2 3 4 +[minall[]]" ) . join ( "," ) ) . toBe ( "1" ) ;
expect ( wiki . filterTiddlers ( "1 2 3 4 +[max[2]]" ) . join ( "," ) ) . toBe ( "2,2,3,4" ) ;
expect ( wiki . filterTiddlers ( "1 2 3 4 +[min[2]]" ) . join ( "," ) ) . toBe ( "1,2,2,2" ) ;
} ) ;
2013-05-25 16:26:22 +00:00
} ) ;
} ) ( ) ;