const invenia_url = "https://github.com/invenia" const git_config = Dict( "user.name" => "Tester McTestFace", "user.email" => "email@web.site", ) const fake_path = joinpath(tempdir(), tempdir()) const test_file = tempname() template_text = """ Hello, world {{PKGNAME}} {{VERSION}}} {{#DOCUMENTER}}Documenter{{/DOCUMENTER}} {{#CODECOV}}CodeCov{{/CODECOV}} {{#AFTER}}After{{/AFTER}} {{#OTHER}}Other{{/OTHER}} """ write(test_file, template_text) @testset "Template creation" begin t = Template(remote_prefix=invenia_url) @test t.remote_prefix == "$invenia_url/" @test t.license == nothing @test t.years == string(Dates.year(Dates.today())) @test t.authors == LibGit2.getconfig("user.name", "") @test t.path == Pkg.dir() @test t.julia_version == VERSION @test isempty(t.git_config) @test isempty(t.plugins) t = Template(remote_prefix=invenia_url; license="MIT") @test t.license == "MIT" t = Template(remote_prefix=invenia_url; years=2014) @test t.years == "2014" t = Template(remote_prefix=invenia_url; years="2014-2015") @test t.years == "2014-2015" t = Template(remote_prefix=invenia_url; authors="Some Guy") @test t.authors == "Some Guy" t = Template(remote_prefix=invenia_url; authors=["Guy", "Gal"]) @test t.authors == "Guy, Gal" t = Template(remote_prefix=invenia_url; path=test_file) @test t.path == test_file t = Template(remote_prefix=invenia_url; julia_version=v"0.1.2") @test t.julia_version == v"0.1.2" t = Template(remote_prefix=invenia_url; git_config=git_config) @test t.git_config == git_config t = Template(remote_prefix=invenia_url; git_config=git_config) @test t.authors == get(git_config, "user.name", "ERROR") t = Template( remote_prefix=invenia_url, plugins = [GitHubPages(), TravisCI(), AppVeyor(), CodeCov()], ) @test Set(keys(t.plugins)) == Set([GitHubPages, TravisCI, AppVeyor, CodeCov]) @test Set(values(t.plugins)) == Set([GitHubPages(), TravisCI(), AppVeyor(), CodeCov()]) @test_warn r".*" Template(; remote_prefix=invenia_url, plugins=[TravisCI(), TravisCI()], ) end @testset "Plugin creation" begin p = AppVeyor() @test isempty(p.gitignore_files) @test p.config_file == joinpath(PkgTemplates.DEFAULTS_DIR, "appveyor.yml") p = AppVeyor(; config_file=nothing) @test p.config_file == nothing p = AppVeyor(; config_file=test_file) @test p.config_file == test_file @test_throws ArgumentError AppVeyor(; config_file=fake_path) p = TravisCI() @test isempty(p.gitignore_files) @test p.config_file == joinpath(PkgTemplates.DEFAULTS_DIR, "travis.yml") p = TravisCI(; config_file=nothing) @test p.config_file == nothing p = TravisCI(; config_file=test_file) @test p.config_file == test_file @test_throws ArgumentError TravisCI(; config_file=fake_path) p = CodeCov() @test p.gitignore_files == ["*.jl.cov", "*.jl.*.cov", "*.jl.mem"] @test p.config_file == joinpath(PkgTemplates.DEFAULTS_DIR, "codecov.yml") p = CodeCov(; config_file=nothing) @test p.config_file == nothing p = CodeCov(; config_file=test_file) @test p.config_file == test_file @test_throws ArgumentError CodeCov(; config_file=fake_path) end @testset "File generation" begin t = Template(; remote_prefix=invenia_url, license="MPL", git_config=git_config, plugins=[TravisCI(), CodeCov(), GitHubPages(), AppVeyor()], ) temp_file = tempname() gen_file(temp_file, "Hello, world") @test isfile(temp_file) @test readstring(temp_file) == "Hello, world\n" rm(temp_file) mktempdir() do temp_dir @test gen_readme(temp_dir, t) == "README.md" @test isfile(joinpath(temp_dir, "README.md")) readme = readchomp(joinpath(temp_dir, "README.md")) @test contains(readme, "# $(basename(temp_dir))") for p in values(t.plugins) @test contains(readme, join(badges(p, t, basename(temp_dir)), "\n")) end # Check the order of the badges. @test search(readme, "github.io").start < search(readme, "travis").start < search(readme, "appveyor").start < search(readme, "codecov").start end mktempdir() do temp_dir @test gen_gitignore(temp_dir, t.plugins) == ".gitignore" @test isfile(joinpath(temp_dir, ".gitignore")) gitignore = readstring(joinpath(temp_dir, ".gitignore")) @test contains(gitignore, ".DS_Store") for p in values(t.plugins) for entry in p.gitignore_files @test contains(gitignore, entry) end end end mktempdir() do temp_dir @test gen_license(temp_dir, t.license, t.authors, t.years) == "LICENSE" @test isfile(joinpath(temp_dir, "LICENSE")) license = readchomp(joinpath(temp_dir, "LICENSE")) @test contains(license, t.authors) @test contains(license, t.years) @test contains(license, read_license(t.license)) end mktempdir() do temp_dir @test gen_entrypoint(temp_dir) == "src/" @test isdir(joinpath(temp_dir, "src")) @test isfile(joinpath(temp_dir, "src", "$(basename(temp_dir)).jl")) entrypoint = readchomp(joinpath(temp_dir, "src", "$(basename(temp_dir)).jl")) @test contains(entrypoint, "module $(basename(temp_dir))") end mktempdir() do temp_dir @test gen_require(temp_dir, t.julia_version) == "REQUIRE" @test isfile(joinpath(temp_dir, "REQUIRE")) vf = version_floor(t.julia_version) @test readchomp(joinpath(temp_dir, "REQUIRE")) == "julia $vf" end mktempdir() do temp_dir @test gen_tests(temp_dir) == "test/" @test isdir(joinpath(temp_dir, "test")) @test isfile(joinpath(temp_dir, "test", "runtests.jl")) runtests = readchomp(joinpath(temp_dir, "test", "runtests.jl")) @test contains(runtests, "using $(basename(temp_dir))") @test contains(runtests, "using Base.Test") end end @testset "Package generation" begin t = Template(; remote_prefix=invenia_url, license="MIT", plugins=[AppVeyor(), GitHubPages(), CodeCov(), TravisCI()], ) generate("TestPkg", t) @test isfile(Pkg.dir("TestPkg", "LICENSE")) @test isfile(Pkg.dir("TestPkg", "README.md")) @test isfile(Pkg.dir("TestPkg", "REQUIRE")) @test isfile(Pkg.dir("TestPkg", ".gitignore")) @test isdir(Pkg.dir("TestPkg", "src")) @test isfile(Pkg.dir("TestPkg", "src", "TestPkg.jl")) @test isdir(Pkg.dir("TestPkg", "test")) @test isfile(Pkg.dir("TestPkg", "test", "runtests.jl")) @test isfile(Pkg.dir("TestPkg", ".travis.yml")) @test isfile(Pkg.dir("TestPkg", ".appveyor.yml")) @test isfile(Pkg.dir("TestPkg", ".codecov.yml")) @test isdir(Pkg.dir("TestPkg", "docs")) @test isfile(Pkg.dir("TestPkg", "docs", "make.jl")) @test isdir(Pkg.dir("TestPkg", "docs", "src")) @test isfile(Pkg.dir("TestPkg", "docs", "src", "index.md")) repo = LibGit2.GitRepo(Pkg.dir("TestPkg")) branches = [LibGit2.name(branch[1]) for branch in LibGit2.GitBranchIter(repo)] @test in("refs/heads/master", branches) @test in("refs/heads/gh-pages", branches) @test !LibGit2.isdirty(repo) rm(Pkg.dir("TestPkg"); recursive=true) mkdir(Pkg.dir("TestPkg")) @test_throws ArgumentError generate("TestPkg", t) end @testset "Plugin generation" begin mktempdir() do temp_dir pkg_dir = joinpath(temp_dir, "TestPkg") t = Template(; remote_prefix=invenia_url, path=temp_dir) p = TravisCI() @test gen_plugin(p, t, "TestPkg") == [".travis.yml"] @test isfile(joinpath(pkg_dir, ".travis.yml")) rm(joinpath(pkg_dir, ".travis.yml")) p = TravisCI(; config_file=nothing) @test isempty(gen_plugin(p, t, "TestPkg")) @test !isfile(joinpath(pkg_dir, ".travis.yml")) @test_throws ArgumentError TravisCI(; config_file=fake_path) p = AppVeyor() @test gen_plugin(p, t, "TestPkg") == [".appveyor.yml"] @test isfile(joinpath(pkg_dir, ".appveyor.yml")) rm(joinpath(pkg_dir, ".appveyor.yml")) p = AppVeyor(; config_file=nothing) @test isempty(gen_plugin(p, t, "TestPkg")) @test !isfile(joinpath(pkg_dir, ".appveyor.yml")) @test_throws ArgumentError AppVeyor(; config_file=fake_path) p = CodeCov() @test gen_plugin(p, t, "TestPkg") == [".codecov.yml"] @test isfile(joinpath(pkg_dir, ".codecov.yml")) rm(joinpath(pkg_dir, ".codecov.yml")) p = CodeCov(; config_file=nothing) @test isempty(gen_plugin(p, t, "TestPkg")) @test !isfile(joinpath(pkg_dir, ".codecov.yml")) @test_throws ArgumentError CodeCov(; config_file=fake_path) p = GitHubPages() @test gen_plugin(p, t, "TestPkg") == ["docs/"] @test isdir(joinpath(pkg_dir, "docs")) @test isfile(joinpath(pkg_dir, "docs", "make.jl")) make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) @test contains(make, "assets=[]") @test !contains(make, "deploydocs") @test isdir(joinpath(pkg_dir, "docs", "src")) @test isfile(joinpath(pkg_dir, "docs", "src", "index.md")) index = readchomp(joinpath(pkg_dir, "docs", "src", "index.md")) @test index == "# TestPkg" rm(joinpath(pkg_dir, "docs"); recursive=true) p = GitHubPages(; assets=[test_file]) @test gen_plugin(p, t, "TestPkg") == ["docs/"] make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) @test contains( make, strip(""" assets=[ "assets/$(basename(test_file))", ] """) ) @test isfile(joinpath(pkg_dir, "docs", "src", "assets", basename(test_file))) rm(joinpath(pkg_dir, "docs"); recursive=true) t.plugins[TravisCI] = TravisCI() @test gen_plugin(p, t, "TestPkg") == ["docs/"] make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) @test contains(make, "deploydocs") rm(joinpath(pkg_dir, "docs"); recursive=true) end end