155 lines
4.4 KiB
Ruby
155 lines
4.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "helper"
|
|
|
|
class DropFixture < Jekyll::Drops::Drop
|
|
mutable true
|
|
|
|
attr_accessor :lipsum
|
|
|
|
def foo
|
|
"bar"
|
|
end
|
|
|
|
def fallback_data
|
|
@fallback_data ||= { "baz" => "buzz" }
|
|
end
|
|
end
|
|
|
|
class TestDrop < JekyllUnitTest
|
|
context "Drops" do
|
|
setup do
|
|
@site = fixture_site(
|
|
"collections" => ["methods"]
|
|
)
|
|
@site.process
|
|
@document = @site.collections["methods"].docs.detect do |d|
|
|
d.relative_path == "_methods/configuration.md"
|
|
end
|
|
@document_drop = @document.to_liquid
|
|
@drop = DropFixture.new({})
|
|
end
|
|
|
|
should "reject 'nil' key" do
|
|
refute @drop.key?(nil)
|
|
end
|
|
|
|
should "return values for #[]" do
|
|
assert_equal "bar", @drop["foo"]
|
|
end
|
|
|
|
should "return values for #invoke_drop" do
|
|
assert_equal "bar", @drop.invoke_drop("foo")
|
|
end
|
|
|
|
should "return array of strings for .getter_methods" do
|
|
assert(@drop.class.getter_method_names.all? { |entry| entry.is_a?(String) })
|
|
end
|
|
|
|
should "return array of only getter method name strings for .getter_methods" do
|
|
[:lipsum, :lipsum=].each { |id| assert_includes(@drop.class.instance_methods, id) }
|
|
|
|
assert_includes @drop.class.getter_method_names, "lipsum"
|
|
refute_includes @drop.class.getter_method_names, "lipsum="
|
|
end
|
|
|
|
should "not munge results for another Jekyll::Drops::Drop subclass" do
|
|
fixture_ids = [:lipsum, :lipsum=, :foo]
|
|
fixture_getter_names = %w(lipsum foo)
|
|
fixture_ids.each { |id| assert_includes(@drop.class.instance_methods, id) }
|
|
|
|
fixture_getter_names.each do |name|
|
|
assert_includes @drop.class.getter_method_names, name
|
|
refute_includes @document_drop.class.getter_method_names, name
|
|
end
|
|
end
|
|
|
|
should "return only getter method names for #content_methods" do
|
|
drop_base_class_method_names = Jekyll::Drops::Drop.instance_methods.map(&:to_s)
|
|
sample_method_names = ["lipsum=", "fallback_data", "collapse_document"]
|
|
|
|
(sample_method_names + drop_base_class_method_names).each do |entry|
|
|
refute_includes @drop.content_methods, entry
|
|
end
|
|
|
|
assert_equal %w(foo lipsum), @drop.content_methods.sort
|
|
end
|
|
|
|
context "mutations" do
|
|
should "return mutations for #[]" do
|
|
@drop["foo"] = "baz"
|
|
assert_equal "baz", @drop["foo"]
|
|
end
|
|
|
|
should "return mutations for #invoke_drop" do
|
|
@drop["foo"] = "baz"
|
|
assert_equal "baz", @drop.invoke_drop("foo")
|
|
end
|
|
end
|
|
|
|
context "a document drop" do
|
|
context "fetch" do
|
|
should "raise KeyError if key is not found and no default provided" do
|
|
assert_raises KeyError do
|
|
@document_drop.fetch("not_existing_key")
|
|
end
|
|
end
|
|
|
|
should "fetch value without default" do
|
|
assert_equal "Jekyll.configuration", @document_drop.fetch("title")
|
|
end
|
|
|
|
should "fetch default if key is not found" do
|
|
assert_equal "default", @document_drop.fetch("not_existing_key", "default")
|
|
end
|
|
|
|
should "fetch default boolean value correctly" do
|
|
refute @document_drop.fetch("bar", false)
|
|
end
|
|
|
|
should "fetch default value from block if key is not found" do
|
|
assert_equal "default bar", @document_drop.fetch("bar") { |el| "default #{el}" }
|
|
end
|
|
|
|
should "fetch default value from block first if both argument and block given" do
|
|
assert_equal "baz", @document_drop.fetch("bar", "default") { "baz" }
|
|
end
|
|
|
|
should "not change mutability when fetching" do
|
|
assert @drop.class.mutable?
|
|
@drop["foo"] = "baz"
|
|
assert_equal "baz", @drop.fetch("foo")
|
|
assert @drop.class.mutable?
|
|
end
|
|
end
|
|
end
|
|
|
|
context "key?" do
|
|
context "a mutable drop" do
|
|
should "respond true for native methods" do
|
|
assert @drop.key? "foo"
|
|
end
|
|
|
|
should "respond true for mutable keys" do
|
|
@drop["bar"] = "baz"
|
|
assert @drop.key? "bar"
|
|
end
|
|
|
|
should "return true for fallback data" do
|
|
assert @drop.key? "baz"
|
|
end
|
|
end
|
|
|
|
context "a document drop" do
|
|
should "respond true for native methods" do
|
|
assert @document_drop.key? "collection"
|
|
end
|
|
|
|
should "return true for fallback data" do
|
|
assert @document_drop.key? "title"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|