Browse Source

Apply Runic formatting (#266)

pull/275/head
Fredrik Ekre 12 months ago committed by GitHub
parent
commit
5d1b4918b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 23
      .github/workflows/Check.yml
  2. 99
      src/Literate.jl
  3. 246
      test/runtests.jl

23
.github/workflows/Check.yml

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
---
name: Check
on:
push:
branches:
- 'master'
- 'release-'
tags:
- '*'
pull_request:
jobs:
runic:
name: Runic formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
with:
version: '1.11'
- uses: julia-actions/cache@v2
- uses: fredrikekre/runic-action@v1
with:
version: '1.2'

99
src/Literate.jl

@ -133,10 +133,8 @@ function parse(flavor::AbstractFlavor, content; allow_continued = true) @@ -133,10 +133,8 @@ function parse(flavor::AbstractFlavor, content; allow_continued = true)
return chunks
end
function replace_default(content, sym;
config::Dict,
branch = "gh-pages",
commit = "master"
function replace_default(
content, sym; config::Dict, branch = "gh-pages", commit = "master"
)
repls = Pair{Any, Any}[]
@ -259,8 +257,10 @@ end @@ -259,8 +257,10 @@ end
filename(str) = first(splitext(last(splitdir(str))))
isdocumenter(cfg) = cfg["flavor"]::AbstractFlavor isa DocumenterFlavor
_DEFAULT_IMAGE_FORMATS = [(MIME("image/svg+xml"), ".svg"), (MIME("image/png"), ".png"),
(MIME("image/jpeg"), ".jpeg")]
_DEFAULT_IMAGE_FORMATS = [
(MIME("image/svg+xml"), ".svg"), (MIME("image/png"), ".png"),
(MIME("image/jpeg"), ".jpeg"),
]
# Cache of inputfile => head branch
const HEAD_BRANCH_CACHE = Dict{String, String}()
@ -341,16 +341,24 @@ function create_configuration(inputfile; user_config, user_kwargs, type=nothing) @@ -341,16 +341,24 @@ function create_configuration(inputfile; user_config, user_kwargs, type=nothing)
# deprecation of documenter kwarg
if (d = get(user_config, "documenter", nothing); d !== nothing)
if type === :md
Base.depwarn("The documenter=$(d) keyword to Literate.markdown is deprecated." *
Base.depwarn(
"The documenter=$(d) keyword to Literate.markdown is deprecated." *
" Pass `flavor = Literate.$(d ? "DocumenterFlavor" : "CommonMarkFlavor")()`" *
" instead.", Symbol("Literate.markdown"))
" instead.", Symbol("Literate.markdown")
)
user_config["flavor"] = d ? DocumenterFlavor() : CommonMarkFlavor()
elseif type === :nb
Base.depwarn("The documenter=$(d) keyword to Literate.notebook is deprecated." *
" It is not used anymore for notebook output.", Symbol("Literate.notebook"))
Base.depwarn(
"The documenter=$(d) keyword to Literate.notebook is deprecated." *
" It is not used anymore for notebook output.",
Symbol("Literate.notebook")
)
elseif type === :jl
Base.depwarn("The documenter=$(d) keyword to Literate.script is deprecated." *
" It is not used anymore for script output.", Symbol("Literate.script"))
Base.depwarn(
"The documenter=$(d) keyword to Literate.script is deprecated." *
" It is not used anymore for script output.",
Symbol("Literate.script")
)
end
end
@ -483,8 +491,9 @@ const DEFAULT_CONFIGURATION=nothing # Dummy const for documentation @@ -483,8 +491,9 @@ const DEFAULT_CONFIGURATION=nothing # Dummy const for documentation
function preprocessor(inputfile, outputdir; user_config, user_kwargs, type)
# Create configuration by merging default and userdefined
config = create_configuration(inputfile; user_config=user_config,
user_kwargs=user_kwargs, type=type)
config = create_configuration(
inputfile; user_config = user_config, user_kwargs = user_kwargs, type = type
)
# Quarto output does not support execute = true
if config["flavor"] isa QuartoFlavor && config["execute"]
@ -526,12 +535,13 @@ function preprocessor(inputfile, outputdir; user_config, user_kwargs, type) @@ -526,12 +535,13 @@ function preprocessor(inputfile, outputdir; user_config, user_kwargs, type)
# change the Edit on GitHub link
edit_url = relpath(inputfile, config["literate_outputdir"])
edit_url = replace(edit_url, "\\" => "/")
content = """
meta_block = """
# ```@meta
# EditURL = "$(edit_url)"
# ```
""" * content
"""
content = meta_block * content
end
# default replacements
@ -637,7 +647,8 @@ function markdown(inputfile, outputdir=pwd(); config::AbstractDict=Dict(), kwarg @@ -637,7 +647,8 @@ function markdown(inputfile, outputdir=pwd(); config::AbstractDict=Dict(), kwarg
any(write_line, chunk.lines) && write(iomd, seekstart(iocode))
if execute
cd(config["literate_outputdir"]) do
execute_markdown!(iomd, sb, join(chunk.lines, '\n'),
execute_markdown!(
iomd, sb, join(chunk.lines, '\n'),
config["literate_outputdir"];
inputfile = config["literate_inputfile"],
fake_source = config["literate_outputfile"],
@ -661,13 +672,17 @@ function markdown(inputfile, outputdir=pwd(); config::AbstractDict=Dict(), kwarg @@ -661,13 +672,17 @@ function markdown(inputfile, outputdir=pwd(); config::AbstractDict=Dict(), kwarg
return outputfile
end
function execute_markdown!(io::IO, sb::Module, block::String, outputdir;
inputfile::String, fake_source::String,
flavor::AbstractFlavor, image_formats::Vector, file_prefix::String,
softscope::Bool, continue_on_error::Bool)
function execute_markdown!(
io::IO, sb::Module, block::String, outputdir;
inputfile::String, fake_source::String, flavor::AbstractFlavor,
image_formats::Vector, file_prefix::String, softscope::Bool,
continue_on_error::Bool
)
# TODO: Deal with explicit display(...) calls
r, str, _ = execute_block(sb, block; inputfile=inputfile, fake_source=fake_source,
softscope=softscope, continue_on_error=continue_on_error)
r, str, _ = execute_block(
sb, block; inputfile = inputfile, fake_source = fake_source,
softscope = softscope, continue_on_error = continue_on_error
)
# issue #101: consecutive codefenced blocks need newline
# issue #144: quadruple backticks allow for triple backticks in the output
plain_fence = "\n````\n" => "\n````"
@ -761,10 +776,12 @@ function jupyter_notebook(chunks, config) @@ -761,10 +776,12 @@ function jupyter_notebook(chunks, config)
else
metadata = Dict{String, Any}()
end
lines = isa(chunk, MDChunk) ?
String[x.second for x in chunk.lines] : # skip indent
chunk.lines
@views map!(x -> x * '\n', lines[1:end-1], lines[1:end-1])
if isa(chunk, MDChunk)
lines = String[x.second for x in chunk.lines] # skip indent
else
lines = chunk.lines
end
@views map!(x -> x * '\n', lines[1:(end - 1)], lines[1:(end - 1)])
cell["cell_type"] = chunktype
cell["metadata"] = metadata
cell["source"] = lines
@ -801,7 +818,8 @@ function jupyter_notebook(chunks, config) @@ -801,7 +818,8 @@ function jupyter_notebook(chunks, config)
@info "executing notebook `$(config["name"] * ".ipynb")`"
try
cd(config["literate_outputdir"]) do
nb = execute_notebook(nb; inputfile=config["literate_inputfile"],
nb = execute_notebook(
nb; inputfile = config["literate_inputfile"],
fake_source = config["literate_outputfile"],
softscope = config["softscope"],
continue_on_error = config["continue_on_error"],
@ -816,8 +834,10 @@ function jupyter_notebook(chunks, config) @@ -816,8 +834,10 @@ function jupyter_notebook(chunks, config)
return nb
end
function execute_notebook(nb; inputfile::String, fake_source::String, softscope::Bool,
continue_on_error=continue_on_error)
function execute_notebook(
nb; inputfile::String, fake_source::String, softscope::Bool,
continue_on_error = continue_on_error
)
sb = sandbox()
execution_count = 0
for cell in nb["cells"]
@ -825,9 +845,10 @@ function execute_notebook(nb; inputfile::String, fake_source::String, softscope: @@ -825,9 +845,10 @@ function execute_notebook(nb; inputfile::String, fake_source::String, softscope:
execution_count += 1
cell["execution_count"] = execution_count
block = join(cell["source"])
r, str, display_dicts = execute_block(sb, block; inputfile=inputfile,
fake_source=fake_source, softscope=softscope,
continue_on_error=continue_on_error)
r, str, display_dicts = execute_block(
sb, block; inputfile = inputfile, fake_source = fake_source,
softscope = softscope, continue_on_error = continue_on_error
)
# str should go into stream
if !isempty(str)
@ -909,8 +930,10 @@ function Base.display(ld::LiterateDisplay, mime::MIME, x) @@ -909,8 +930,10 @@ function Base.display(ld::LiterateDisplay, mime::MIME, x)
end
# Execute a code-block in a module and capture stdout/stderr and the result
function execute_block(sb::Module, block::String; inputfile::String, fake_source::String,
softscope::Bool, continue_on_error::Bool)
function execute_block(
sb::Module, block::String; inputfile::String, fake_source::String,
softscope::Bool, continue_on_error::Bool
)
@debug """execute_block($sb, block)
```
$(block)
@ -945,14 +968,16 @@ function execute_block(sb::Module, block::String; inputfile::String, fake_source @@ -945,14 +968,16 @@ function execute_block(sb::Module, block::String; inputfile::String, fake_source
all_output = c.output * "\n\nERROR: " * sprint(showerror, err)
return nothing, all_output, disp.data
else
error("""
error(
"""
$(sprint(showerror, c.value))
when executing the following code block from inputfile `$(Base.contractuser(inputfile))`
```julia
$block
```
""")
"""
)
end
end
return c.value, c.output, disp.data

246
test/runtests.jl

@ -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
@ -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)
@ -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)
@ -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
@ -560,11 +582,9 @@ const GITLAB_ENV = Dict( @@ -560,11 +582,9 @@ const GITLAB_ENV = Dict(
@test_throws ArgumentError Literate.script(inputfile)
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)
@ -857,7 +884,8 @@ end end @@ -857,7 +884,8 @@ end end
@test !occursin("blob/master/", markdown)
# execute
write(inputfile, """
write(
inputfile, """
using DisplayAs
#-
1+1
@ -912,7 +940,8 @@ end end @@ -912,7 +940,8 @@ end end
(@__DIR__) == pwd() ? "cwd correct" : "cwd incorrect"
#-
basename(@__FILE__)
""")
"""
)
Literate.markdown(inputfile, outdir; execute = true)
markdown = read(joinpath(outdir, "inputfile.md"), String)
@test occursin("```\n2\n```", markdown) # text/plain
@ -961,8 +990,10 @@ end end @@ -961,8 +990,10 @@ end end
chunks, _ = Literate.preprocessor(inputfile, outdir; user_kwargs = (), user_config = (), type = :md)
@test chunks[2].lines == ["" => "hello world", "" => "hej världen"]
write(inputfile, "md\"\"\"\r\nhello world\r\nhej 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
@ -1005,13 +1038,11 @@ end end @@ -1005,13 +1038,11 @@ end end
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)
@ -1340,7 +1366,9 @@ end end @@ -1340,7 +1366,9 @@ end end
@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)
@ -1455,9 +1484,8 @@ end end @@ -1455,9 +1484,8 @@ end end
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,9 +1557,8 @@ end @@ -1529,9 +1557,8 @@ 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)
@ -1544,10 +1571,10 @@ end @@ -1544,10 +1571,10 @@ end
)
# Overwriting of URLs
withenv("TRAVIS_REPO_SLUG" => "fredrikekre/Literate.jl",
"TRAVIS_TAG" => "",
"TRAVIS_PULL_REQUEST" => "false",
"HAS_JOSH_K_SEAL_OF_APPROVAL" => "true") do
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)
@ -1575,4 +1602,3 @@ end @@ -1575,4 +1602,3 @@ end
@test cfg["codefence"] == ("````@example inputfile" => "````")
end
end
end end

Loading…
Cancel
Save