require "minitest_helper"
describe Fog::Parsers::Base do
def parse(input, parser_class)
document = parser_class.new
parser = Nokogiri::XML::SAX::Parser.new(document)
parser.parse input
document.response
end
describe 'value' do
class ValueTest < Fog::Parsers::Base
def start_element(name, attrs)
@stack.push({})
super
end
def reset
super
@stack = [@response]
end
def end_element name
top = @stack.pop
if top.empty?
@stack.last[name] = value
else
@stack.last[name] = top if @stack.any?
end
end
end
it 'extracts the characters for the current element' do
doc = <<-XML
FooValue
BarValue
XML
assert_equal({'Test'=> {'Foo' => 'FooValue', 'Bar' => 'BarValue'}}, parse(doc, ValueTest))
end
end
describe 'attr_value' do
class AttrParser < Fog::Parsers::Base
def start_element(name, attrs=[])
super
@response[name] = {'foo' => attr_value('foo', attrs)}
end
end
describe 'the attribute exists' do
it 'returns the value' do
doc = <<-XML
XML
assert_equal({'Test'=> {'foo' => 'bar'}}, parse(doc, AttrParser))
end
end
describe 'the attribute does not exist' do
it 'returns nil' do
doc = <<-XML
XML
assert_equal({'Test'=> {'foo' => nil}}, parse(doc, AttrParser))
end
end
end
end