diff options
| author | Brice Figureau <brice-puppet@daysofwonder.com> | 2008-11-09 12:30:06 +0100 |
|---|---|---|
| committer | James Turnbull <james@lovedthanlost.net> | 2008-11-17 21:05:25 +1100 |
| commit | 724a6f672308ab6f52d738caf20c5994e6225071 (patch) | |
| tree | 3ae408a85dfdd8d6fcf14bd917ab5d7ba06edad0 /spec/unit/parser | |
| parent | b8ed6670cd0d77f63b153fb5d5afff41f2c03704 (diff) | |
| download | puppet-724a6f672308ab6f52d738caf20c5994e6225071.tar.gz puppet-724a6f672308ab6f52d738caf20c5994e6225071.tar.xz puppet-724a6f672308ab6f52d738caf20c5994e6225071.zip | |
RSpec tests for the doc system (covers AST.doc, lexer and parser)
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'spec/unit/parser')
| -rw-r--r-- | spec/unit/parser/ast.rb | 37 | ||||
| -rwxr-xr-x | spec/unit/parser/lexer.rb | 58 | ||||
| -rwxr-xr-x | spec/unit/parser/parser.rb | 31 |
3 files changed, 121 insertions, 5 deletions
diff --git a/spec/unit/parser/ast.rb b/spec/unit/parser/ast.rb new file mode 100644 index 000000000..513943725 --- /dev/null +++ b/spec/unit/parser/ast.rb @@ -0,0 +1,37 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../spec_helper' + +require 'puppet/parser/ast' + +describe Puppet::Parser::AST do + + it "should have a doc accessor" do + ast = Puppet::Parser::AST.new({}) + ast.should respond_to(:doc) + end + + it "should have a use_docs accessor to indicate it wants documentation" do + ast = Puppet::Parser::AST.new({}) + ast.should respond_to(:use_docs) + end + + [ Puppet::Parser::AST::Collection, Puppet::Parser::AST::Definition, Puppet::Parser::AST::Else, + Puppet::Parser::AST::Function, Puppet::Parser::AST::HostClass, Puppet::Parser::AST::IfStatement, + Puppet::Parser::AST::Node, Puppet::Parser::AST::Resource, Puppet::Parser::AST::ResourceDefaults, + Puppet::Parser::AST::ResourceOverride, Puppet::Parser::AST::VarDef + ].each do |k| + it "#{k}.use_docs should return true" do + ast = k.new({}) + ast.use_docs.should be_true + end + end + + describe "when initializing" do + it "should store the doc argument if passed" do + ast = Puppet::Parser::AST.new(:doc => "documentation") + ast.doc.should == "documentation" + end + end + +end
\ No newline at end of file diff --git a/spec/unit/parser/lexer.rb b/spec/unit/parser/lexer.rb index d62d99258..389f1fe1f 100755 --- a/spec/unit/parser/lexer.rb +++ b/spec/unit/parser/lexer.rb @@ -30,7 +30,7 @@ describe Puppet::Parser::Lexer::Token do @token = Puppet::Parser::Lexer::Token.new(%r{something}, :NAME) end - [:regex, :name, :string, :skip, :incr_line, :skip_text].each do |param| + [:regex, :name, :string, :skip, :incr_line, :skip_text, :accumulate].each do |param| it "should have a #{param.to_s} reader" do @token.should be_respond_to(param) end @@ -285,6 +285,14 @@ describe Puppet::Parser::Lexer::TOKENS[:COMMENT] do it "should be marked to get skipped" do @token.skip?.should be_true end + + it "should be marked to accumulate" do + @token.accumulate?.should be_true + end + + it "'s block should return the comment without the #" do + @token.convert(@lexer,"# this is a comment")[1].should == "this is a comment" + end end describe Puppet::Parser::Lexer::TOKENS[:MLCOMMENT] do @@ -313,6 +321,16 @@ describe Puppet::Parser::Lexer::TOKENS[:MLCOMMENT] do match[1].should == " first " end + it "should be marked to accumulate" do + @token.accumulate?.should be_true + end + + it "'s block should return the comment without the comment marks" do + @lexer.stubs(:line=).with(0) + + @token.convert(@lexer,"/* this is a comment */")[1].should == "this is a comment" + end + end describe Puppet::Parser::Lexer::TOKENS[:RETURN] do @@ -383,6 +401,43 @@ describe Puppet::Parser::Lexer::TOKENS[:VARIABLE] do end end +describe Puppet::Parser::Lexer, "when lexing comments" do + before { @lexer = Puppet::Parser::Lexer.new } + + it "should accumulate token in munge_token" do + token = stub 'token', :skip => true, :accumulate? => true, :incr_line => nil, :skip_text => false + + token.stubs(:convert).with(@lexer, "# this is a comment").returns([token, " this is a comment"]) + @lexer.munge_token(token, "# this is a comment") + @lexer.munge_token(token, "# this is a comment") + + @lexer.getcomment.should == " this is a comment\n this is a comment\n" + end + + it "should add a new comment stack level on LBRACE" do + @lexer.string = "{" + + @lexer.expects(:commentpush) + + @lexer.fullscan + end + + it "should return the current comments on getcomment" do + @lexer.string = "# comment" + @lexer.fullscan + + @lexer.getcomment.should == "comment\n" + end + + it "should discard the previous comments on blank line" do + @lexer.string = "# 1\n\n# 2" + @lexer.fullscan + + @lexer.getcomment.should == "2\n" + end + +end + # FIXME: We need to rewrite all of these tests, but I just don't want to take the time right now. describe "Puppet::Parser::Lexer in the old tests" do before { @lexer = Puppet::Parser::Lexer.new } @@ -538,6 +593,7 @@ describe "Puppet::Parser::Lexer in the old tests" do @lexer.fullscan[0].should == [:CLASSREF, foo] end end + end require 'puppettest/support/utils' diff --git a/spec/unit/parser/parser.rb b/spec/unit/parser/parser.rb index 077f93d98..2a086ad86 100755 --- a/spec/unit/parser/parser.rb +++ b/spec/unit/parser/parser.rb @@ -37,7 +37,6 @@ describe Puppet::Parser do it "not, it should create the correct ast objects" do AST::Not.expects(:new).with { |h| h[:value].is_a?(AST::Boolean) } @parser.parse("if ! true { $var = 1 }") - end it "boolean operation, it should create the correct ast objects" do @@ -60,14 +59,15 @@ describe Puppet::Parser do describe Puppet::Parser, "when parsing if complex expressions" do it "should create a correct ast tree" do + ast = stub_everything 'ast' AST::ComparisonOperator.expects(:new).with { |h| h[:rval].is_a?(AST::Name) and h[:lval].is_a?(AST::Name) and h[:operator]==">" - }.returns("whatever") + }.returns(ast) AST::ComparisonOperator.expects(:new).with { |h| h[:rval].is_a?(AST::Name) and h[:lval].is_a?(AST::Name) and h[:operator]=="==" - }.returns("whatever") + }.returns(ast) AST::BooleanOperator.expects(:new).with { - |h| h[:rval]=="whatever" and h[:lval]=="whatever" and h[:operator]=="and" + |h| h[:rval]==ast and h[:lval]==ast and h[:operator]=="and" } @parser.parse("if (1 > 2) and (1 == 2) { $var = 1 }") end @@ -199,7 +199,30 @@ describe Puppet::Parser do klass1.code.children.should == [@one,@two] end + end + describe Puppet::Parser, "when parsing comments before statement" do + it "should associate the documentation to the statement AST node" do + ast = @parser.parse(""" + # comment + class test {} + """) + + ast[:classes]["test"].doc.should == "comment\n" + end end + describe Puppet::Parser, "when building ast nodes" do + it "should get lexer comments if ast node declares use_docs" do + lexer = stub 'lexer' + ast = mock 'ast', :nil? => false, :use_docs => true, :doc => "" + @parser.stubs(:lexer).returns(lexer) + + Puppet::Parser::AST::Definition.expects(:new).returns(ast) + lexer.expects(:getcomment).returns("comment") + ast.expects(:doc=).with("comment") + + @parser.ast(Puppet::Parser::AST::Definition) + end + end end |
