diff options
| -rw-r--r-- | lib/efl/ecore_getopt.rb | 16 | ||||
| -rw-r--r-- | spec/ecore_getopt_spec.rb | 193 | 
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 | 
