87 lines
2.1 KiB
Ruby
87 lines
2.1 KiB
Ruby
RSpec.describe Mutant::AST::NamedChildren do
|
|
describe '.included' do
|
|
let(:klass) do
|
|
Class.new do
|
|
include Mutant::AST::NamedChildren, Concord.new(:node)
|
|
|
|
children :foo, :bar
|
|
end
|
|
end
|
|
|
|
def publish
|
|
klass.class_eval do
|
|
public :foo, :bar
|
|
|
|
public :remaining_children, :remaining_children_indices, :remaining_children_with_index
|
|
end
|
|
end
|
|
|
|
let(:instance) { klass.new(node) }
|
|
|
|
let(:node_foo) { s(:foo) }
|
|
let(:node_bar) { s(:bar) }
|
|
let(:node_baz) { s(:baz) }
|
|
|
|
let(:node) { s(:node, node_foo, node_bar, node_baz) }
|
|
|
|
describe 'generated methods' do
|
|
specify 'are private by default' do
|
|
%i[
|
|
foo
|
|
bar
|
|
remaining_children
|
|
remaining_children_indices
|
|
remaining_children_with_index
|
|
].each do |name|
|
|
expect(klass.private_instance_methods.include?(name)).to be(true)
|
|
end
|
|
end
|
|
|
|
describe '#remaining_children' do
|
|
it 'returns remaining unnamed children' do
|
|
publish
|
|
expect(instance.remaining_children).to eql([node_baz])
|
|
end
|
|
end
|
|
|
|
describe '#remaining_children_indices' do
|
|
it 'returns remaining unnamed children indices' do
|
|
publish
|
|
expect(instance.remaining_children_indices).to eql([2])
|
|
end
|
|
end
|
|
|
|
describe '#remaining_children_with_index' do
|
|
it 'returns remaining unnamed children indices' do
|
|
publish
|
|
expect(instance.remaining_children_with_index).to eql([[node_baz, 2]])
|
|
end
|
|
end
|
|
|
|
describe '#foo' do
|
|
it 'returns named child foo' do
|
|
publish
|
|
expect(instance.foo).to be(node_foo)
|
|
end
|
|
end
|
|
|
|
describe '#bar' do
|
|
context 'when node is present' do
|
|
it 'returns named child bar' do
|
|
publish
|
|
expect(instance.bar).to be(node_bar)
|
|
end
|
|
end
|
|
|
|
context 'when node is NOT present' do
|
|
let(:node) { s(:node, node_foo) }
|
|
|
|
it 'returns nil' do
|
|
publish
|
|
expect(instance.bar).to be(nil)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|