Re-organized XPath axis evaluation specs.
This commit is contained in:
parent
dd37b028a0
commit
cdf48979d5
|
@ -0,0 +1,47 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Oga::XPath::Evaluator do
|
||||
context 'ancestor-or-self axis' do
|
||||
before do
|
||||
@document = parse('<a><b><c></c></b><d></d><a></a></a>')
|
||||
@c_node = @document.children[0].children[0].children[0]
|
||||
@evaluator = described_class.new(@c_node)
|
||||
end
|
||||
|
||||
context 'direct ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor-or-self::b')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <b> ancestor' do
|
||||
@set[0].name.should == 'b'
|
||||
end
|
||||
end
|
||||
|
||||
context 'higher ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor-or-self::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <a> ancestor' do
|
||||
@set[0].name.should == 'a'
|
||||
end
|
||||
end
|
||||
|
||||
context 'missing ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor-or-self::c')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <c> node' do
|
||||
@set[0].name.should == 'c'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,43 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Oga::XPath::Evaluator do
|
||||
context 'ancestor axis' do
|
||||
before do
|
||||
@document = parse('<a><b><c></c></b><d></d><a></a></a>')
|
||||
@c_node = @document.children[0].children[0].children[0]
|
||||
@evaluator = described_class.new(@c_node)
|
||||
end
|
||||
|
||||
context 'direct ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor::b')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <b> ancestor' do
|
||||
@set[0].name.should == 'b'
|
||||
end
|
||||
end
|
||||
|
||||
context 'higher ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <a> ancestor' do
|
||||
@set[0].name.should == 'a'
|
||||
end
|
||||
end
|
||||
|
||||
context 'missing ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor::foobar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,50 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Oga::XPath::Evaluator do
|
||||
context 'attribute axis' do
|
||||
before do
|
||||
document = parse('<a foo="bar"><b x="y"></b></a>')
|
||||
@evaluator = described_class.new(document)
|
||||
end
|
||||
|
||||
context 'top-level attributes' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('attribute::foo')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return an Attribute instance' do
|
||||
@set[0].is_a?(Oga::XML::Attribute).should == true
|
||||
end
|
||||
|
||||
example 'return the correct attribute' do
|
||||
@set[0].name.should == 'foo'
|
||||
end
|
||||
end
|
||||
|
||||
context 'nested attributes' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('/a/attribute::x')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return an Attribute instance' do
|
||||
@set[0].is_a?(Oga::XML::Attribute).should == true
|
||||
end
|
||||
|
||||
example 'return the correct attribute' do
|
||||
@set[0].name.should == 'x'
|
||||
end
|
||||
end
|
||||
|
||||
context 'missing attributes' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('attribute::bar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,42 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Oga::XPath::Evaluator do
|
||||
context 'child axis' do
|
||||
before do
|
||||
@document = parse('<a><b><c></c></b><d></d><a></a></a>')
|
||||
@evaluator = described_class.new(@document)
|
||||
end
|
||||
|
||||
context 'direct children' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('child::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <a> node' do
|
||||
@set[0].name.should == 'a'
|
||||
end
|
||||
end
|
||||
|
||||
context 'nested children' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('child::a/child::b')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <b> node' do
|
||||
@set[0].name.should == 'b'
|
||||
end
|
||||
end
|
||||
|
||||
context 'invalid children' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('child::foobar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,61 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Oga::XPath::Evaluator do
|
||||
context 'descendant axis' do
|
||||
before do
|
||||
@document = parse('<a><b><c></c></b><d></d><a></a></a>')
|
||||
@evaluator = described_class.new(@document)
|
||||
|
||||
@first_a = @document.children[0]
|
||||
@second_a = @first_a.children[-1]
|
||||
end
|
||||
|
||||
context 'direct descendants' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('descendant::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 2
|
||||
|
||||
example 'return the first <a> node' do
|
||||
@set[0].should == @first_a
|
||||
end
|
||||
|
||||
example 'return the second <a> node' do
|
||||
@set[1].should == @second_a
|
||||
end
|
||||
end
|
||||
|
||||
context 'nested descendants' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('descendant::c')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <c> node' do
|
||||
@set[0].name.should == 'c'
|
||||
end
|
||||
end
|
||||
|
||||
context 'descendants of a specific node' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('a/descendant::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the second <a> node' do
|
||||
@set[0].should == @second_a
|
||||
end
|
||||
end
|
||||
|
||||
context 'invalid descendants' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('descendant::foobar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,230 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Oga::XPath::Evaluator do
|
||||
before do
|
||||
@document = parse('<a><b><c></c></b><d></d><a></a></a>')
|
||||
@c_node = @document.children[0].children[0].children[0]
|
||||
end
|
||||
|
||||
context 'ancestor axis' do
|
||||
before do
|
||||
@evaluator = described_class.new(@c_node)
|
||||
end
|
||||
|
||||
context 'direct ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor::b')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <b> ancestor' do
|
||||
@set[0].name.should == 'b'
|
||||
end
|
||||
end
|
||||
|
||||
context 'higher ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <a> ancestor' do
|
||||
@set[0].name.should == 'a'
|
||||
end
|
||||
end
|
||||
|
||||
context 'missing ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor::foobar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
|
||||
context 'ancestor-or-self axis' do
|
||||
before do
|
||||
@evaluator = described_class.new(@c_node)
|
||||
end
|
||||
|
||||
context 'direct ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor-or-self::b')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <b> ancestor' do
|
||||
@set[0].name.should == 'b'
|
||||
end
|
||||
end
|
||||
|
||||
context 'higher ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor-or-self::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <a> ancestor' do
|
||||
@set[0].name.should == 'a'
|
||||
end
|
||||
end
|
||||
|
||||
context 'missing ancestors' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('ancestor-or-self::c')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <c> node' do
|
||||
@set[0].name.should == 'c'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'attribute axis' do
|
||||
before do
|
||||
document = parse('<a foo="bar"><b x="y"></b></a>')
|
||||
@evaluator = described_class.new(document)
|
||||
end
|
||||
|
||||
context 'top-level attributes' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('attribute::foo')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return an Attribute instance' do
|
||||
@set[0].is_a?(Oga::XML::Attribute).should == true
|
||||
end
|
||||
|
||||
example 'return the correct attribute' do
|
||||
@set[0].name.should == 'foo'
|
||||
end
|
||||
end
|
||||
|
||||
context 'nested attributes' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('/a/attribute::x')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return an Attribute instance' do
|
||||
@set[0].is_a?(Oga::XML::Attribute).should == true
|
||||
end
|
||||
|
||||
example 'return the correct attribute' do
|
||||
@set[0].name.should == 'x'
|
||||
end
|
||||
end
|
||||
|
||||
context 'missing attributes' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('attribute::bar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
|
||||
context 'child axis' do
|
||||
before do
|
||||
@evaluator = described_class.new(@document)
|
||||
end
|
||||
|
||||
context 'direct children' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('child::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <a> node' do
|
||||
@set[0].name.should == 'a'
|
||||
end
|
||||
end
|
||||
|
||||
context 'nested children' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('child::a/child::b')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <b> node' do
|
||||
@set[0].name.should == 'b'
|
||||
end
|
||||
end
|
||||
|
||||
context 'invalid children' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('child::foobar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
|
||||
context 'descendant axis' do
|
||||
before do
|
||||
@evaluator = described_class.new(@document)
|
||||
|
||||
@first_a = @document.children[0]
|
||||
@second_a = @first_a.children[-1]
|
||||
end
|
||||
|
||||
context 'direct descendants' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('descendant::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 2
|
||||
|
||||
example 'return the first <a> node' do
|
||||
@set[0].should == @first_a
|
||||
end
|
||||
|
||||
example 'return the second <a> node' do
|
||||
@set[1].should == @second_a
|
||||
end
|
||||
end
|
||||
|
||||
context 'nested descendants' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('descendant::c')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the <c> node' do
|
||||
@set[0].name.should == 'c'
|
||||
end
|
||||
end
|
||||
|
||||
context 'descendants of a specific node' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('a/descendant::a')
|
||||
end
|
||||
|
||||
it_behaves_like :node_set, :length => 1
|
||||
|
||||
example 'return the second <a> node' do
|
||||
@set[0].should == @second_a
|
||||
end
|
||||
end
|
||||
|
||||
context 'invalid descendants' do
|
||||
before do
|
||||
@set = @evaluator.evaluate('descendant::foobar')
|
||||
end
|
||||
|
||||
it_behaves_like :empty_node_set
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue