2019-07-30 07:35:42 +00:00
/* eslint-disable no-unused-vars */
2018-05-23 11:14:38 +00:00
require ( 'app-module-path' ) . addPath ( _ _dirname ) ;
2019-09-23 22:23:10 +00:00
const { asyncTest } = require ( 'test-utils.js' ) ;
2018-05-23 11:14:38 +00:00
const markdownUtils = require ( 'lib/markdownUtils.js' ) ;
process . on ( 'unhandledRejection' , ( reason , p ) => {
console . log ( 'Unhandled Rejection at: Promise' , p , 'reason:' , reason ) ;
} ) ;
describe ( 'markdownUtils' , function ( ) {
beforeEach ( async ( done ) => {
done ( ) ;
} ) ;
2019-09-23 22:23:10 +00:00
it ( 'should prepend a base URL' , asyncTest ( async ( ) => {
2018-05-23 11:14:38 +00:00
const baseUrl = 'https://test.com/site' ;
const testCases = [
[ '[something](testing.html)' , '[something](https://test.com/site/testing.html)' ] ,
[ '' , '' ] ,
[ '[](/index.html "Home page")' , '[](https://test.com/index.html "Home page")' ] ,
[ '[onelink.com](/jmp/?id=123&u=http://something.com/test)' , '[onelink.com](https://test.com/jmp/?id=123&u=http://something.com/test)' ] ,
2019-10-29 09:02:42 +00:00
[ '[](/jmp/?s=80&l=related&u=http://example.com "some description")' , '[](https://test.com/jmp/?s=80&l=related&u=http://example.com "some description")' ] ,
2018-05-23 11:14:38 +00:00
] ;
for ( let i = 0 ; i < testCases . length ; i ++ ) {
const md = testCases [ i ] [ 0 ] ;
const expected = testCases [ i ] [ 1 ] ;
expect ( markdownUtils . prependBaseUrl ( md , baseUrl ) ) . toBe ( expected ) ;
}
2019-09-23 22:23:10 +00:00
} ) ) ;
2018-05-23 11:14:38 +00:00
2019-09-23 22:23:10 +00:00
it ( 'should extract image URLs' , asyncTest ( async ( ) => {
2018-05-23 13:25:59 +00:00
const testCases = [
[ '' , [ 'http://test.com/img.png' ] ] ,
[ ' ' , [ 'http://test.com/img.png' , 'http://test.com/img2.png' ] ] ,
[ '' , [ 'http://test.com/img.png' ] ] ,
2018-09-24 19:15:23 +00:00
[ '.png)' , [ 'https://test.com/ohoh_(123).png' ] ] ,
2020-02-12 18:15:16 +00:00
[ '![nothing]() ' , [ 'http://test.com/img.png' ] ] ,
2018-05-23 13:25:59 +00:00
] ;
for ( let i = 0 ; i < testCases . length ; i ++ ) {
const md = testCases [ i ] [ 0 ] ;
2020-02-12 18:15:16 +00:00
const actual = markdownUtils . extractImageUrls ( md ) ;
2018-05-23 13:25:59 +00:00
const expected = testCases [ i ] [ 1 ] ;
2020-02-12 18:15:16 +00:00
expect ( actual . join ( ' ' ) ) . toBe ( expected . join ( ' ' ) ) ;
2018-05-23 13:25:59 +00:00
}
2019-09-23 22:23:10 +00:00
} ) ) ;
2018-05-23 13:25:59 +00:00
2020-05-25 08:52:10 +00:00
it ( 'escape a markdown link' , asyncTest ( async ( ) => {
const testCases = [
[ 'file:///Users/who put spaces in their username??/.config/joplin' , 'file:///Users/who%20put%20spaces%20in%20their%20username??/.config/joplin' ] ,
[ 'file:///Users/(and brackets???)/.config/joplin' , 'file:///Users/%28and%20brackets???%29/.config/joplin' ] ,
[ 'file:///Users/thisisfine/.config/joplin' , 'file:///Users/thisisfine/.config/joplin' ] ,
] ;
for ( let i = 0 ; i < testCases . length ; i ++ ) {
const md = testCases [ i ] [ 0 ] ;
const expected = testCases [ i ] [ 1 ] ;
expect ( markdownUtils . escapeLinkUrl ( md ) ) . toBe ( expected ) ;
}
} ) ) ;
2020-02-07 22:15:41 +00:00
it ( 'escape a markdown link (title)' , asyncTest ( async ( ) => {
const testCases = [
[ 'Helmut K. C. Tessarek' , 'Helmut K. C. Tessarek' ] ,
[ 'Helmut (K. C.) Tessarek' , 'Helmut (K. C.) Tessarek' ] ,
[ 'Helmut [K. C.] Tessarek' , 'Helmut \\[K. C.\\] Tessarek' ] ,
] ;
for ( let i = 0 ; i < testCases . length ; i ++ ) {
const md = testCases [ i ] [ 0 ] ;
const expected = testCases [ i ] [ 1 ] ;
expect ( markdownUtils . escapeTitleText ( md ) ) . toBe ( expected ) ;
}
} ) ) ;
2020-05-09 14:55:00 +00:00
it ( 'replace markdown link with description' , asyncTest ( async ( ) => {
const testCases = [
[ 'Test case [one](link)' , 'Test case one' ] ,
[ 'Test case ' , 'Test case two' ] ,
[ '**# -Test case three' , 'Test case three' ] ,
[ 'This is a looooooong tiiitlllle with moore thaaaaaaan eighty characters and a [link](linkurl) at the end' , 'This is a looooooong tiiitlllle with moore thaaaaaaan eighty characters and a li' ] ,
[ '' , '' ] ,
[ 'These are [link1](one), [link2](two) and ' , 'These are link1, link2 and link3' ] ,
[ 'No description link to [](https://joplinapp.org)' , 'No description link to https://joplinapp.org' ] ,
] ;
for ( let i = 0 ; i < testCases . length ; i ++ ) {
const md = testCases [ i ] [ 0 ] ;
const expected = testCases [ i ] [ 1 ] ;
expect ( markdownUtils . titleFromBody ( md ) ) . toBe ( expected ) ;
}
} ) ) ;
2020-05-15 10:28:31 +00:00
it ( 'should remove Markdown syntax elements from the text' , asyncTest ( async ( ) => {
const inputStrings = [
'' , // Empty string
'This is some plain text' , // Plain text
'## This is a header' , // Header syntax
'This is a text with **bold** and *italicized* text' , // Text with annotations
'This is a text with __bold__ and _italicized_ text' , // Text with annotations alternate form
'[link to google](https://www.google.com/)' , // Link
'> This is a blockquote\n And another line' , // Blockquote
'* List item\n* List item' , // Unordered list
'- List item\n- List item' , // Unordered list
'1. List item\n2. List item' , // Ordered list
'This is some `inline code`' , // Inlined code
] ;
const expectedOutputStrings = [
'' ,
'This is some plain text' ,
'This is a header' ,
'This is a text with bold and italicized text' ,
'This is a text with bold and italicized text' ,
'link to google' ,
'This is a blockquote\n And another line' ,
'List item\nList item' ,
'List item\nList item' ,
'List item\nList item' ,
'This is some inline code' ,
] ;
expect ( inputStrings . length ) . toBe ( expectedOutputStrings . length ) ;
for ( let i = 0 ; i < inputStrings . length ; i ++ ) {
const outputString = markdownUtils . stripMarkdown ( inputStrings [ i ] ) ;
expect ( outputString ) . toBe ( expectedOutputStrings [ i ] ) ;
}
} ) ) ;
2019-07-30 07:35:42 +00:00
} ) ;