diff options
author | Luke Kanies <luke@madstop.com> | 2007-08-23 11:52:31 -0500 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2007-08-23 11:52:31 -0500 |
commit | 58494cc8566da04711715e54274f472377b1aba0 (patch) | |
tree | 66bd610d359f549fc68e9985accf7b4141b7982e /spec/unit | |
parent | d59315a07a8a01ca65952d8e8fe9d2f1bb84d30e (diff) | |
download | puppet-58494cc8566da04711715e54274f472377b1aba0.tar.gz puppet-58494cc8566da04711715e54274f472377b1aba0.tar.xz puppet-58494cc8566da04711715e54274f472377b1aba0.zip |
Building a stand-alone spec directory for creating the new spec-based tests.
Diffstat (limited to 'spec/unit')
-rwxr-xr-x | spec/unit/parser/interpreter.rb | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/spec/unit/parser/interpreter.rb b/spec/unit/parser/interpreter.rb new file mode 100755 index 000000000..0e32b8c5b --- /dev/null +++ b/spec/unit/parser/interpreter.rb @@ -0,0 +1,94 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../spec_helper' + +describe Puppet::Parser::Interpreter, " when creating parser instances" do + before do + @interp = Puppet::Parser::Interpreter.new + @parser = mock('parser') + end + + it "should create a parser with code passed in at initialization time" do + @interp.code = :some_code + @parser.expects(:code=).with(:some_code) + @parser.expects(:parse) + Puppet::Parser::Parser.expects(:new).with(:environment).returns(@parser) + @interp.send(:create_parser, :environment).object_id.should equal(@parser.object_id) + end + + it "should create a parser with a file passed in at initialization time" do + @interp.file = :a_file + @parser.expects(:file=).with(:a_file) + @parser.expects(:parse) + Puppet::Parser::Parser.expects(:new).with(:environment).returns(@parser) + @interp.send(:create_parser, :environment).should equal(@parser) + end + + it "should create a parser when passed neither code nor file" do + @parser.expects(:parse) + Puppet::Parser::Parser.expects(:new).with(:environment).returns(@parser) + @interp.send(:create_parser, :environment).should equal(@parser) + end + + it "should return nothing when new parsers fail" do + Puppet::Parser::Parser.expects(:new).with(:environment).raises(ArgumentError) + @interp.send(:create_parser, :environment).should be_nil + end +end + +describe Puppet::Parser::Interpreter, " when managing parser instances" do + before do + @interp = Puppet::Parser::Interpreter.new + @parser = mock('parser') + end + + it "it should an exception when nothing is there and nil is returned" do + @interp.expects(:create_parser).with(:environment).returns(nil) + lambda { @interp.send(:parser, :environment) }.should raise_error(Puppet::Error) + end + + it "should create and return a new parser and use the same parser when the parser does not need reparsing" do + @interp.expects(:create_parser).with(:environment).returns(@parser) + @interp.send(:parser, :environment).should equal(@parser) + + @parser.expects(:reparse?).returns(false) + @interp.send(:parser, :environment).should equal(@parser) + end + + it "should create a new parser when reparse is true" do + oldparser = mock('oldparser') + newparser = mock('newparser') + oldparser.expects(:reparse?).returns(true) + oldparser.expects(:clear) + + @interp.expects(:create_parser).with(:environment).returns(oldparser) + @interp.send(:parser, :environment).should equal(oldparser) + @interp.expects(:create_parser).with(:environment).returns(newparser) + @interp.send(:parser, :environment).should equal(newparser) + end + + it "should keep the old parser if create_parser doesn't return anything." do + # Get the first parser in the hash. + @interp.expects(:create_parser).with(:environment).returns(@parser) + @interp.send(:parser, :environment).should equal(@parser) + + # Have it indicate something has changed + @parser.expects(:reparse?).returns(true) + + # But fail to create a new parser + @interp.expects(:create_parser).with(:environment).returns(nil) + + # And make sure we still get the old valid parser + @interp.send(:parser, :environment).should equal(@parser) + end + + it "should use different parsers for different environments" do + # get one for the first env + @interp.expects(:create_parser).with(:first_env).returns(@parser) + @interp.send(:parser, :first_env).should equal(@parser) + + other_parser = mock('otherparser') + @interp.expects(:create_parser).with(:second_env).returns(other_parser) + @interp.send(:parser, :second_env).should equal(other_parser) + end +end |