@ -1,226 +1,382 @@
package wikilink _test
package markdown _test
import (
"testing"
"code.ndumas.com/ndumas/wikilink-parser"
"github.com/stretchr/testify/assert"
"go.uber.org/zap/zapcore"
"code.ndumas.com/ndumas/obsidian-markdown"
)
var testCases = [ ] tc {
var wikilinkWithEscapeCharacters = [ ] tc {
{
name : "wikilink with escaped close link" ,
in : ` [[wiki\]\]link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\]\]link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink with partial escaped close link" ,
in : ` [[wiki\]link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\]link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink with escaped open link" ,
in : ` [[wiki\[\[link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\[\[link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink with partial escaped open link" ,
in : ` [[wiki\[link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\[link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink with escaped alias" ,
in : ` [[wiki\|link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\|link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink with escaped blockref" ,
in : ` [[wiki\#\^link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\#\^link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink with partial escaped blockref" ,
in : ` [[wiki\^link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\^link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink with escaped header" ,
in : ` [[wiki\#link]] ` ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : ` wiki\#link ` } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
}
var singleWikilink = [ ] tc {
{
name : "wikilink" ,
in : "[[wikilink]]" ,
expected : [ ] wikilink . Lexeme {
{ Typ : wikilink . LexOpenLink , Val : "[[" } ,
{ Typ : wikilink . LexIdent , Val : "wikilink" } ,
{ Typ : wikilink . LexCloseLink , Val : "]]" } ,
{ Typ : wikilink . LexText , Val : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
{
name : "wikilink|display name" ,
in : "[[wikilink|display name]]" ,
expected : [ ] wikilink . Lexeme {
{ 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "display name" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "display name" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "second pipe" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "420" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "second pipe" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink spaces" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "" } ,
{ Typ : markdown . LexHeading , Val : "#" } ,
{ Typ : markdown . LexIdent , Val : "heading" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexHeading , Val : "#" } ,
{ Typ : markdown . LexIdent , Val : "heading" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexHeading , Val : "#" } ,
{ Typ : markdown . LexIdent , Val : "heading" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "display name" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexHeading , Val : "#" } ,
{ Typ : markdown . LexIdent , Val : "heading" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "display name" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "second pipe" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexHeading , Val : "#" } ,
{ Typ : markdown . LexIdent , Val : "heading" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "420" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "second pipe" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "" } ,
{ Typ : markdown . LexBlockRef , Val : "#^" } ,
{ Typ : markdown . LexIdent , Val : "blockRef" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexBlockRef , Val : "#^" } ,
{ Typ : markdown . LexIdent , Val : "blockRef" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexBlockRef , Val : "#^" } ,
{ Typ : markdown . LexIdent , Val : "blockRef" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "display name" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexBlockRef , Val : "#^" } ,
{ Typ : markdown . LexIdent , Val : "blockRef" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "display name" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "second pipe" } ,
{ Typ : markdown . LexCloseLink , 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 : "" } ,
expected : [ ] markdown . Lexeme {
{ Typ : markdown . LexOpenLink , Val : "[[" } ,
{ Typ : markdown . LexIdent , Val : "wikilink" } ,
{ Typ : markdown . LexBlockRef , Val : "#^" } ,
{ Typ : markdown . LexIdent , Val : "blockRef" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "420" } ,
{ Typ : markdown . LexAlias , Val : "|" } ,
{ Typ : markdown . LexIdent , Val : "second pipe" } ,
{ Typ : markdown . LexCloseLink , Val : "]]" } ,
} ,
} ,
}
func Test_ObsidianWikilinks_TextWithEscapeCharacters ( t * testing . T ) {
for _ , tc := range singleWikilink {
tc . name = "escape characters preceding " + tc . name
mut , test := mutateTestCase (
tc ,
` foo\[\[not a link, but this is ` ,
"" ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : ` foo\[\[not a link, but this is ` } ,
} ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
)
t . Run ( mut . name , test )
}
for _ , tc := range singleWikilink {
tc . name = "escape characters following " + tc . name
mut , test := mutateTestCase (
tc ,
"" ,
` foo\[\[not a link, but this is ` ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : ` foo\[\[not a link, but this is ` } ,
} ,
)
t . Run ( mut . name , test )
}
}
func Test_ObsidianWikilinks_EscapeCharacters ( t * testing . T ) {
for _ , tc := range wikilinkWithEscapeCharacters {
mut , test := mutateTestCase (
tc ,
"" ,
"" ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
)
t . Run ( mut . name , test )
}
}
func Test_ObsidianWikilinks_LinksEndOfMultiLineInput ( t * testing . T ) {
for _ , tc := range singleWikilink {
mut , test := mutateTestCase (
tc ,
" test data please ignore.\nbling blonk more lines\nbling blong\nthis is a" ,
"" ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : " test data please ignore.\n" } ,
{ Typ : markdown . LexText , Val : "bling blonk more lines\n" } ,
{ Typ : markdown . LexText , Val : "bling blong\n" } ,
{ Typ : markdown . LexText , Val : "this is a" } ,
} ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
)
t . Run ( mut . name , test )
}
}
func Test_ObsidianWikilinks_LinksStartOfMultiLineInput ( t * testing . T ) {
for _ , tc := range singleWikilink {
mut , test := mutateTestCase (
tc ,
"" ,
" test data please ignore.\nbling blonk more lines\nbling blong\nthis is a" ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : " test data please ignore.\n" } ,
{ Typ : markdown . LexText , Val : "bling blonk more lines\n" } ,
{ Typ : markdown . LexText , Val : "bling blong\n" } ,
{ Typ : markdown . LexText , Val : "this is a" } ,
} ,
)
t . Run ( mut . name , test )
}
}
func Test_ObsidianWikilinks_LinksStartOfInput ( t * testing . T ) {
for _ , tc := range testCases {
for _ , tc := range singleWikilink {
mut , test := mutateTestCase (
tc ,
"" ,
" test data please ignore" ,
[ ] wikilink . Lexeme {
{ Typ : wikilink . LexText , Val : "" } ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
[ ] wikilink . Lexeme {
{ Typ : wikilink . LexText , Val : " test data please ignore" } ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : " test data please ignore" } ,
} ,
)
t . Run ( mut . name , test )
@ -228,32 +384,35 @@ func Test_ObsidianWikilinks_LinksStartOfInput(t *testing.T) {
}
func Test_ObsidianWikilinks_LinksEndOfInput ( t * testing . T ) {
for _ , tc := range testCases {
for _ , tc := range singleWikilink {
mut , test := mutateTestCase (
tc ,
"this is a " ,
"" ,
[ ] wikilink . Lexeme {
{ Typ : wikilink . LexText , Val : "this is a " } ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "this is a " } ,
} ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
nil ,
)
t . Run ( mut . name , test )
}
}
func Test_ObsidianWikilinks_Basic ( t * testing . T ) {
// t.Parallel()
for _ , tc := range testCases {
for _ , tc := range singleWikilink {
mut , test := mutateTestCase (
tc ,
"" ,
"" ,
[ ] wikilink . Lexeme {
{ Typ : wikilink . LexText , Val : "" } ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
[ ] markdown . Lexeme {
{ Typ : markdown . LexText , Val : "" } ,
} ,
nil ,
)
t . Run ( mut . name , test )
}
@ -262,10 +421,10 @@ func Test_ObsidianWikilinks_Basic(t *testing.T) {
type tc struct {
name string
in string
expected [ ] wikilink . Lexeme
expected [ ] markdown . Lexeme
}
func mutateTestCase ( tc tc , prefix , suffix string , expectedPrefix , expectedSuffix [ ] wikilink . Lexeme ) ( tc , func ( t * testing . T ) ) {
func mutateTestCase ( tc tc , prefix , suffix string , expectedPrefix , expectedSuffix [ ] markdown . Lexeme ) ( tc , func ( t * testing . T ) ) {
tc . in = prefix + tc . in
tc . in = tc . in + suffix
if expectedPrefix != nil {
@ -276,32 +435,8 @@ func mutateTestCase(tc tc, prefix, suffix string, expectedPrefix, expectedSuffix
}
return tc , func ( t * testing . T ) {
// t.Parallel()
l := wikilink . Lex ( "testLexer" , tc . in )
l := markdown . Lex ( "testLexer" , tc . in , zapcore . WarnLevel )
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 . Logf ( "expected items: %#v\n" , tc . expected )
t . Logf ( "raw items: %#v\n" , 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
}
}
assert . Equal ( t , tc . expected , l . Items , "token stream mismatch" )
}
}