require File.join(__FILE__.gsub(/(.*)?\/spec\/.*$/, '\1'), 'spec/spec_helper') describe Rtml::Rules::DomRuleset do before :each do @rules = Rtml::Rules::DomRuleset.new end it "should allow tree structure to be defined with children" do @rules.children do head :base, :link, :defaults, :error logdcl :vardcl, :layout end @rules.tags(:head).children.should == %w(base link defaults error) @rules.tags(:logdcl).children.should == %w(vardcl layout) end it "should allow tag order to be constrained" do @rules.order do head :base, :link, :defaults, :error logdcl :vardcl, :layout end @rules.order(:head).should == %w(base link defaults error) @rules.order(:logdcl).should == %w(vardcl layout) end it "should define a list of tags for usage" do @rules.tag :a, :baddata, :base, :br, :call_func @rules.tags.should have(5).items end it "should allow one root tag and raise an error if a second is specified" do @rules.root.should be_nil @rules.root :tml @rules.root.should == 'tml' lambda { @rules.root :second_root }.should raise_error(Rtml::Errors::MultipleRootsError) end it "should create a ruleset out of the default seed" do @rules.parse(Rtml::Document.ruleset_file) @rules.tags.should have(62).rules # FIXME: Need more assertions here to really verify everything loaded properly. end it "should remember maximum and minimum count for children" do @rules.children :screen, %W{setvar strtemplate logrec} @rules.children :screen, %W{next error call_func display print submit tform}, :maximum => 1, :minimum => 1 @rules.tag(:screen).maximum('setvar').should == 0 @rules.tag(:screen).maximum('next').should == 1 @rules.tag(:screen).minimum('setvar').should == 0 @rules.tag(:screen).minimum('next').should == 1 end end