@ -23,6 +23,7 @@ function compare_chunks(chunks1, chunks2)
@@ -23,6 +23,7 @@ function compare_chunks(chunks1, chunks2)
@test c1 . continued == c2 . continued
end
end
return
end
@testset " Literate.parse " begin
@ -115,8 +116,8 @@ end
@@ -115,8 +116,8 @@ end
expected_chunks = Chunk [
MDChunk ( [ " " => " Line 1 " ] ) ,
CodeChunk ( [ " Line 2 " ] , false ) ,
MDChunk ( [ " " => " Line 3 " , " " => " " , " " => " Line 5 " ] ) ,
CodeChunk ( [ " Line 6 " , " " , " Line 8 " ] , false ) ,
MDChunk ( [ " " => " Line 3 " , " " => " " , " " => " Line 5 " ] ) ,
CodeChunk ( [ " Line 6 " , " " , " Line 8 " ] , false ) ,
MDChunk ( [ " " => " Line 9 " ] ) ,
MDChunk ( [ " " => " Line 11 " ] ) ,
CodeChunk ( [ " Line 12 " ] , false ) ,
@ -149,7 +150,7 @@ end
@@ -149,7 +150,7 @@ end
CodeChunk ( [ " # Line 73 " , " # " , " # Line 75 " ] , false ) ,
CodeChunk ( [ " # Line 77 " , " # " , " # Line 79 " ] , false ) ,
MDChunk ( [ " " => " Line 80: Quarto Specific " ] ) ,
CodeChunk ( [ " ##| Line 81 " ] , false )
CodeChunk ( [ " ##| Line 81 " ] , false ) ,
]
parsed_chunks = Literate . parse ( DefaultFlavor ( ) , content )
compare_chunks ( parsed_chunks , expected_chunks )
@ -158,8 +159,8 @@ end
@@ -158,8 +159,8 @@ end
expected_chunks_quarto = Chunk [
MDChunk ( [ " " => " Line 1 " ] ) ,
CodeChunk ( [ " Line 2 " ] , false ) ,
MDChunk ( [ " " => " Line 3 " , " " => " " , " " => " Line 5 " ] ) ,
CodeChunk ( [ " Line 6 " , " " , " Line 8 " ] , false ) ,
MDChunk ( [ " " => " Line 3 " , " " => " " , " " => " Line 5 " ] ) ,
CodeChunk ( [ " Line 6 " , " " , " Line 8 " ] , false ) ,
MDChunk ( [ " " => " Line 9 " ] ) ,
MDChunk ( [ " " => " Line 11 " ] ) ,
CodeChunk ( [ " Line 12 " ] , false ) ,
@ -192,7 +193,7 @@ end
@@ -192,7 +193,7 @@ end
CodeChunk ( [ " # Line 73 " , " # " , " # Line 75 " ] , false ) ,
CodeChunk ( [ " # Line 77 " , " # " , " # Line 79 " ] , false ) ,
MDChunk ( [ " " => " Line 80: Quarto Specific " ] ) ,
CodeChunk ( [ " #| Line 81 " ] , false ) # parses correctly as code cell command
CodeChunk ( [ " #| Line 81 " ] , false ) , # parses correctly as code cell command
]
parsed_chunks = Literate . parse ( QuartoFlavor ( ) , content )
compare_chunks ( parsed_chunks , expected_chunks_quarto )
@ -202,8 +203,8 @@ end
@@ -202,8 +203,8 @@ end
iows = IOBuffer ( )
for c in expected_chunks
if isa ( c , CodeChunk )
foreach ( x -> println ( io , x ) , c . lines )
foreach ( x -> println ( iows , x , " " ) , c . lines )
foreach ( x -> println ( io , x ) , c . lines )
foreach ( x -> println ( iows , x , " " ) , c . lines )
else
foreach ( x -> println ( io , " # " , x ) , c . lines )
foreach ( x -> println ( iows , " # " , x , " " ) , c . lines )
@ -218,111 +219,111 @@ end
@@ -218,111 +219,111 @@ end
end # testset parser
content = """
# # [Example](@id example-id)
# [foo](@ref), [bar](@ref bbaarr)
# [baz](@extref), [bax](@extref bbaaxx)
x = 1
#md # Only markdown
# Only markdown #md
#md x + 1
x + 1 #md
#!md # Not markdown
# Not markdown #!md
#!md x * 1
x * 1 #!md
#nb # Only notebook
# Only notebook #nb
#nb x + 2
x + 2 #nb
#!nb # Not notebook
# Not notebook #!nb
#!nb x * 2
x * 2 #!nb
#jl # Only script
# Only script #jl
#jl x + 3
x + 3 #jl
#!jl # Not script
# Not script #!jl
#!jl x * 3
x * 3 #!jl
#src # Source code only
Source code only #src
## # Comment
## another comment
#-
for i in 1 : 10
# # [Example](@id example-id)
# [foo](@ref), [bar](@ref bbaarr)
# [baz](@extref), [bax](@extref bbaaxx)
x = 1
#md # Only markdown
# Only markdown #md
#md x + 1
x + 1 #md
#!md # Not markdown
# Not markdown #!md
#!md x * 1
x * 1 #!md
#nb # Only notebook
# Only notebook #nb
#nb x + 2
x + 2 #nb
#!nb # Not notebook
# Not notebook #!nb
#!nb x * 2
x * 2 #!nb
#jl # Only script
# Only script #jl
#jl x + 3
x + 3 #jl
#!jl # Not script
# Not script #!jl
#!jl x * 3
x * 3 #!jl
#src # Source code only
Source code only #src
## # Comment
## another comment
#-
for i in 1 : 10
print ( i )
# some markdown in a code block
#+
end
# name: @__NAME__
# Link to repo root: @__REPO_ROOT_URL__/file.jl
# Link to nbviewer: @__NBVIEWER_ROOT_URL__/file.jl
# Link to binder: @__BINDER_ROOT_URL__/file.jl
## name: @__NAME__
## Link to repo root: @__REPO_ROOT_URL__/file.jl
## Link to nbviewer: @__NBVIEWER_ROOT_URL__/file.jl
## Link to binder: @__BINDER_ROOT_URL__/file.jl
# PLACEHOLDER1
# PLACEHOLDER2
## PLACEHOLDER3
## PLACEHOLDER4
# Some inline math: ``\\frac{df}{dx}``, some multiline inline math: ``y =
# kx + m``, and some display math:
# ```math
# \\int f(x) dx
# ```
#-
# some markdown in a code block
#+
end
# name: @__NAME__
# Link to repo root: @__REPO_ROOT_URL__/file.jl
# Link to nbviewer: @__NBVIEWER_ROOT_URL__/file.jl
# Link to binder: @__BINDER_ROOT_URL__/file.jl
## name: @__NAME__
## Link to repo root: @__REPO_ROOT_URL__/file.jl
## Link to nbviewer: @__NBVIEWER_ROOT_URL__/file.jl
## Link to binder: @__BINDER_ROOT_URL__/file.jl
# PLACEHOLDER1
# PLACEHOLDER2
## PLACEHOLDER3
## PLACEHOLDER4
# Some inline math: ``\\frac{df}{dx}``, some multiline inline math: ``y =
# kx + m``, and some display math:
# ```math
# \\int f(x) dx
# ```
#-
# Indented markdown
for i in 1 : 10
for i in 1 : 10
# Indented markdown
#+
#+
## Indented comment
end
# Some inline html
# ```@raw html
# <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>
# ```
# Semicolon output supression
1 + 1 ;
# Completely hidden
hidden = 12 #hide
hidden * hidden #hide
# Partially hidden
hidden2 = 12 #hide
hidden2 * hidden2
#nb # A notebook cell with special metadata
#nb %% Meta1 {"meta": "data"}
#nb 1+1
#nb #-
#nb # A explicit code notebook cell
#nb #-
#nb %% [code]
#nb 1+2
#nb #-
#nb # %% [markdown] {"meta": "data"}
#nb # # Explicit markdown cell with metadata
# It can sometimes happen that a text editor line-wraps [a link which shouldn't
# break](@ref bbaarr)
#=
First multiline
comment
= #
end
#= = = = = = = = = = = = = = = = = = = = = = =
Second multiline comment
=== === === === === === === == #
"""
# Some inline html
# ```@raw html
# <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>
# ```
# Semicolon output supression
1 + 1 ;
# Completely hidden
hidden = 12 #hide
hidden * hidden #hide
# Partially hidden
hidden2 = 12 #hide
hidden2 * hidden2
#nb # A notebook cell with special metadata
#nb %% Meta1 {"meta": "data"}
#nb 1+1
#nb #-
#nb # A explicit code notebook cell
#nb #-
#nb %% [code]
#nb 1+2
#nb #-
#nb # %% [markdown] {"meta": "data"}
#nb # # Explicit markdown cell with metadata
# It can sometimes happen that a text editor line-wraps [a link which shouldn't
# break](@ref bbaarr)
#=
First multiline
comment
= #
#= = = = = = = = = = = = = = = = = = = = = = =
Second multiline comment
=== === === === === === === == #
"""
const TRAVIS_ENV = Dict (
" TRAVIS_REPO_SLUG " => " fredrikekre/Literate.jl " ,
@ -349,9 +350,15 @@ const GITLAB_ENV = Dict(
@@ -349,9 +350,15 @@ const GITLAB_ENV = Dict(
( k => nothing for k in keys ( ACTIONS_ENV ) ) ... ,
)
@testset " Literate.script " begin ; Base . CoreLogging . with_logger ( Base . CoreLogging . NullLogger ( ) ) do
mktempdir ( @__DIR__ ) do sandbox
cd ( sandbox ) do
function with_nullogger_tempdir_cd ( f )
Base . CoreLogging . with_logger ( Base . CoreLogging . NullLogger ( ) ) do
mktempdir ( tmp -> cd ( f , tmp ) , @__DIR__ )
end
return
end
@testset " Literate.script " begin
with_nullogger_tempdir_cd ( ) do
# write content to inputfile
inputfile = " inputfile.jl "
write ( inputfile , content )
@ -407,9 +414,9 @@ const GITLAB_ENV = Dict(
@@ -407,9 +414,9 @@ const GITLAB_ENV = Dict(
@test script == expected_script
# Travis with with PR preview build
withenv ( TRAVIS_ENV ... ,
" TRAVIS_TAG " => " " ,
" TRAVIS_PULL_REQUEST " => " 42 " ) do
withenv (
TRAVIS_ENV ... , " TRAVIS_TAG " => " " , " TRAVIS_PULL_REQUEST " => " 42 "
) do
Literate . script ( inputfile , outdir )
end
script = read ( joinpath ( outdir , " inputfile.jl " ) , String )
@ -418,8 +425,9 @@ const GITLAB_ENV = Dict(
@@ -418,8 +425,9 @@ const GITLAB_ENV = Dict(
@test occursin ( " # Link to binder: https://mybinder.org/v2/gh/fredrikekre/Literate.jl/gh-pages?filepath=previews/PR42/file.jl " , script )
# Travis with no tag -> dev directory
withenv ( TRAVIS_ENV ... ,
" TRAVIS_TAG " => " " ) do
withenv (
TRAVIS_ENV ... , " TRAVIS_TAG " => " "
) do
Literate . script ( inputfile , outdir )
end
script = read ( joinpath ( outdir , " inputfile.jl " ) , String )
@ -437,9 +445,10 @@ const GITLAB_ENV = Dict(
@@ -437,9 +445,10 @@ const GITLAB_ENV = Dict(
@test occursin ( " # Link to binder: https://mybinder.org/v2/gh/fredrikekre/Literate.jl/gh-pages?filepath=v1.2.0/file.jl " , script )
# GitHub Actions with PR preview build
withenv ( ACTIONS_ENV ... ,
" GITHUB_EVENT_NAME " => " pull_request " ,
" GITHUB_REF " => " refs/pull/42/merge " ) do
withenv (
ACTIONS_ENV ... ,
" GITHUB_EVENT_NAME " => " pull_request " , " GITHUB_REF " => " refs/pull/42/merge "
) do
Literate . script ( inputfile , outdir )
end
script = read ( joinpath ( outdir , " inputfile.jl " ) , String )
@ -448,8 +457,9 @@ const GITLAB_ENV = Dict(
@@ -448,8 +457,9 @@ const GITLAB_ENV = Dict(
@test occursin ( " # Link to binder: https://mybinder.org/v2/gh/fredrikekre/Literate.jl/gh-pages?filepath=previews/PR42/file.jl " , script )
# GitHub Actions without a tag -> dev directory
withenv ( ACTIONS_ENV ... ,
" GITHUB_REF " => " refs/heads/master " ) do
withenv (
ACTIONS_ENV ... , " GITHUB_REF " => " refs/heads/master "
) do
Literate . script ( inputfile , outdir )
end
script = read ( joinpath ( outdir , " inputfile.jl " ) , String )
@ -458,8 +468,10 @@ const GITLAB_ENV = Dict(
@@ -458,8 +468,10 @@ const GITLAB_ENV = Dict(
@test occursin ( " # Link to binder: https://mybinder.org/v2/gh/fredrikekre/Literate.jl/gh-pages?filepath=dev/file.jl " , script )
# building under DocumentationGenerator.jl
withenv ( " DOCUMENTATIONGENERATOR " => " true " ,
" DOCUMENTATIONGENERATOR_BASE_URL " => " pkg.julialang.org/docs/Literate/XPnWG/1.2.0 " ) do
withenv (
" DOCUMENTATIONGENERATOR " => " true " ,
" DOCUMENTATIONGENERATOR_BASE_URL " => " pkg.julialang.org/docs/Literate/XPnWG/1.2.0 "
) do
Literate . script ( inputfile , outdir )
end
script = read ( joinpath ( outdir , " inputfile.jl " ) , String )
@ -467,9 +479,11 @@ const GITLAB_ENV = Dict(
@@ -467,9 +479,11 @@ const GITLAB_ENV = Dict(
@test_broken occursin ( " https://github.com/fredrikekre/Literate.jl/blob/master/file.jl " , script )
# pre- and post-processing
Literate . script ( inputfile , outdir ,
Literate . script (
inputfile , outdir ,
preprocess = x -> replace ( x , " PLACEHOLDER3 " => " 3REDLOHECALP " ) ,
postprocess = x -> replace ( x , " PLACEHOLDER4 " => " 4REDLOHECALP " ) )
postprocess = x -> replace ( x , " PLACEHOLDER4 " => " 4REDLOHECALP " )
)
script = read ( joinpath ( outdir , " inputfile.jl " ) , String )
@test ! occursin ( " PLACEHOLDER1 " , script )
@test ! occursin ( " PLACEHOLDER2 " , script )
@ -497,11 +511,14 @@ const GITLAB_ENV = Dict(
@@ -497,11 +511,14 @@ const GITLAB_ENV = Dict(
"""
# It can sometimes happen that a text editor line-wraps a link which shouldn't
# break""",
script )
script
)
# mdstrings
mdstrings_file = " inputfile_mdstrings.jl "
write ( mdstrings_file , """
write (
mdstrings_file ,
"""
md \ " \" \"
# Markdown header
@ -516,9 +533,12 @@ const GITLAB_ENV = Dict(
@@ -516,9 +533,12 @@ const GITLAB_ENV = Dict(
comment
=== #
2 + 2
""" )
Literate . script ( mdstrings_file , outdir ,
keep_comments = true , credit = false )
"""
)
Literate . script (
mdstrings_file , outdir ,
keep_comments = true , credit = false
)
script = read ( joinpath ( outdir , mdstrings_file ) , String )
@test strip ( script ) == """
md \ " \" \"
@ -535,8 +555,10 @@ const GITLAB_ENV = Dict(
@@ -535,8 +555,10 @@ const GITLAB_ENV = Dict(
# comment
2 + 2 """
Literate . script ( mdstrings_file , outdir ,
keep_comments = true , mdstrings = true , credit = false )
Literate . script (
mdstrings_file , outdir ,
keep_comments = true , mdstrings = true , credit = false
)
script = read ( joinpath ( outdir , mdstrings_file ) , String )
@test strip ( script ) == """
# # Markdown header
@ -555,16 +577,14 @@ const GITLAB_ENV = Dict(
@@ -555,16 +577,14 @@ const GITLAB_ENV = Dict(
@test_throws ArgumentError Literate . script ( " nonexistent.jl " , outdir )
# default output directory
Literate . script ( inputfile ; name = " default-output-directory " )
Literate . script ( inputfile ; name = " default-output-directory " )
@test isfile ( " default-output-directory.jl " )
@test_throws ArgumentError Literate . script ( inputfile )
end
end
end end
end
@testset " Literate.markdown " begin ; Base . CoreLogging . with_logger ( Base . CoreLogging . NullLogger ( ) ) do
mktempdir ( @__DIR__ ) do sandbox
cd ( sandbox ) do
@testset " Literate.markdown " begin
with_nullogger_tempdir_cd ( ) do
# write content to inputfile
inputfile = " inputfile.jl "
write ( inputfile , content )
@ -706,9 +726,9 @@ end end
@@ -706,9 +726,9 @@ end end
@test markdown == expected_markdown
# Travis with PR preview build
withenv ( TRAVIS_ENV ... ,
" TRAVIS_TAG " => " " ,
" TRAVIS_PULL_REQUEST " => " 42 " ) do
withenv (
TRAVIS_ENV ... , " TRAVIS_TAG " => " " , " TRAVIS_PULL_REQUEST " => " 42 "
) do
Literate . markdown ( inputfile , outdir )
end
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@ -718,8 +738,9 @@ end end
@@ -718,8 +738,9 @@ end end
@test occursin ( " EditURL = \" ../inputfile.jl \" " , markdown )
# Travis with no tag -> dev directory
withenv ( TRAVIS_ENV ... ,
" TRAVIS_TAG " => " " ) do
withenv (
TRAVIS_ENV ... , " TRAVIS_TAG " => " "
) do
Literate . markdown ( inputfile , outdir )
end
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@ -739,9 +760,10 @@ end end
@@ -739,9 +760,10 @@ end end
@test occursin ( " EditURL = \" ../inputfile.jl \" " , markdown )
# GitHub Actions with PR preview build
withenv ( ACTIONS_ENV ... ,
" GITHUB_REF " => " refs/pull/42/merge " ,
" GITHUB_EVENT_NAME " => " pull_request " ) do
withenv (
ACTIONS_ENV ... ,
" GITHUB_REF " => " refs/pull/42/merge " , " GITHUB_EVENT_NAME " => " pull_request "
) do
Literate . markdown ( inputfile , outdir )
end
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@ -751,8 +773,9 @@ end end
@@ -751,8 +773,9 @@ end end
@test occursin ( " EditURL = \" ../inputfile.jl \" " , markdown )
# GitHub Actions without a tag -> dev directory
withenv ( ACTIONS_ENV ... ,
" GITHUB_REF " => " refs/heads/master " ) do
withenv (
ACTIONS_ENV ... , " GITHUB_REF " => " refs/heads/master "
) do
Literate . markdown ( inputfile , outdir )
end
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@ -772,8 +795,10 @@ end end
@@ -772,8 +795,10 @@ end end
@test occursin ( " EditURL = \" ../inputfile.jl \" " , markdown )
# building under DocumentationGenerator.jl
withenv ( " DOCUMENTATIONGENERATOR " => " true " ,
" DOCUMENTATIONGENERATOR_BASE_URL " => " pkg.julialang.org/docs/Literate/XPnWG/1.2.0 " ) do
withenv (
" DOCUMENTATIONGENERATOR " => " true " ,
" DOCUMENTATIONGENERATOR_BASE_URL " => " pkg.julialang.org/docs/Literate/XPnWG/1.2.0 "
) do
Literate . markdown ( inputfile , outdir )
end
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@ -781,9 +806,11 @@ end end
@@ -781,9 +806,11 @@ end end
@test_broken occursin ( " https://github.com/fredrikekre/Literate.jl/blob/master/file.jl " , markdown )
# pre- and post-processing
Literate . markdown ( inputfile , outdir ,
Literate . markdown (
inputfile , outdir ,
preprocess = x -> replace ( replace ( x , " PLACEHOLDER1 " => " 1REDLOHECALP " ) , " PLACEHOLDER3 " => " 3REDLOHECALP " ) ,
postprocess = x -> replace ( replace ( x , " PLACEHOLDER2 " => " 2REDLOHECALP " ) , " PLACEHOLDER4 " => " 4REDLOHECALP " ) )
postprocess = x -> replace ( replace ( x , " PLACEHOLDER2 " => " 2REDLOHECALP " ) , " PLACEHOLDER4 " => " 4REDLOHECALP " )
)
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@test ! occursin ( " PLACEHOLDER1 " , markdown )
@test ! occursin ( " PLACEHOLDER2 " , markdown )
@ -808,7 +835,7 @@ end end
@@ -808,7 +835,7 @@ end end
let expected_error = ArgumentError ( " QuartoFlavor does not support `execute = true`. " )
@test_throws expected_error Literate . markdown ( " quarto.jl " , flavor = Literate . QuartoFlavor ( ) , execute = true )
end
Literate . markdown ( inputfile , outdir , flavor = Literate . QuartoFlavor ( ) , execute = false )
Literate . markdown ( inputfile , outdir , flavor = Literate . QuartoFlavor ( ) , execute = false )
markdown = read ( joinpath ( outdir , " inputfile.qmd " ) , String )
@test occursin ( " ```{julia} " , markdown )
@test ! occursin ( r " `{3,}@example " , markdown )
@ -850,14 +877,15 @@ end end
@@ -850,14 +877,15 @@ end end
# edit_commit
withenv ( ACTIONS_ENV ... ) do
Literate . markdown ( inputfile , outdir ; edit_commit = " retsam " )
Literate . markdown ( inputfile , outdir ; edit_commit = " retsam " )
end
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@test occursin ( " blob/retsam/ " , markdown )
@test ! occursin ( " blob/master/ " , markdown )
# execute
write ( inputfile , """
write (
inputfile , """
using DisplayAs
#-
1 + 1
@ -912,8 +940,9 @@ end end
@@ -912,8 +940,9 @@ end end
( @__DIR__ ) == pwd ( ) ? " cwd correct " : " cwd incorrect "
#-
basename ( @__FILE__ )
""" )
Literate . markdown ( inputfile , outdir ; execute = true )
"""
)
Literate . markdown ( inputfile , outdir ; execute = true )
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@test occursin ( " ``` \n 2 \n ``` " , markdown ) # text/plain
@test occursin ( " ``` \n 2×2 $ ( Matrix { Int } ) : \n 1 2 \n 3 4 \n ``` " , markdown ) # text/plain
@ -938,14 +967,14 @@ end end
@@ -938,14 +967,14 @@ end end
@test occursin ( " ``` \n \" inputfile.md \" \n ``` " , markdown ) # Correct source file (@__FILE__)
# FranklinFlavor
Literate . markdown ( inputfile , outdir ; execute = true , flavor = Literate . FranklinFlavor ( ) )
Literate . markdown ( inputfile , outdir ; execute = true , flavor = Literate . FranklinFlavor ( ) )
markdown = read ( joinpath ( outdir , " inputfile.md " ) , String )
@test occursin ( " # MD " , markdown ) # text/markdown
@test occursin ( " ~~~ \n <h1>MD</h1> \n ~~~ " , markdown ) # text/html
# QuartoFlavor file extension
write ( inputfile , " #= \r \n hello world \n =# \r \n " )
_ , config = Literate . preprocessor ( inputfile , outdir ; user_kwargs = ( ) , user_config = Dict ( " flavor " => Literate . QuartoFlavor ( ) ) , type = :md )
_ , config = Literate . preprocessor ( inputfile , outdir ; user_kwargs = ( ) , user_config = Dict ( " flavor " => Literate . QuartoFlavor ( ) ) , type = :md )
@test config [ " literate_ext " ] == " .qmd "
# verify that inputfile exists
@ -953,16 +982,18 @@ end end
@@ -953,16 +982,18 @@ end end
# default output directory
@test ! isfile ( " inputfile.md " )
Literate . markdown ( inputfile ; execute = false )
Literate . markdown ( inputfile ; execute = false )
@test isfile ( " inputfile.md " )
# fredrikekre/Literate.jl#165: \r\n line endings with multiline comments/mdstrings
write ( inputfile , " #= \r \n hello world \r \n hej världen \r \n =# \r \n " )
chunks , _ = Literate . preprocessor ( inputfile , outdir ; user_kwargs = ( ) , user_config = ( ) , type = :md )
chunks , _ = Literate . preprocessor ( inputfile , outdir ; user_kwargs = ( ) , user_config = ( ) , type = :md )
@test chunks [ 2 ] . lines == [ " " => " hello world " , " " => " hej världen " ]
write ( inputfile , " md \" \" \" \r \n hello world \r \n hej världen \r \n \" \" \" \r \n " )
chunks , _ = Literate . preprocessor ( inputfile , outdir ; user_kwargs = pairs ( ( ; mdstrings = true ) ) ,
user_config = ( ) , type = :md )
chunks , _ = Literate . preprocessor (
inputfile , outdir ; user_kwargs = pairs ( ( ; mdstrings = true ) ) ,
user_config = ( ) , type = :md
)
@test chunks [ 2 ] . lines == [ " " => " hello world " , " " => " hej världen " ]
# fredrikekre/Literate.jl#168
@ -981,8 +1012,10 @@ end end
@@ -981,8 +1012,10 @@ end end
SVG ( )
""" ,
)
Literate . markdown ( inputfile , relpath ( outdir ) ; execute = true ,
flavor = Literate . CommonMarkFlavor ( ) )
Literate . markdown (
inputfile , relpath ( outdir ) ; execute = true ,
flavor = Literate . CommonMarkFlavor ( )
)
@test read ( joinpath ( outdir , " inputfile-1.svg " ) , String ) == " issue228 "
# Softscope
@ -996,22 +1029,20 @@ end end
@@ -996,22 +1029,20 @@ end end
println ( " ret = " , ret )
"""
)
Literate . markdown ( inputfile , outdir ; execute = true , softscope = true )
Literate . markdown ( inputfile , outdir ; execute = true , softscope = true )
@test occursin ( " ret = 55 " , read ( joinpath ( outdir , " inputfile.md " ) , String ) )
## Disabled softscope
try
Literate . markdown ( inputfile , outdir ; execute = true , softscope = false )
Literate . markdown ( inputfile , outdir ; execute = true , softscope = false )
error ( " unreachable " )
catch err
@test occursin ( r " `?ret`? not defined " , sprint ( Base . showerror , err ) )
end
end # cd(sandbox)
end # mktemp
end end
end
end
@testset " Literate.notebook " begin ; Base . CoreLogging . with_logger ( Base . CoreLogging . NullLogger ( ) ) do
mktempdir ( @__DIR__ ) do sandbox
cd ( sandbox ) do
@testset " Literate.notebook " begin
with_nullogger_tempdir_cd ( ) do
# write content to inputfile
inputfile = " inputfile.jl "
write ( inputfile , content )
@ -1021,11 +1052,11 @@ end end
@@ -1021,11 +1052,11 @@ end end
withenv ( TRAVIS_ENV ... ) do
Literate . notebook ( inputfile , outdir , execute = false )
end
expected_cells = rstrip . ( (
expected_cells = rstrip . (
[
"""
" cells " : [
""" ,
"""
" source " : [
" # Example \\ n " ,
@ -1033,48 +1064,41 @@ end end
@@ -1033,48 +1064,41 @@ end end
" baz, bax "
]
""" ,
"""
" source " : [
" x = 1 "
]
""" ,
"""
" source " : [
" Not markdown \\ n " ,
" Not markdown "
] ,
""" ,
"""
" source " : [
" x * 1 \\ n " ,
" x * 1 "
] ,
""" ,
"""
" source " : [
" Only notebook \\ n " ,
" Only notebook "
]
""" ,
"""
" source " : [
" x + 2 \\ n " ,
" x + 2 "
]
""" ,
"""
" source " : [
" Not script \\ n " ,
" Not script "
] ,
""" ,
"""
" source " : [
" x * 3 \\ n " ,
@ -1083,7 +1107,6 @@ end end
@@ -1083,7 +1107,6 @@ end end
" # another comment "
] ,
""" ,
"""
" source " : [
" for i in 1:10 \\ n " ,
@ -1092,7 +1115,6 @@ end end
@@ -1092,7 +1115,6 @@ end end
" end "
]
""" ,
"""
" source " : [
" name: inputfile \\ n " ,
@ -1101,7 +1123,6 @@ end end
@@ -1101,7 +1123,6 @@ end end
" Link to binder: https://mybinder.org/v2/gh/fredrikekre/Literate.jl/gh-pages?filepath=v1.2.0/file.jl "
]
""" ,
"""
" source " : [
" # name: inputfile \\ n " ,
@ -1110,21 +1131,18 @@ end end
@@ -1110,21 +1131,18 @@ end end
" # Link to binder: https://mybinder.org/v2/gh/fredrikekre/Literate.jl/gh-pages?filepath=v1.2.0/file.jl "
]
""" ,
"""
" source " : [
" PLACEHOLDER1 \\ n " ,
" PLACEHOLDER2 "
]
""" ,
"""
" source " : [
" # PLACEHOLDER3 \\ n " ,
" # PLACEHOLDER4 "
]
""" ,
"""
" source " : [
" Some inline math: \$ \\ \\ frac{df}{dx} \$ , some multiline inline math: \$ y = \\ n " ,
@ -1134,13 +1152,11 @@ end end
@@ -1134,13 +1152,11 @@ end end
" \$ \$ "
]
""" ,
"""
" source " : [
" Indented markdown "
]
""" ,
"""
" source " : [
" for i in 1:10 \\ n " ,
@ -1149,7 +1165,6 @@ end end
@@ -1149,7 +1165,6 @@ end end
" end "
]
""" ,
"""
" source " : [
" Some inline html \\ n " ,
@ -1157,27 +1172,26 @@ end end
@@ -1157,27 +1172,26 @@ end end
" <a href= \\ " https : // github . com / fredrikekre / Literate . jl \ \ " >Literate.jl</a> "
]
""" ,
"""
" metadata " : {
" meta " : " data "
}
""" ,
"""
" source " : [
" First multiline \\ n " ,
" comment "
]
""" ,
"""
" source " : [
" --- \\ n " ,
" \\ n " ,
" *This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* "
]
""" ))
""" ,
]
)
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@ -1188,16 +1202,19 @@ end end
@@ -1188,16 +1202,19 @@ end end
lastidx = nextind ( notebook , last ( idx ) )
end
# test some of the required metadata
for metadata in ( " \" nbformat \" : " , " \" nbformat_minor \" : " , " \" metadata \" : { " , " \" language_info \" : { " ,
for metadata in (
" \" nbformat \" : " , " \" nbformat_minor \" : " , " \" metadata \" : { " , " \" language_info \" : { " ,
" \" file_extension \" : \" .jl \" " , " \" mimetype \" : \" application/julia \" " ,
" \" name \" : \" julia \" " , " \" version \" : " , " \" kernelspec \" : { " ,
" \" name \" : \" julia- " , " \" display_name \" : \" Julia " , " \" language \" : \" julia \" " )
" \" name \" : \" julia- " , " \" display_name \" : \" Julia " , " \" language \" : \" julia \" " ,
)
@test occursin ( metadata , notebook )
end
# no tag -> latest directory
withenv ( TRAVIS_ENV ... ,
" TRAVIS_TAG " => " " ) do
withenv (
TRAVIS_ENV ... , " TRAVIS_TAG " => " "
) do
Literate . notebook ( inputfile , outdir , execute = false )
end
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@ -1211,25 +1228,29 @@ end end
@@ -1211,25 +1228,29 @@ end end
@test occursin ( " fredrikekre/Literate.jl/blob/gh-pages/v1.2.0/ " , notebook )
# GitHub Actions with PR preview build
withenv ( ACTIONS_ENV ... ,
" GITHUB_REF " => " refs/pull/42/merge " ,
" GITHUB_EVENT_NAME " => " pull_request " ) do
withenv (
ACTIONS_ENV ... ,
" GITHUB_REF " => " refs/pull/42/merge " , " GITHUB_EVENT_NAME " => " pull_request "
) do
Literate . notebook ( inputfile , outdir , execute = false )
end
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@test occursin ( " fredrikekre/Literate.jl/blob/gh-pages/previews/PR42/ " , notebook )
# GitHub Actions without a tag
withenv ( ACTIONS_ENV ... ,
" GITHUB_REF " => " refs/heads/master " ) do
withenv (
ACTIONS_ENV ... , " GITHUB_REF " => " refs/heads/master "
) do
Literate . notebook ( inputfile , outdir , execute = false )
end
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@test occursin ( " fredrikekre/Literate.jl/blob/gh-pages/dev/ " , notebook )
# building under DocumentationGenerator.jl
withenv ( " DOCUMENTATIONGENERATOR " => " true " ,
" DOCUMENTATIONGENERATOR_BASE_URL " => " pkg.julialang.org/docs/Literate/XPnWG/1.2.0 " ) do
withenv (
" DOCUMENTATIONGENERATOR " => " true " ,
" DOCUMENTATIONGENERATOR_BASE_URL " => " pkg.julialang.org/docs/Literate/XPnWG/1.2.0 "
) do
Literate . notebook ( inputfile , outdir , execute = false )
end
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@ -1246,9 +1267,11 @@ end end
@@ -1246,9 +1267,11 @@ end end
end
return nb
end
Literate . notebook ( inputfile , outdir , execute = false ,
Literate . notebook (
inputfile , outdir , execute = false ,
preprocess = x -> replace ( replace ( x , " PLACEHOLDER1 " => " 1REDLOHECALP " ) , " PLACEHOLDER3 " => " 3REDLOHECALP " ) ,
postprocess = post )
postprocess = post
)
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@test ! occursin ( " PLACEHOLDER1 " , notebook )
@test ! occursin ( " PLACEHOLDER2 " , notebook )
@ -1277,22 +1300,23 @@ end end
@@ -1277,22 +1300,23 @@ end end
# execute = true
Literate . notebook ( inputfile , outdir )
expected_outputs = rstrip . ( (
expected_outputs = rstrip . (
[
"""
" cells " : [
""" ,
"""
" data " : {
" text/plain " : " 3 "
} ,
""" ,
"""
" text " : [
" 12345678910 "
]
""" ))
""" ,
]
)
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@ -1321,12 +1345,14 @@ end end
@@ -1321,12 +1345,14 @@ end end
# test error when executing notebook
write ( inputfile , " for i in 1:10 \n println(i) " )
r = @test_logs ( ( :error , r " error when executing notebook based on input file: " ) , match_mode = :any ,
r = @test_logs (
( :error , r " error when executing notebook based on input file: " ) , match_mode = :any ,
try
Literate . notebook ( inputfile , outdir )
catch err
err
end )
end
)
@test isa ( r , ErrorException )
@test occursin ( " when executing the following code block from inputfile " , r . msg )
@test occursin ( inputfile , r . msg )
@ -1336,11 +1362,13 @@ end end
@@ -1336,11 +1362,13 @@ end end
# default output directory
@test ! isfile ( " inputfile.ipynb " )
Literate . notebook ( inputfile ; execute = false )
Literate . notebook ( inputfile ; execute = false )
@test isfile ( " inputfile.ipynb " )
# world time problem with `IJulia.display_dict`
write ( inputfile , """
write (
inputfile ,
"""
struct VegaLiteRenderable end
Base . show ( io :: IO , :: MIME " application/vnd.vegalite.v2+json " , :: VegaLiteRenderable ) =
write ( io , \ " \" \"
@ -1348,7 +1376,8 @@ end end
@@ -1348,7 +1376,8 @@ end end
\ " \" \" )
Base . Multimedia . istextmime ( :: MIME { Symbol ( " application/vnd.vegalite.v2+json " ) } ) = true
VegaLiteRenderable ( )
""" )
"""
)
Literate . notebook ( inputfile , outdir )
notebook = read ( joinpath ( outdir , " inputfile.ipynb " ) , String )
@test occursin ( " \" application/vnd.vegalite.v2+json \" : " , notebook )
@ -1450,14 +1479,13 @@ end end
@@ -1450,14 +1479,13 @@ end end
@test occursin ( " ret = 55 " , read ( joinpath ( outdir , " inputfile2.ipynb " ) , String ) )
## Disabled softscope
try
Literate . notebook ( new_inputfile , outdir ; softscope = false )
Literate . notebook ( new_inputfile , outdir ; softscope = false )
error ( " unreachable " )
catch err
@test occursin ( r " `?ret`? not defined " , sprint ( Base . showerror , err ) )
end
end # cd(sandbox)
end # mktempdir
end end
end
end
@testset " continue_on_error=true " begin
input_with_error =
@ -1529,26 +1557,25 @@ end
@@ -1529,26 +1557,25 @@ end
end
end
@testset " Configuration " begin ; Base . CoreLogging . with_logger ( Base . CoreLogging . NullLogger ( ) ) do
mktempdir ( @__DIR__ ) do sandbox
cd ( sandbox ) do
@testset " Configuration " begin
with_nullogger_tempdir_cd ( ) do
# write content to inputfile
inputfile = " inputfile.jl "
write ( inputfile , content )
outdir = mktempdir ( pwd ( ) )
config = Dict (
config = Dict (
" repo_root_url " => " www.example1.com " ,
" nbviewer_root_url " => " www.example2.com " ,
" binder_root_url " => " www.example3.com " ,
)
# Overwriting of URLs
withenv ( " TRAVIS_REPO_SLUG " => " fredrikekre/Literate.jl " ,
" TRAVIS_TAG " => " " ,
" TRAVIS_PULL_REQUEST " => " false " ,
" HAS_JOSH_K_SEAL_OF_APPROVAL " => " true " ) do
Literate . script ( inputfile , outdir ; config = config )
withenv (
" TRAVIS_REPO_SLUG " => " fredrikekre/Literate.jl " , " TRAVIS_TAG " => " " ,
" TRAVIS_PULL_REQUEST " => " false " , " HAS_JOSH_K_SEAL_OF_APPROVAL " => " true "
) do
Literate . script ( inputfile , outdir ; config = config )
end
script = read ( joinpath ( outdir , " inputfile.jl " ) , String )
@test occursin ( " Link to repo root: www.example1.com/file.jl " , script )
@ -1556,7 +1583,7 @@ end
@@ -1556,7 +1583,7 @@ end
@test occursin ( " Link to binder: www.example3.com/file.jl " , script )
# Test pick_codefence function
default_codefence = pick_codefence ( Literate . DefaultFlavor ( ) , true , " testname " )
default_codefence = pick_codefence ( Literate . DefaultFlavor ( ) , true , " testname " )
@test default_codefence == ( " ````julia " => " ```` " )
@test default_codefence == pick_codefence ( Literate . FranklinFlavor ( ) , true , " testname " )
@test default_codefence == pick_codefence ( Literate . DocumenterFlavor ( ) , true , " testname " )
@ -1566,13 +1593,12 @@ end
@@ -1566,13 +1593,12 @@ end
@test ( " ```{julia} " => " ``` " ) == pick_codefence ( Literate . QuartoFlavor ( ) , false , " testname " )
# Misc default configs
create ( ; type , kw ... ) = Literate . create_configuration ( inputfile ; user_config = Dict ( ) , user_kwargs = kw , type = type )
cfg = create ( ; type = :md , execute = true )
create ( ; type , kw ... ) = Literate . create_configuration ( inputfile ; user_config = Dict ( ) , user_kwargs = kw , type = type )
cfg = create ( ; type = :md , execute = true )
@test cfg [ " execute " ]
@test cfg [ " codefence " ] == ( " ````julia " => " ```` " )
cfg = create ( ; type = :md , execute = false )
cfg = create ( ; type = :md , execute = false )
@test ! cfg [ " execute " ]
@test cfg [ " codefence " ] == ( " ````@example inputfile " => " ```` " )
end
end
end end
end