1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
require 'helper'
class TestStaticFile < JekyllUnitTest
def make_dummy_file(filename)
File.write(source_dir(filename), "some content")
end
def modify_dummy_file(filename)
offset = "some content".size
File.write(source_dir(filename), "more content", offset)
end
def remove_dummy_file(filename)
File.delete(source_dir(filename))
end
def setup_static_file(base, dir, name)
StaticFile.new(@site, base, dir, name)
end
def setup_static_file_with_collection(base, dir, name, label, metadata)
site = fixture_site('collections' => {label => metadata})
StaticFile.new(site, base, dir, name, site.collections[label])
end
def setup_static_file_with_defaults(base, dir, name, defaults)
site = fixture_site('defaults' => defaults)
StaticFile.new(site, base, dir, name)
end
context "A StaticFile" do
setup do
clear_dest
@old_pwd = Dir.pwd
Dir.chdir source_dir
@site = fixture_site
@filename = "static_file.txt"
make_dummy_file(@filename)
@static_file = setup_static_file(nil, nil, @filename)
end
teardown do
remove_dummy_file(@filename) if File.exist?(source_dir(@filename))
Dir.chdir @old_pwd
end
should "have a source file path" do
static_file = setup_static_file("root", "dir", @filename)
assert_equal "root/dir/#{@filename}", static_file.path
end
should "ignore a nil base or dir" do
assert_equal "dir/#{@filename}", setup_static_file(nil, "dir", @filename).path
assert_equal "base/#{@filename}", setup_static_file("base", nil, @filename).path
end
should "have a destination relative directory without a collection" do
static_file = setup_static_file("root", "dir/subdir", "file.html")
assert_equal nil, static_file.type
assert_equal "dir/subdir/file.html", static_file.url
assert_equal "dir/subdir", static_file.destination_rel_dir
end
should "have a destination relative directory with a collection" do
static_file = setup_static_file_with_collection(
"root", "_foo/dir/subdir", "file.html", "foo", {"output" => true})
assert_equal :foo, static_file.type
assert_equal "/foo/dir/subdir/file.html", static_file.url
assert_equal "/foo/dir/subdir", static_file.destination_rel_dir
end
should "use its collection's permalink template for the destination relative directory" do
static_file = setup_static_file_with_collection(
"root", "_foo/dir/subdir", "file.html", "foo",
{"output" => true, "permalink" => "/:path/"})
assert_equal :foo, static_file.type
assert_equal "/dir/subdir/file.html", static_file.url
assert_equal "/dir/subdir", static_file.destination_rel_dir
end
should "be writable by default" do
static_file = setup_static_file("root", "dir/subdir", "file.html")
assert(static_file.write?,
"static_file.write? should return true by default")
end
should "use the _config.yml defaults to determine writability" do
defaults = [{
"scope" => {"path" => "private"},
"values" => {"published" => false}
}]
static_file = setup_static_file_with_defaults(
"root", "private/dir/subdir", "file.html", defaults)
assert(!static_file.write?,
"static_file.write? should return false when _config.yml sets " +
"`published: false`")
end
should "know its last modification time" do
assert_equal Time.new.to_i, @static_file.mtime
end
should "known if the source path is modified, when it is" do
sleep 1
modify_dummy_file(@filename)
assert @static_file.modified?
end
should "known if the source path is modified, when its not" do
@static_file.write(dest_dir)
sleep 1 # wait, else the times are still the same
assert !@static_file.modified?
end
should "known whether to write the file to the filesystem" do
assert @static_file.write?, "always true, with current implementation"
end
should "be able to write itself to the desitination direcotry" do
assert @static_file.write(dest_dir)
end
should "be able to convert to liquid" do
expected = {
"extname" => ".txt",
"modified_time" => @static_file.modified_time,
"path" => "/static_file.txt",
}
assert_equal expected, @static_file.to_liquid
end
end
end
|