forked from jekyll/jekyll
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_drop.rb
154 lines (123 loc) · 4.36 KB
/
test_drop.rb
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# 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