summaryrefslogtreecommitdiff
path: root/spec/unit/pops/parser/parse_containers_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/pops/parser/parse_containers_spec.rb')
-rw-r--r--spec/unit/pops/parser/parse_containers_spec.rb69
1 files changed, 62 insertions, 7 deletions
diff --git a/spec/unit/pops/parser/parse_containers_spec.rb b/spec/unit/pops/parser/parse_containers_spec.rb
index 57d6efee9..a05c5975d 100644
--- a/spec/unit/pops/parser/parse_containers_spec.rb
+++ b/spec/unit/pops/parser/parse_containers_spec.rb
@@ -10,7 +10,12 @@ describe "egrammar parsing containers" do
context "When parsing file scope" do
it "$a = 10 $b = 20" do
- dump(parse("$a = 10 $b = 20")).should == "(block (= $a 10) (= $b 20))"
+ dump(parse("$a = 10 $b = 20")).should == [
+ "(block",
+ " (= $a 10)",
+ " (= $b 20)",
+ ")"
+ ].join("\n")
end
it "$a = 10" do
@@ -24,7 +29,11 @@ describe "egrammar parsing containers" do
end
it "class foo { class bar {} }" do
- dump(parse("class foo { class bar {}}")).should == "(class foo (block (class foo::bar ())))"
+ dump(parse("class foo { class bar {}}")).should == [
+ "(class foo (block",
+ " (class foo::bar ())",
+ "))"
+ ].join("\n")
end
it "class foo::bar {}" do
@@ -52,7 +61,12 @@ describe "egrammar parsing containers" do
end
it "class foo {$a = 10 $b = 20}" do
- dump(parse("class foo {$a = 10 $b = 20}")).should == "(class foo (block (= $a 10) (= $b 20)))"
+ dump(parse("class foo {$a = 10 $b = 20}")).should == [
+ "(class foo (block",
+ " (= $a 10)",
+ " (= $b 20)",
+ "))"
+ ].join("\n")
end
context "it should handle '3x weirdness'" do
@@ -100,6 +114,16 @@ describe "egrammar parsing containers" do
}.to raise_error(/not a valid classname/)
end
end
+
+ context 'it should allow keywords as attribute names' do
+ ['and', 'case', 'class', 'default', 'define', 'else', 'elsif', 'if', 'in', 'inherits', 'node', 'or',
+ 'undef', 'unless', 'type', 'attr', 'function', 'private'].each do |keyword|
+ it "such as #{keyword}" do
+ expect {parse("class x ($#{keyword}){} class { x: #{keyword} => 1 }")}.to_not raise_error
+ end
+ end
+ end
+
end
context "When the parser parses define" do
@@ -108,12 +132,20 @@ describe "egrammar parsing containers" do
end
it "class foo { define bar {}}" do
- dump(parse("class foo {define bar {}}")).should == "(class foo (block (define foo::bar ())))"
+ dump(parse("class foo {define bar {}}")).should == [
+ "(class foo (block",
+ " (define foo::bar ())",
+ "))"
+ ].join("\n")
end
it "define foo { define bar {}}" do
# This is illegal, but handled as part of validation
- dump(parse("define foo { define bar {}}")).should == "(define foo (block (define bar ())))"
+ dump(parse("define foo { define bar {}}")).should == [
+ "(define foo (block",
+ " (define bar ())",
+ "))"
+ ].join("\n")
end
it "define foo::bar {}" do
@@ -133,7 +165,12 @@ describe "egrammar parsing containers" do
end
it "define foo {$a = 10 $b = 20}" do
- dump(parse("define foo {$a = 10 $b = 20}")).should == "(define foo (block (= $a 10) (= $b 20)))"
+ dump(parse("define foo {$a = 10 $b = 20}")).should == [
+ "(define foo (block",
+ " (= $a 10)",
+ " (= $b 20)",
+ "))"
+ ].join("\n")
end
context "it should handle '3x weirdness'" do
@@ -152,6 +189,15 @@ describe "egrammar parsing containers" do
expect { dump(parse("define default {}")).should == "(define default ())"}.to raise_error(Puppet::ParseError)
end
end
+
+ context 'it should allow keywords as attribute names' do
+ ['and', 'case', 'class', 'default', 'define', 'else', 'elsif', 'if', 'in', 'inherits', 'node', 'or',
+ 'undef', 'unless', 'type', 'attr', 'function', 'private'].each do |keyword|
+ it "such as #{keyword}" do
+ expect {parse("define x ($#{keyword}){} x { y: #{keyword} => 1 }")}.to_not raise_error
+ end
+ end
+ end
end
context "When parsing node" do
@@ -159,6 +205,10 @@ describe "egrammar parsing containers" do
dump(parse("node foo {}")).should == "(node (matches 'foo') ())"
end
+ it "node foo, {} # trailing comma" do
+ dump(parse("node foo, {}")).should == "(node (matches 'foo') ())"
+ end
+
it "node kermit.example.com {}" do
dump(parse("node kermit.example.com {}")).should == "(node (matches 'kermit.example.com') ())"
end
@@ -200,7 +250,12 @@ describe "egrammar parsing containers" do
end
it "node foo inherits bar {$a = 10 $b = 20}" do
- dump(parse("node foo inherits bar {$a = 10 $b = 20}")).should == "(node (matches 'foo') (parent 'bar') (block (= $a 10) (= $b 20)))"
+ dump(parse("node foo inherits bar {$a = 10 $b = 20}")).should == [
+ "(node (matches 'foo') (parent 'bar') (block",
+ " (= $a 10)",
+ " (= $b 20)",
+ "))"
+ ].join("\n")
end
end
end