@ -6,8 +6,249 @@ import (
"code.ndumas.com/ndumas/wikilink-parser"
)
func Test_ObsidianWikilinks ( t * testing . T ) {
func Test_ObsidianWikilinks_LinksIntext ( t * testing . T ) {
tcs := [ ] struct {
name string
in string
expected [ ] wikilink . Lexeme
} {
{
name : "wikilink" ,
in : "this is a [[wikilink]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexText , Val : "this is a " } ,
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink|display name" ,
in : "this is a [[wikilink|display name]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexText , Val : "this is a " } ,
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "display name" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink|display name|second pipe" ,
in : "[[wikilink|display name|second pipe]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "display name" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "second pipe" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink with numeric alias|420|second pipe" ,
in : "[[wikilink|420|second pipe]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "420" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "second pipe" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink with spaces in filename" ,
in : "[[wikilink spaces]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink spaces" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "#heading" ,
in : "[[#heading]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "" } ,
{ Typ : wikilink . LexHeading , Val : "#" } ,
{ Typ : wikilink . LexIdent , Val : "heading" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink#heading" ,
in : "[[wikilink#heading]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexHeading , Val : "#" } ,
{ Typ : wikilink . LexIdent , Val : "heading" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink#heading|display name" ,
in : "[[wikilink#heading|display name]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexHeading , Val : "#" } ,
{ Typ : wikilink . LexIdent , Val : "heading" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "display name" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink#heading|display name|second pipe" ,
in : "[[wikilink#heading|display name|second pipe]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexHeading , Val : "#" } ,
{ Typ : wikilink . LexIdent , Val : "heading" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "display name" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "second pipe" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink with numeric aliases#heading|420|display name" ,
in : "[[wikilink#heading|420|second pipe]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexHeading , Val : "#" } ,
{ Typ : wikilink . LexIdent , Val : "heading" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "420" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "second pipe" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "#^blockRef" ,
in : "[[#^blockRef]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "" } ,
{ Typ : wikilink . LexBlockRef , Val : "#^" } ,
{ Typ : wikilink . LexIdent , Val : "blockRef" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink#^blockRef" ,
in : "[[wikilink#^blockRef]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexBlockRef , Val : "#^" } ,
{ Typ : wikilink . LexIdent , Val : "blockRef" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink#^blockRef|display name" ,
in : "[[wikilink#^blockRef|display name]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexBlockRef , Val : "#^" } ,
{ Typ : wikilink . LexIdent , Val : "blockRef" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "display name" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink#^blockRef|display name|second pipe" ,
in : "[[wikilink#^blockRef|display name|second pipe]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexBlockRef , Val : "#^" } ,
{ Typ : wikilink . LexIdent , Val : "blockRef" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "display name" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "second pipe" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
{
name : "wikilink with numeric aliases#^blockRef|420|second pipe" ,
in : "[[wikilink#^blockRef|420|second pipe]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexBlockRef , Val : "#^" } ,
{ Typ : wikilink . LexIdent , Val : "blockRef" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "420" } ,
{ Typ : wikilink . LexAlias , Val : "|" } ,
{ Typ : wikilink . LexIdent , Val : "second pipe" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
} ,
} ,
}
for _ , tc := range tcs {
tc := tc
t . Run ( tc . name , func ( t * testing . T ) {
// t.Parallel()
l := wikilink . Lex ( "testLexer" , tc . in )
defer l . L . Sync ( )
if len ( tc . expected ) != len ( l . Items ) {
t . Logf ( "expected %d tokens, got %d\n" , len ( tc . expected ) , len ( l . Items ) )
t . Fail ( )
return
}
for i , e := range tc . expected {
n := l . Items [ i ]
if e . Typ != n . Typ {
t . Logf ( "expected Type %s, received %s" , e . Typ . String ( ) , n . Typ . String ( ) )
t . Fail ( )
return
}
if e . Val != n . Val {
t . Logf ( "expected Value %q, received %q" , e . Val , n . Val )
t . Fail ( )
return
}
}
} )
}
}
func Test_ObsidianWikilinks_Basic ( t * testing . T ) {
t . Parallel ( )
tcs := [ ] struct {
name string
in string
@ -218,7 +459,7 @@ func Test_ObsidianWikilinks(t *testing.T) {
for _ , tc := range tcs {
tc := tc
t . Run ( tc . name , func ( t * testing . T ) {
t . Parallel ( )
// t.Parallel()
l := wikilink . Lex ( "testLexer" , tc . in )
defer l . L . Sync ( )
if len ( tc . expected ) != len ( l . Items ) {