summaryrefslogtreecommitdiffstats
path: root/spec/ecore_getopt_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ecore_getopt_spec.rb')
-rw-r--r--spec/ecore_getopt_spec.rb275
1 files changed, 275 insertions, 0 deletions
diff --git a/spec/ecore_getopt_spec.rb b/spec/ecore_getopt_spec.rb
new file mode 100644
index 0000000..7e6e5d9
--- /dev/null
+++ b/spec/ecore_getopt_spec.rb
@@ -0,0 +1,275 @@
+#! /usr/bin/env ruby
+# -*- coding: UTF-8 -*-
+#
+require 'efl/ecore_getopt'
+#
+describe Efl::EcoreGetopt do
+ #
+ before(:all) do
+ Efl::Ecore.init
+ #
+ @p = Efl::EcoreGetopt::REcoreGetopt.new :prog =>"Prog", :usage => "Usage", :version => "0.0.0", :copyright => "less", :license => "MIT", :description => "description", :strict => 1
+ @callback = Proc.new do |parser, desc, string, data, value|
+ parser.address.should eql @p.to_ptr.address
+ string.should eql "my_data"
+ data.read_string.should eql "cb_data"
+ value.read_pointer.read_int.should eql 99
+ true
+ end
+ #
+ @values = {
+ :license => FFI::MemoryPointer.new(:uchar),
+ :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),
+ :const => FFI::MemoryPointer.new(:int),
+ :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),
+ }
+ @meta1 = FFI::MemoryPointer.from_string "My pretty"
+ @meta2 = FFI::MemoryPointer.from_string "My precious"
+ @cb_data = FFI::MemoryPointer.from_string "cb_data"
+ #
+ @p.license 'L', 'license'
+ @p.value :boolp, @values[:license]
+ @p.copyright 'C', 'copyright'
+ @p.value :boolp, @values[:copyright]
+ @p.version 'V', 'version'
+ @p.value :boolp, @values[:version]
+ @p.help 'H', 'help'
+ @p.value :boolp, @values[:help]
+ @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', @meta1
+ @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', @meta2, :ecore_getopt_desc_arg_requirement_yes, 666
+ @p.value :longp, @values[:long]
+ @p.store_const 'c', 'const', 'store a constant', 123456
+ @p.value :intp, @values[:const]
+ @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]
+ @p.callback_args 'b', 'callback', 'callback full', @meta, @callback, @cb_data
+ @p.value :intp, @values[:callback]
+ @p.create
+# puts @p.debug
+ #
+ end
+ before(:each) do
+ [ :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[:const].write_int -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 99
+ end
+ after(:all) do
+ Efl::Ecore.shutdown
+ end
+ #
+ describe "license copyright version help" do
+ it "should handle -L" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["My lovely prog name","-L"]
+ @values[:license].read_char.should eql 1
+ [ :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ it "should handle --license" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["My lovely prog name","--license"]
+ @values[:license].read_char.should eql 1
+ [ :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ it "should handle -C" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["progname","-C"]
+ @values[:copyright].read_char.should eql 1
+ [ :license, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ it "should handle --copyright" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["My lovely prog name","--copyright"]
+ @values[:copyright].read_char.should eql 1
+ [ :license, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ it "should handle -V" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["My lovely prog name","-V"]
+ @values[:version].read_char.should eql 1
+ [ :license, :copyright, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ it "should handle --version" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["progname","--version"]
+ @values[:version].read_char.should eql 1
+ [ :license, :copyright, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ it "should handle -H" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["My lovely prog name","-H"]
+ @values[:help].read_char.should eql 1
+ [ :license, :copyright, :version ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ it "should handle --help" do
+ [ :license, :copyright, :version, :help ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ args = @p.parse ["progname","--help"]
+ @values[:help].read_char.should eql 1
+ [ :license, :copyright, :version ].each do |sym|
+ @values[sym].read_char.should eql 0
+ end
+ end
+ end
+ describe "simple short 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
+ 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
+ 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
+ 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
+ end
+ it "should handle -c" do
+ @values[:const].read_int.should eql -666
+ args = @p.parse ["progname","-c"]
+ @values[:const].read_int.should eql 123456
+ 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
+ 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
+ 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"
+ 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
+ end
+ it "should handle -b" do
+ args = @p.parse ["progname","-bmy_data"]
+ end
+ end
+ describe "simple long options" do
+ 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
+ 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
+ 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
+ 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
+ end
+ it "should handle --const" do
+ @values[:const].read_int.should eql -666
+ args = @p.parse ["progname","--const"]
+ @values[:const].read_int.should eql 123456
+ 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
+ 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
+ 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"
+ 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
+ end
+ it "should handle --callback" do
+ args = @p.parse ["progname","--callback=my_data"]
+ end
+ end
+end