-
-
Notifications
You must be signed in to change notification settings - Fork 169
/
tag_spec.rb
145 lines (122 loc) · 4.24 KB
/
tag_spec.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
# Frozen-string-literal: true
# Copyright: 2012-2015 - MIT License
# Encoding: utf-8
require "rspec/helper"
require "nokogiri"
describe Jekyll::Assets::Liquid::Tag do
subject { described_class }
before :all do
@site = stub_jekyll_site
@env = Jekyll::Assets::Env.new(@site)
@renderer = @site.liquid_renderer
@register = {
:registers => {
:site => @site
}
}
end
def stub_tag(tag, data)
payload = "{%% %s %s %%}" % [tag, data]
fragment(@renderer.file(__FILE__).parse(payload).render!( \
@site.site_payload, @register))
end
def fragment(html)
Nokogiri::HTML.fragment(html).children. \
first
end
# it "allows the user to use Liquid variables" do
# require "pry"
# binding. pry
# end
it "works with alias tags" do
expect(subject.send(:new, "image", "ruby.png", []).instance_variable_get(:@tag)).to eq \
"img"
end
it "adds a default alt attribute to img" do
expect(stub_tag("img", "ruby.png").attr("alt")).to eq "ruby.png"
end
it "sets a default width" do
expect(stub_tag("img", "ruby.png").attr("width")).to( \
match(/\A\d+\Z/))
end
it "sets a default height" do
expect(stub_tag("img", "ruby.png").attr("height")).to( \
match(/\A\d+\Z/))
end
it "adds attributes" do
expect(stub_tag("css", "bundle id:1").attr("id")).to eq \
"1"
end
it "uses a data uri if asked to" do
expect(stub_tag("img", "ruby.png data:uri").attr("src")).to match \
%r!\Adata:image\/png;base64,!
end
it "convert js" do
result = stub_tag "js", "bundle"
expect(result.name).to eq "script"
expect(result.attr("type")).to eq "text/javascript"
expect(result.attr("src")).to eq "/assets/bundle.js"
end
it "converts javascript" do
result = stub_tag "js", "bundle"
expect(result.name).to eq "script"
expect(result.attr("type")).to eq "text/javascript"
expect(result.attr("src")).to eq "/assets/bundle.js"
end
it "converts css" do
result = stub_tag "css", "bundle"
expect(result.name).to eq "link"
expect(result.attr("rel")).to eq "stylesheet"
expect(result.attr("href")).to eq "/assets/bundle.css"
expect(result.attr("type")).to eq "text/css"
end
it "converts style" do
result = stub_tag "style", "bundle"
expect(result.name).to eq "link"
expect(result.attr("rel")).to eq "stylesheet"
expect(result.attr("href")).to eq "/assets/bundle.css"
expect(result.attr("type")).to eq "text/css"
end
it "converts stylesheet" do
result = stub_tag "stylesheet", "bundle"
expect(result.name).to eq "link"
expect(result.attr("rel")).to eq "stylesheet"
expect(result.attr("href")).to eq "/assets/bundle.css"
expect(result.attr("type")).to eq "text/css"
end
it "returns the source with asset_source" do
expect(stub_tag("asset_source", "simple").text.strip).to eq \
"body {\n background: #000;\n}"
end
it "returns the source with asset" do
expect(stub_tag("asset_source", "simple").text.strip).to eq \
"body {\n background: #000;\n}"
end
it "returns the path on asset_path" do
expect(stub_tag("asset_path", "bundle.css").text).to eq "/assets/bundle.css"
end
it "returns a url w/ CDN in production if exists and skips the prefix" do
allow(Jekyll).to receive(:env).and_return "production"
stub_env_config "cdn" => "//localhost", "skip_prefix_with_cdn" => true
expect(stub_tag("img", "bundle").attr("src")).to eq \
"//localhost/bundle.css"
end
it "returns a url w/ CDN in production" do
allow(Jekyll).to receive(:env).and_return "production"
stub_env_config "cdn" => "//localhost"
expect(stub_tag("img", "bundle").attr("src")).to eq \
"//localhost/assets/bundle.css"
end
it "adds itself to #tags on the asset" do
@env.find_asset("bundle.css").liquid_tags.clear
stub_tag "stylesheet", "bundle.css"
expect(@env.find_asset("bundle.css").liquid_tags).not_to be_empty
expect(@env.find_asset("bundle.css").liquid_tags.size).to eq 1
expect(@env.find_asset("bundle.css").liquid_tags.first).to be_kind_of \
subject
end
it "captures and outputs errors" do
expect(Jekyll.logger).to receive(:error).and_return nil
expect { stub_tag "css", "error" }.to raise_error Sass::SyntaxError
end
end