spec/configliere/commandline_spec.rb in configliere-0.0.9 vs spec/configliere/commandline_spec.rb in configliere-0.1.0
- old
+ new
@@ -1,62 +1,102 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'configliere/commandline'
describe "Configliere::Commandline" do
- before do
- @config = Configliere::Param.new :param_1 => 'val 1', :cat => :hat
- end
- it 'handles --param=val pairs' do
- ::ARGV.replace ['--my_param=my_val']
- @config.resolve!
- @config.should == { :my_param => 'my_val', :param_1 => 'val 1', :cat => :hat}
+ after do
+ ::ARGV.replace []
end
- it 'handles --dotted.param.name=val pairs' do
- ::ARGV.replace ['--dotted.param.name=my_val']
- @config.resolve!
- @config.rest.should be_empty
- @config.should == { :dotted => { :param => { :name => 'my_val' }}, :param_1 => 'val 1', :cat => :hat}
- end
- it 'handles --dashed-param-name=val pairs' do
- ::ARGV.replace ['--dashed-param-name=my_val']
- @config.resolve!
- @config.rest.should be_empty
- @config.should == { :dashed => { :param => { :name => 'my_val' }}, :param_1 => 'val 1', :cat => :hat}
- end
- it 'uses the last-seen of the commandline values' do
- ::ARGV.replace ['--param_1=A', '--param_1=B']
- @config.resolve!
- @config.rest.should be_empty
- @config.should == { :param_1 => 'B', :cat => :hat}
- end
- it 'sets a bare parameter (no "=") to true' do
- ::ARGV.replace ['--param_1', '--deep.param']
- @config.resolve!
- @config.rest.should be_empty
- @config.should == { :param_1 => true, :deep => { :param => true }, :cat => :hat}
- end
- it 'sets an explicit blank to nil' do
- ::ARGV.replace ['--param_1=', '--deep.param=']
- @config.resolve!
- @config.should == { :param_1 => nil, :deep => { :param => nil }, :cat => :hat}
- end
+
+ describe "processing long-format flags" do
+ before do
+ @config = Configliere::Param.new :param_1 => 'val 1', :cat => :hat
+ end
- it 'saves non --param args into rest' do
- ::ARGV.replace ['--param_1', 'file1', 'file2']
- @config.resolve!
- @config.should == { :param_1 => true, :cat => :hat}
- @config.rest.should == ['file1', 'file2']
- end
+ it 'should handle --param=val pairs' do
+ ::ARGV.replace ['--my_param=my_val']
+ @config.resolve!
+ @config.should == { :my_param => 'my_val', :param_1 => 'val 1', :cat => :hat}
+ end
+ it 'should handle --dotted.param.name=val pairs' do
+ ::ARGV.replace ['--dotted.param.name=my_val']
+ @config.resolve!
+ @config.rest.should be_empty
+ @config.should == { :dotted => { :param => { :name => 'my_val' }}, :param_1 => 'val 1', :cat => :hat}
+ end
+ it 'should handle --dashed-param-name=val pairs' do
+ ::ARGV.replace ['--dashed-param-name=my_val']
+ @config.resolve!
+ @config.rest.should be_empty
+ @config.should == { :dashed => { :param => { :name => 'my_val' }}, :param_1 => 'val 1', :cat => :hat}
+ end
+ it 'should handle the last-seen of the commandline values' do
+ ::ARGV.replace ['--param_1=A', '--param_1=B']
+ @config.resolve!
+ @config.rest.should be_empty
+ @config.should == { :param_1 => 'B', :cat => :hat}
+ end
+ it 'should set a bare parameter (no "=") to true' do
+ ::ARGV.replace ['--param_1', '--deep.param']
+ @config.resolve!
+ @config.rest.should be_empty
+ @config.should == { :param_1 => true, :deep => { :param => true }, :cat => :hat}
+ end
+ it 'should set an explicit blank to nil' do
+ ::ARGV.replace ['--param_1=', '--deep.param=']
+ @config.resolve!
+ @config.should == { :param_1 => nil, :deep => { :param => nil }, :cat => :hat}
+ end
- it 'stops processing on "--"' do
- ::ARGV.replace ['--param_1=A', '--', '--param_1=B']
- @config.resolve!
- @config.rest.should == ['--param_1=B']
- @config.should == { :param_1 => 'A', :cat => :hat}
+ it 'should save non --param args into rest' do
+ ::ARGV.replace ['--param_1', 'file1', 'file2']
+ @config.resolve!
+ @config.should == { :param_1 => true, :cat => :hat}
+ @config.rest.should == ['file1', 'file2']
+ end
+
+ it 'should stop processing on "--"' do
+ ::ARGV.replace ['--param_1=A', '--', '--param_1=B']
+ @config.resolve!
+ @config.rest.should == ['--param_1=B']
+ @config.should == { :param_1 => 'A', :cat => :hat}
+ end
end
- after do
- ::ARGV.replace []
+ describe "processing single-letter flags" do
+
+ before do
+ @config = Configliere::Param.new :param_1 => 'val 1', :cat => nil, :foo => nil
+ @config.param_definitions = { :param_1 => { :flag => :p }, :cat => { :flag => 'c' } }
+ end
+
+ it 'should parse flags given separately' do
+ ::ARGV.replace ['-p', '-c']
+ @config.resolve!
+ @config.rest.should == []
+ @config.should == { :param_1 => true, :cat => true, :foo => nil}
+ end
+
+ it 'should parse flags given together' do
+ ::ARGV.replace ['-pc']
+ @config.resolve!
+ @config.rest.should == []
+ @config.should == { :param_1 => true, :cat => true, :foo => nil}
+ end
+
+ it 'should not complain about bad single-letter flags by default' do
+ ::ARGV.replace ['-pcz']
+ @config.resolve!
+ @config.rest.should == []
+ @config.should == { :param_1 => true, :cat => true, :foo => nil}
+ end
+
+ it 'should raise an error about bad single-letter flags if asked' do
+ ::ARGV.replace ['-pcz']
+ @config.complain_about_bad_flags!
+ lambda { @config.resolve! }.should raise_error(Configliere::Error)
+ end
+
end
+
end