Weave.jl/test/reader/test_inline.jl

100 lines
2.0 KiB
Julia

# TODO: test evaluation
using Weave.Mustache
using Weave: parse_inlines, InlineText, InlineCode
@testset "`parse_inlines` basic" begin
@test filter(parse_inlines("text")) do chunk
chunk isa InlineCode
end |> isempty
@test filter(parse_inlines("text")) do chunk
chunk isa InlineText &&
chunk.content == "text"
end |> length === 1
@test filter(parse_inlines("`j code`")) do chunk
chunk isa InlineCode &&
chunk.ctype === :inline &&
chunk.content == "code"
end |> length == 1
@test filter(parse_inlines("! code")) do chunk
chunk isa InlineCode &&
chunk.ctype === :line &&
chunk.content == "code"
end |> length == 1
@test filter(parse_inlines("text ! maybe_intended_to_be_code")) do chunk # invalid inline chunk
chunk isa InlineText &&
chunk.content == "maybe_intended_to_be_code"
end |> isempty
end
@testset "`parse_inlines` multiple lines" begin
str = """
- item1
- `j code`
- item2
"""
chunks = parse_inlines(str)
let chunk = chunks[1]
@test chunk isa InlineText
@test occursin("- item1", chunk.content)
end
let chunk = chunks[2]
@test chunk isa InlineCode
@test occursin("code", chunk.content)
end
let chunk = chunks[3]
@test chunk isa InlineText
@test occursin("- item2", chunk.content)
end
end
@testset "`parse_inlines` unicode handling" begin
str = """
- eng1 `j :eng1`
- eng2`j :eng2`
- 日本語1 `j :日本語1`
- 日本語2`j :日本語2`
"""
chunks = parse_inlines(str)
@test filter(chunks) do chunk
chunk isa InlineCode &&
chunk.number === 1 &&
chunk.content == ":eng1"
end |> length === 1
@test filter(chunks) do chunk
chunk isa InlineCode &&
chunk.number === 2 &&
chunk.content == ":eng2"
end |> length === 1
@test filter(chunks) do chunk
chunk isa InlineCode &&
chunk.number === 3 &&
chunk.content == ":日本語1"
end |> length === 1
@test filter(chunks) do chunk
chunk isa InlineCode &&
chunk.number === 4 &&
chunk.content == ":日本語2"
end |> length === 1
end