summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorChris Price <chris@puppetlabs.com>2012-10-20 00:08:06 -0700
committerChris Price <chris@puppetlabs.com>2012-10-20 00:08:06 -0700
commitc2c26de9b10c3675e1044d5571e47e195a5d0167 (patch)
tree873024609da221f418b3acf642cd8ac75de2b3c8 /spec
parenta5eebcfca0c1c8e8fb8130205a6ec623c8691326 (diff)
downloadpuppet-inifile-c2c26de9b10c3675e1044d5571e47e195a5d0167.tar.gz
puppet-inifile-c2c26de9b10c3675e1044d5571e47e195a5d0167.tar.bz2
Respect indentation / spacing for existing sections and settings
This commit adds some cosmetic functionality. The main two improvements are: * We'll now pay attention to indentation within existing sections, and when we write new settings or update existing ones, we'll match the existing indentation. * When modifying existing settings, the regex now captures a greater portion of the original line and preserves it. Basically, the original whitespacing in the line should remain intact and only the value should be modified.
Diffstat (limited to 'spec')
-rw-r--r--spec/unit/puppet/provider/ini_setting/ruby_spec.rb203
1 files changed, 200 insertions, 3 deletions
diff --git a/spec/unit/puppet/provider/ini_setting/ruby_spec.rb b/spec/unit/puppet/provider/ini_setting/ruby_spec.rb
index 8b2f8e5..dc3b7cb 100644
--- a/spec/unit/puppet/provider/ini_setting/ruby_spec.rb
+++ b/spec/unit/puppet/provider/ini_setting/ruby_spec.rb
@@ -123,7 +123,7 @@ master = true
[section2]
foo= foovalue2
-baz = bazvalue2
+baz=bazvalue2
url = http://192.168.1.1:8080
[section:sub]
subby=bar
@@ -154,7 +154,7 @@ foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section:sub]
-subby = foo
+subby=foo
#another comment
; yet another comment
EOS
@@ -329,7 +329,7 @@ foo = http://192.168.1.1:8080
provider.value=('yippee')
validate_file(<<-EOS
# This is a comment
-foo = yippee
+foo=yippee
[section2]
foo = http://192.168.1.1:8080
; yet another comment
@@ -533,4 +533,201 @@ subby=bar
end
end
+
+ context "when dealing with indentation in sections" do
+ let(:orig_content) {
+ <<-EOS
+# This is a comment
+ [section1]
+ ; This is also a comment
+ foo=foovalue
+
+ bar = barvalue
+ master = true
+
+[section2]
+ foo= foovalue2
+ baz=bazvalue
+ url = http://192.168.1.1:8080
+[section:sub]
+ subby=bar
+ #another comment
+ fleezy = flam
+ ; yet another comment
+ EOS
+ }
+
+ it "should add a missing setting at the correct indentation when the header is aligned" do
+ resource = Puppet::Type::Ini_setting.new(common_params.merge(
+ :section => 'section1', :setting => 'yahoo', :value => 'yippee'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_nil
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+ [section1]
+ ; This is also a comment
+ foo=foovalue
+
+ bar = barvalue
+ master = true
+
+ yahoo = yippee
+[section2]
+ foo= foovalue2
+ baz=bazvalue
+ url = http://192.168.1.1:8080
+[section:sub]
+ subby=bar
+ #another comment
+ fleezy = flam
+ ; yet another comment
+ EOS
+ )
+ end
+
+ it "should update an existing setting at the correct indentation when the header is aligned" do
+ resource = Puppet::Type::Ini_setting.new(
+ common_params.merge(:section => 'section1', :setting => 'bar', :value => 'barvalue2'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_true
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+ [section1]
+ ; This is also a comment
+ foo=foovalue
+
+ bar = barvalue2
+ master = true
+
+[section2]
+ foo= foovalue2
+ baz=bazvalue
+ url = http://192.168.1.1:8080
+[section:sub]
+ subby=bar
+ #another comment
+ fleezy = flam
+ ; yet another comment
+ EOS
+ )
+ end
+
+ it "should add a missing setting at the correct indentation when the header is not aligned" do
+ resource = Puppet::Type::Ini_setting.new(common_params.merge(
+ :section => 'section2', :setting => 'yahoo', :value => 'yippee'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_nil
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+ [section1]
+ ; This is also a comment
+ foo=foovalue
+
+ bar = barvalue
+ master = true
+
+[section2]
+ foo= foovalue2
+ baz=bazvalue
+ url = http://192.168.1.1:8080
+ yahoo = yippee
+[section:sub]
+ subby=bar
+ #another comment
+ fleezy = flam
+ ; yet another comment
+ EOS
+ )
+ end
+
+ it "should update an existing setting at the correct indentation when the header is not aligned" do
+ resource = Puppet::Type::Ini_setting.new(
+ common_params.merge(:section => 'section2', :setting => 'baz', :value => 'bazvalue2'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_true
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+ [section1]
+ ; This is also a comment
+ foo=foovalue
+
+ bar = barvalue
+ master = true
+
+[section2]
+ foo= foovalue2
+ baz=bazvalue2
+ url = http://192.168.1.1:8080
+[section:sub]
+ subby=bar
+ #another comment
+ fleezy = flam
+ ; yet another comment
+ EOS
+ )
+ end
+
+ it "should add a missing setting at the min indentation when the section is not aligned" do
+ resource = Puppet::Type::Ini_setting.new(
+ common_params.merge(:section => 'section:sub', :setting => 'yahoo', :value => 'yippee'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_nil
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+ [section1]
+ ; This is also a comment
+ foo=foovalue
+
+ bar = barvalue
+ master = true
+
+[section2]
+ foo= foovalue2
+ baz=bazvalue
+ url = http://192.168.1.1:8080
+[section:sub]
+ subby=bar
+ #another comment
+ fleezy = flam
+ ; yet another comment
+ yahoo = yippee
+ EOS
+ )
+ end
+
+ it "should update an existing setting at the previous indentation when the section is not aligned" do
+ resource = Puppet::Type::Ini_setting.new(
+ common_params.merge(:section => 'section:sub', :setting => 'fleezy', :value => 'flam2'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_true
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+ [section1]
+ ; This is also a comment
+ foo=foovalue
+
+ bar = barvalue
+ master = true
+
+[section2]
+ foo= foovalue2
+ baz=bazvalue
+ url = http://192.168.1.1:8080
+[section:sub]
+ subby=bar
+ #another comment
+ fleezy = flam2
+ ; yet another comment
+ EOS
+ )
+ end
+
+ end
+
end