# frozen-string-literal: true
require 'spec_helper'
RSpec.describe 'Array attributes rendering', type: :render do
describe 'class' do
it 'renders array class' do
with_each_attribute_type(:class, '"c1"', klass: 'c2') do |str|
expect(render_string(str)).to eq("\n")
end
with_each_attribute_type(:class, '["c1", "c3", :c2]', klass: 'c2') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'merges classes' do
expect(render_string(<hello\n")
- h1 = {class: 'c1', id: ['id1', 'id3']}
- h2 = {class: [{}, 'c2'], id: 'id2'}
%span#main.content{h1, h2} hello
HAML
end
it 'remove duplicated classes' do
with_each_attribute_type(:class, ':foo', klass: 'foo') do |str|
expect(render_string(str)).to eq("\n")
end
with_each_attribute_type(:class, '"foo bar"', klass: 'foo') do |str|
expect(render_string(str)).to eq("\n")
end
with_each_attribute_type(:class, '%w[foo bar]', klass: 'foo') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'skips empty array class' do
with_each_attribute_type(:class, '[]') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'skips falsey array elements in class' do
with_each_attribute_type(:class, '[1, nil, false, true]') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'flattens array class' do
with_each_attribute_type(:class, '[[1, [2]]]') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'merges static class' do
with_each_attribute_type(:class, '"bar"', tag: 'div', klass: 'foo', text: 'baz') do |str|
expect(render_string(str)).to eq("baz
\n")
end
end
end
describe 'id' do
it 'skips empty array id' do
with_each_attribute_type(:id, '[]') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'skips falsey array elements in id' do
with_each_attribute_type(:id, '[1, nil, false, true]') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'flattens array id' do
with_each_attribute_type(:id, '[1, [2]]') do |str|
expect(render_string(str)).to eq("\n")
end
end
it 'merges static id' do
with_each_attribute_type(:id, '"bar"', tag: 'div', id: 'foo', text: 'baz') do |str|
expect(render_string(str)).to eq("baz
\n")
end
end
end
end