summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/efl/ecore_getopt.rb16
-rw-r--r--spec/ecore_getopt_spec.rb193
2 files changed, 189 insertions, 20 deletions
diff --git a/lib/efl/ecore_getopt.rb b/lib/efl/ecore_getopt.rb
index 38c1f8c..00de244 100644
--- a/lib/efl/ecore_getopt.rb
+++ b/lib/efl/ecore_getopt.rb
@@ -240,21 +240,23 @@ module Efl
# end
#
def debug
- puts "#{self.class} : #{@parser_p.to_ptr}"
+ r = ''
+ r << "#{self.class} : #{@parser_p.to_ptr}\n"
[:prog,:usage,:version,:copyright,:license,:description].each do |sym|
- puts " #{sym.to_s} : #{@parser_p[sym]==FFI::Pointer::NULL ? 'NULL' : @parser_p[sym].read_string}"
+ r<< " #{sym.to_s} : #{@parser_p[sym]==FFI::Pointer::NULL ? 'NULL' : @parser_p[sym].read_string}\n"
end
- puts " strict : #{@parser_p[:strict]}"
+ r << " strict : #{@parser_p[:strict]}\n"
i=0
while true
d = @parser_p.desc_ptr i
break if d[:shortname]==0 and d[:longname] == FFI::Pointer::NULL
- puts " desc #{d.to_ptr}"
- puts " short: #{d[:shortname].chr}" unless d[:shortname]==0
- puts " long: #{d[:longname].read_string}" unless d[:longname]==FFI::Pointer::NULL
- puts " help: #{d[:help].read_string}" unless d[:help]==FFI::Pointer::NULL
+ r << " desc #{d.to_ptr}\n"
+ r << " short: #{d[:shortname].chr}\n" unless d[:shortname]==0
+ r << " long: #{d[:longname].read_string}\n" unless d[:longname]==FFI::Pointer::NULL
+ r << " help: #{d[:help].read_string}\n" unless d[:help]==FFI::Pointer::NULL
i+=1
end
+ r
end
end
end
diff --git a/spec/ecore_getopt_spec.rb b/spec/ecore_getopt_spec.rb
index b900b23..3d0a7c0 100644
--- a/spec/ecore_getopt_spec.rb
+++ b/spec/ecore_getopt_spec.rb
@@ -1,7 +1,6 @@
#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
#
-require 'stringio'
require 'efl/ecore'
require 'efl/ecore_getopt'
#
@@ -21,10 +20,30 @@ describe Efl::EcoreGetopt do
:copyright => FFI::MemoryPointer.new(:uchar),
:version => FFI::MemoryPointer.new(:uchar),
:help => FFI::MemoryPointer.new(:uchar),
+ :int => FFI::MemoryPointer.new(:int),
+ :double => FFI::MemoryPointer.new(:double),
+ :short => FFI::MemoryPointer.new(:short),
+ :long => FFI::MemoryPointer.new(:long),
+ :true => FFI::MemoryPointer.new(:uchar),
+ :false => FFI::MemoryPointer.new(:uchar),
+ :choice => FFI::MemoryPointer.new(:pointer),
+ :count => FFI::MemoryPointer.new(:int),
+ :callback => FFI::MemoryPointer.new(:int),
}
[ :license, :copyright, :version, :help ].each do |sym|
@values[sym].write_char 0
end
+ @values[:int].write_int 0
+ @values[:double].write_double 3.1415926
+ @values[:short].write_short 9
+ @values[:long].write_long 666
+ @values[:true].write_uchar 1
+ @values[:false].write_uchar 0
+ @values[:choice].write_pointer FFI::Pointer::NULL
+ @values[:count].write_int 664
+ @values[:callback].write_int 9
+ @meta = FFI::MemoryPointer.from_string "My pretty metadata"
+ @cb_data = FFI::MemoryPointer.from_string "cb data"
#
@p.license 'L', 'license'
@p.value :boolp, @values[:license]
@@ -34,19 +53,31 @@ describe Efl::EcoreGetopt do
@p.value :boolp, @values[:version]
@p.help 'H', 'help'
@p.value :boolp, @values[:help]
-# @p.store_type :int, 'i', 'int', 'store an integer'
-# @p.store_meta_type :double, 'd', 'double', 'store an double+meta', meta
-# @p.store_def_type :str, 's', 'str', 'store an string+default', "hello world"
-# @p.store_full_type :short, 's', 'short', 'store a short+full', 'meta', :ecore_getopt_desc_arg_requirement_yes, 666
-# @p.store_const 'c', 'const', 'store a constant', FFI::MemoryPointer.from_string("my constant")
-# @p.store_true 't', 'true', 'store true'
-# @p.store_false 'f', 'false', 'store false'
-# @p.choice 'm', 'many', 'store choice', ['ch1','ch2','ch3']
-# @p.append 'a', 'append', 'store append'
-# @p.count 'k', 'count', 'store count'
-# @p.callback_args 'b', 'callback', 'callback full', meta, p.method(:cb), 666
+ @p.store_type :int, 'i', 'int', 'store an integer'
+ @p.value :intp, @values[:int]
+ @p.store_meta_type :double, 'd', 'double', 'store an double+meta', @meta
+ @p.value :doublep, @values[:double]
+ @p.store_def_type :short, 's', 'short', 'store an short+default', 6
+ @p.value :shortp, @values[:short]
+ @p.store_full_type :long, 'l', 'long', 'store a long+full', @meta, :ecore_getopt_desc_arg_requirement_yes, 666
+ @p.value :longp, @values[:long]
+ @p.store_const 'c', 'const', 'store a constant', 123456
+ @p.value :longp, @values[:long]
+ @p.store_true 't', 'true', 'store true'
+ @p.value :boolp, @values[:false]
+ @p.store_false 'f', 'false', 'store false'
+ @p.value :boolp, @values[:true]
+ @p.choice 'm', 'many', 'store choice', ['ch1','ch2','ch3']
+ @p.value :strp, @values[:choice]
+ # FIXME: uses listp with Eina_List
+# @p.append 'a', 'append', 'store append', :ecore_getopt_type_int
+ @p.count 'k', 'count', 'store count'
+ @p.value :intp, @values[:count]
+ # FIXME breaks --long ??
+# @p.callback_args 'b', 'callback', 'callback full', @meta, @p.method(:cb), @cb_data
+# @p.value :intp, @values[:callback]
@p.create
-# @p.debug
+# puts @p.debug
#
end
#
@@ -148,4 +179,140 @@ describe Efl::EcoreGetopt do
Efl::Ecore.shutdown
end
end
+ describe "simple options" do
+ it "should handle -i" do
+ #
+ @values[:int].read_int.should eql 0
+ args = @p.parse ["progname","-i 666"]
+ @values[:int].read_int.should eql 666
+ Efl::Ecore.shutdown
+ end
+ it "should handle --int" do
+ #
+ @values[:int].read_int.should eql 0
+ args = @p.parse ["progname","--int=666"]
+ @values[:int].read_int.should eql 666
+ Efl::Ecore.shutdown
+ end
+ it "should handle -d" do
+ #
+ @values[:double].read_double.should eql 3.1415926
+ args = @p.parse ["progname","-d 6.66"]
+ @values[:double].read_double.should eql 6.66
+ Efl::Ecore.shutdown
+ end
+ it "should handle --double" do
+ #
+ @values[:double].read_double.should eql 3.1415926
+ args = @p.parse ["progname","--double=6.66"]
+ @values[:double].read_double.should eql 6.66
+ Efl::Ecore.shutdown
+ end
+# # FIXME : maybe fix ecore
+# it "should handle -s default" do
+# #
+# @values[:short].read_short.should eql 9
+# args = @p.parse ["progname"]
+# @values[:short].read_short.should eql 6
+# Efl::Ecore.shutdown
+# end
+ it "should handle -s" do
+ #
+ @values[:short].read_short.should eql 9
+ args = @p.parse ["progname","-s 125"]
+ @values[:short].read_short.should eql 125
+ Efl::Ecore.shutdown
+ end
+ it "should handle --short" do
+ #
+ @values[:short].read_short.should eql 9
+ args = @p.parse ["progname","--short=125"]
+ @values[:short].read_short.should eql 125
+ Efl::Ecore.shutdown
+ end
+ it "should handle -l" do
+ #
+ @values[:long].read_long.should eql 666
+ args = @p.parse ["progname","-l 69"]
+ @values[:long].read_long.should eql 69
+ Efl::Ecore.shutdown
+ end
+ it "should handle --long" do
+ #
+ @values[:long].read_long.should eql 666
+ args = @p.parse ["progname","--long=69"]
+ @values[:long].read_long.should eql 69
+ Efl::Ecore.shutdown
+ end
+ it "should handle -c" do
+ #
+ @values[:long].read_long.should eql 666
+ args = @p.parse ["progname","-c"]
+ @values[:long].read_long.should eql 123456
+ Efl::Ecore.shutdown
+ end
+ it "should handle --const" do
+ #
+ @values[:long].read_long.should eql 666
+ args = @p.parse ["progname","--const"]
+ @values[:long].read_long.should eql 123456
+ Efl::Ecore.shutdown
+ end
+ it "should handle -t" do
+ #
+ @values[:false].read_uchar.should eql 0
+ args = @p.parse ["progname","-t"]
+ @values[:false].read_uchar.should eql 1
+ Efl::Ecore.shutdown
+ end
+ it "should handle --true" do
+ #
+ @values[:false].read_uchar.should eql 0
+ args = @p.parse ["progname","--true"]
+ @values[:false].read_uchar.should eql 1
+ Efl::Ecore.shutdown
+ end
+ it "should handle -f" do
+ #
+ @values[:true].read_uchar.should eql 1
+ args = @p.parse ["progname","-f"]
+ @values[:true].read_uchar.should eql 0
+ Efl::Ecore.shutdown
+ end
+ it "should handle --false" do
+ #
+ @values[:true].read_uchar.should eql 1
+ args = @p.parse ["progname","--false"]
+ @values[:true].read_uchar.should eql 0
+ Efl::Ecore.shutdown
+ end
+ it "should handle -m" do
+ #
+ @values[:choice].read_pointer.should eql FFI::Pointer::NULL
+ args = @p.parse ["progname","-mch2"]
+ @values[:choice].read_pointer.read_string.should eql "ch2"
+ Efl::Ecore.shutdown
+ end
+ it "should handle --many" do
+ #
+ @values[:choice].read_pointer.should eql FFI::Pointer::NULL
+ args = @p.parse ["progname","--many=ch3"]
+ @values[:choice].read_pointer.read_string.should eql "ch3"
+ Efl::Ecore.shutdown
+ end
+ it "should handle -k" do
+ #
+ @values[:count].read_int.should eql 664
+ args = @p.parse ["progname","-kk"]
+ @values[:count].read_int.should eql 666
+ Efl::Ecore.shutdown
+ end
+ it "should handle --count" do
+ #
+ @values[:count].read_int.should eql 664
+ args = @p.parse ["progname","--count","--count"]
+ @values[:count].read_int.should eql 666
+ Efl::Ecore.shutdown
+ end
+ end
end