97 lines
2.7 KiB
Python
97 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
from pre_commit.languages import julia
|
|
from testing.language_helpers import run_language
|
|
from testing.util import cwd
|
|
|
|
|
|
def _make_hook(tmp_path, julia_code):
|
|
src_dir = tmp_path.joinpath('src')
|
|
src_dir.mkdir()
|
|
src_dir.joinpath('main.jl').write_text(julia_code)
|
|
tmp_path.joinpath('Project.toml').write_text(
|
|
'[deps]\n'
|
|
'Example = "7876af07-990d-54b4-ab0e-23690620f79a"\n',
|
|
)
|
|
|
|
|
|
def test_julia_hook(tmp_path):
|
|
code = """
|
|
using Example
|
|
function main()
|
|
println("Hello, world!")
|
|
end
|
|
main()
|
|
"""
|
|
_make_hook(tmp_path, code)
|
|
expected = (0, b'Hello, world!\n')
|
|
assert run_language(tmp_path, julia, 'src/main.jl') == expected
|
|
|
|
|
|
def test_julia_hook_manifest(tmp_path):
|
|
code = """
|
|
using Example
|
|
println(pkgversion(Example))
|
|
"""
|
|
_make_hook(tmp_path, code)
|
|
|
|
tmp_path.joinpath('Manifest.toml').write_text(
|
|
'manifest_format = "2.0"\n\n'
|
|
'[[deps.Example]]\n'
|
|
'git-tree-sha1 = "11820aa9c229fd3833d4bd69e5e75ef4e7273bf1"\n'
|
|
'uuid = "7876af07-990d-54b4-ab0e-23690620f79a"\n'
|
|
'version = "0.5.4"\n',
|
|
)
|
|
expected = (0, b'0.5.4\n')
|
|
assert run_language(tmp_path, julia, 'src/main.jl') == expected
|
|
|
|
|
|
def test_julia_hook_args(tmp_path):
|
|
code = """
|
|
function main(argv)
|
|
foreach(println, argv)
|
|
end
|
|
main(ARGS)
|
|
"""
|
|
_make_hook(tmp_path, code)
|
|
expected = (0, b'--arg1\n--arg2\n')
|
|
assert run_language(
|
|
tmp_path, julia, 'src/main.jl --arg1 --arg2',
|
|
) == expected
|
|
|
|
|
|
def test_julia_hook_additional_deps(tmp_path):
|
|
code = """
|
|
using TOML
|
|
function main()
|
|
project_file = Base.active_project()
|
|
dict = TOML.parsefile(project_file)
|
|
for (k, v) in dict["deps"]
|
|
println(k, " = ", v)
|
|
end
|
|
end
|
|
main()
|
|
"""
|
|
_make_hook(tmp_path, code)
|
|
deps = ('TOML=fa267f1f-6049-4f14-aa54-33bafae1ed76',)
|
|
ret, out = run_language(tmp_path, julia, 'src/main.jl', deps=deps)
|
|
assert ret == 0
|
|
assert b'Example = 7876af07-990d-54b4-ab0e-23690620f79a' in out
|
|
assert b'TOML = fa267f1f-6049-4f14-aa54-33bafae1ed76' in out
|
|
|
|
|
|
def test_julia_repo_local(tmp_path):
|
|
env_dir = tmp_path.joinpath('envdir')
|
|
env_dir.mkdir()
|
|
local_dir = tmp_path.joinpath('local')
|
|
local_dir.mkdir()
|
|
local_dir.joinpath('local.jl').write_text(
|
|
'using TOML; foreach(println, ARGS)',
|
|
)
|
|
with cwd(local_dir):
|
|
deps = ('TOML=fa267f1f-6049-4f14-aa54-33bafae1ed76',)
|
|
expected = (0, b'--local-arg1\n--local-arg2\n')
|
|
assert run_language(
|
|
env_dir, julia, 'local.jl --local-arg1 --local-arg2',
|
|
deps=deps, is_local=True,
|
|
) == expected
|