From: Robert Dober Date: 2007-06-24T07:08:27+09:00 Subject: Re: GetoptLong, but not on ARGV ------=_Part_98989_23865387.1182636503195 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Here goes the patch implementing Tom's idea. I also removed the clumsy loop in #terminate, and than I started to write a test-suite, but I got puzzled by this behavior ( same for the original getoptlong.rb and the patched one ): ------------------- 8< ----------------------------- 577/77 > cat test_getoptlong_basic.rb && ruby test_getoptlong_basic.rb require 'test/unit' require 'getoptlong' class GetoptLong; include Enumerable end class TestGetoptLongBasic < Test::Unit::TestCase def setup @opt = GetoptLong.new([ '-x', GetoptLong::NO_ARGUMENT ],[ '-b', GetoptLong::REQUIRED_ARGUMENT]) end def test_0_basic ARGV.clear.push *%w{ -x -b 4096 } assert_equal [ ["-x", ""], ["-b", "4096"] ], @opt.dup.inject([]){|a, o| a << o } assert_equal [], ARGV ARGV.push *%w{ alpha -x 12 -b 4096 } assert_equal [ ["-x", ""], ["-b", "4096"] ], @opt.dup.inject([]){|a, o| a << o } assert_equal %w{ alpha 12 }, ARGV ARGV.clear.push *%w{ -- -b 4096 } assert_equal [], @opt.dup.inject([]){|a, o| a << o } assert_equal %w{-b 4096}, ARGV # line 23 end end Loaded suite test_getoptlong_basic Started F Finished in 0.014403 seconds. 1) Failure: test_0_basic(TestGetoptLongBasic) [test_getoptlong_basic.rb:23]: <["-b", "4096"]> expected but was <["alpha", "12", "-b", "4096"]>. 1 tests, 6 assertions, 1 failures, 0 errors ------------------- 8< ----------------------------- Any thoughts about it? cheers Robert -- You see things; and you say Why? But I dream things that never were; and I say Why not? -- George Bernard Shaw ------=_Part_98989_23865387.1182636503195 Content-Type: text/x-patch; name=getoptlong.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f3ak7u52 Content-Disposition: attachment; filename="getoptlong.patch" LS0tIGdldG9wdGxvbmcucmIJMjAwNy0wNi0yMyAyMDozOTo0MS4wMDAwMDAwMDAgKzAwMDAKKysr IGdldG9wdGxvbmcubmV3LnJiCTIwMDctMDYtMjMgMjA6NDE6MzkuMDAwMDAwMDAwICswMDAwCkBA IC05MCw2ICs5MCwyNCBAQAogIwogIyAgICAgaGVsbG8gLW4gNiAtLW5hbWUgLS0gL3RtcAogIwor IyBHZXRvcHRMb25nIHdpbGwgcGFyc2UgQVJHViBieSBkZWZhdWx0IGJ1dCBhbnkgYXJyYXkgY2Fu IGJlIHBhcnNlZAorIyBpbnN0ZWFkIGJ5IHNpbXBseSBzZXR0aW5nIHRoZSA8dHQ+YXJnbGlzdDwv dHQ+IGF0dHJpYnV0ZSBiZWZvcmUKKyMgcGFyc2luZywgdGhhdCBpcyBjYWxsaW5nLCA8dHQ+I2Vh Y2g8L3R0PiBvciA8dHQ+I2dldDwvdHQ+LgorIworIyBVc2UgZHVwIHRvIHJldXNlIHRoZSBzYW1l IEdldG9wdExvbmcgb2JqZWN0IGFzIGluIHRoZSBmb2xsb3dpbmcKKyMgZXhhbXBsZToKKyMKKyMg ICBvcHQgPSBHZXRvcHRMb25nLm5ldyhbICcteCcsIEdldG9wdExvbmc6Ok5PX0FSR1VNRU5UIF0s WyAnLWInLAorIyAgIEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VNRU5UXSkKKyMgICAKKyMgICBi bGsgPSBsYW1iZGEgZG8KKyMgICAgfCp2fAorIyAgICBwdXRzIHYuam9pbigiOiAiKQorIyAgIGVu ZAorIyAgIG9wdC5kdXAuZWFjaCAld3sgLXggLWIgMTAyNH0sICZibGsKKyMgICAKKyMgICBvcHQu ZHVwLmVhY2ggJXd7IC1iIDQwOTYgfSwgJmJsaworCiBjbGFzcyBHZXRvcHRMb25nCiAgICMKICAg IyBPcmRlcmluZ3MuCkBAIC0xMTYsNiArMTM0LDcgQEAKICAgY2xhc3MgTWlzc2luZ0FyZ3VtZW50 ICA8IEVycm9yOyBlbmQKICAgY2xhc3MgSW52YWxpZE9wdGlvbiAgICA8IEVycm9yOyBlbmQKIAor ICBhdHRyaWJ1dGVfYWNjZXNzb3IgOmFyZ2xpc3QKICAgIwogICAjIFNldCB1cCBvcHRpb24gcHJv Y2Vzc2luZy4KICAgIwpAQCAtMTMzLDYgKzE1MiwxMCBAQAogICAjIE90aGVyIHRoYW4gdGhhdCwg dGhlIGVsZW1lbnRzIG9mIGVhY2ggc3ViLWFycmF5IGNhbiBiZSBpbiBhbnkgb3JkZXIuCiAgICMK ICAgZGVmIGluaXRpYWxpemUoKmFyZ3VtZW50cykKKwkjCisgICAgIyBEZWZpbmUgZGVmYXVsdCBm b3IgYXJnbGlzdAorICAgICMKKwlAYXJnbGlzdCA9IEFSR1YKICAgICAjCiAgICAgIyBDdXJyZW50 IG9yZGVyaW5nLgogICAgICMKQEAgLTE4Myw3ICsyMDYsNyBAQAogCiAgICAgIwogICAgICMgTGlz dCBvZiBub24tb3B0aW9uLWFyZ3VtZW50cy4KLSAgICAjIEFwcGVuZCB0aGVtIHRvIEFSR1Ygd2hl biBvcHRpb24gcHJvY2Vzc2luZyBpcyB0ZXJtaW5hdGVkLgorICAgICMgQXBwZW5kIHRoZW0gdG8g QGFyZ2xpc3Qgd2hlbiBvcHRpb24gcHJvY2Vzc2luZyBpcyB0ZXJtaW5hdGVkLgogICAgICMKICAg ICBAbm9uX29wdGlvbl9hcmd1bWVudHMgPSBBcnJheS5uZXcKIApAQCAtMjA4LDcgKzIzMSw3IEBA CiAgICMKICAgIyBGb3IgZXhhbXBsZSwgaWYgLWEgYW5kIC1iIGFyZSBvcHRpb25zIHdoaWNoIGRv IG5vdCB0YWtlIGFyZ3VtZW50cywKICAgIyBwYXJzaW5nIGNvbW1hbmQgbGluZSBhcmd1bWVudHMg b2YgJy1hIG9uZSAtYiB0d28nIHdvdWxkIHJlc3VsdCBpbiAKLSAgIyAnb25lJywgJy1iJywgJ3R3 bycgYmVpbmcgbGVmdCBpbiBBUkdWLCBhbmQgb25seSAoJy1hJywgJycpIGJlaW5nIAorICAjICdv bmUnLCAnLWInLCAndHdvJyBiZWluZyBsZWZ0IGluIEBhcmdsaXN0LCBhbmQgb25seSAoJy1hJywg JycpIGJlaW5nIAogICAjIHByb2Nlc3NlZCBhcyBhbiBvcHRpb24vYXJnIHBhaXIuCiAgICMKICAg IyBUaGlzIGlzIHRoZSBkZWZhdWx0IG9yZGVyaW5nLCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFi bGUKQEAgLTIyNSw3ICsyNDgsNyBAQAogICAjIEZvciBleGFtcGxlLCBpZiAtYSBkb2VzIG5vdCBy ZXF1aXJlIGFuIGFyZ3VtZW50IGFuZCAtYiBvcHRpb25hbGx5IHRha2VzCiAgICMgYW4gYXJndW1l bnQsIHBhcnNpbmcgJy1hIG9uZSAtYiB0d28gdGhyZWUnIHdvdWxkIHJlc3VsdCBpbiAoJy1hJywn JykgYW5kCiAgICMgKCctYicsICd0d28nKSBiZWluZyBwcm9jZXNzZWQgYXMgb3B0aW9uL2FyZyBw YWlycywgYW5kICdvbmUnLCd0aHJlZScKLSAgIyBiZWluZyBsZWZ0IGluIEFSR1YuCisgICMgYmVp bmcgbGVmdCBpbiBAYXJnbGlzdC4KICAgIwogICAjIElmIHRoZSBvcmRlcmluZyBpcyBzZXQgdG8g UEVSTVVURSBidXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICMgUE9TSVhMWV9DT1JSRUNU IGlzIHNldCwgUkVRVUlSRV9PUkRFUiBpcyB1c2VkIGluc3RlYWQuIFRoaXMgaXMgZm9yCkBAIC0z NjgsOSArMzkxLDcgQEAKICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJhbiBlcnJvciBoYXMgb2Nj dXJlZCIgaWYgQGVycm9yICE9IG5pbAogCiAgICAgQHN0YXR1cyA9IFNUQVRVU19URVJNSU5BVEVE Ci0gICAgQG5vbl9vcHRpb25fYXJndW1lbnRzLnJldmVyc2VfZWFjaCBkbyB8YXJndW1lbnR8Ci0g ICAgICBBUkdWLnVuc2hpZnQoYXJndW1lbnQpCi0gICAgZW5kCisJQGFyZ2xpc3QudW5zaGlmdCgg KkBub25fb3B0aW9uX2FyZ3VtZW50cyApCiAKICAgICBAY2Fub25pY2FsX25hbWVzID0gbmlsCiAg ICAgQGFyZ3VtZW50X2ZsYWdzID0gbmlsCkBAIC00NTEsMjYgKzQ3MiwyNiBAQAogICAgICMKICAg ICBpZiAwIDwgQHJlc3Rfc2luZ2xlcy5sZW5ndGgKICAgICAgIGFyZ3VtZW50ID0gJy0nICsgQHJl c3Rfc2luZ2xlcwotICAgIGVsc2lmIChBUkdWLmxlbmd0aCA9PSAwKQorICAgIGVsc2lmIChAYXJn bGlzdC5sZW5ndGggPT0gMCkKICAgICAgIHRlcm1pbmF0ZQogICAgICAgcmV0dXJuIG5pbAogICAg IGVsc2lmIEBvcmRlcmluZyA9PSBQRVJNVVRFCi0gICAgICB3aGlsZSAwIDwgQVJHVi5sZW5ndGgg JiYgQVJHVlswXSAhfiAvXi0uLwotCUBub25fb3B0aW9uX2FyZ3VtZW50cy5wdXNoKEFSR1Yuc2hp ZnQpCisgICAgICB3aGlsZSAwIDwgQGFyZ2xpc3QubGVuZ3RoICYmIEBhcmdsaXN0WzBdICF+IC9e LS4vCisJQG5vbl9vcHRpb25fYXJndW1lbnRzLnB1c2goQGFyZ2xpc3Quc2hpZnQpCiAgICAgICBl bmQKLSAgICAgIGlmIEFSR1YubGVuZ3RoID09IDAKKyAgICAgIGlmIEBhcmdsaXN0Lmxlbmd0aCA9 PSAwCiAJdGVybWluYXRlCiAJcmV0dXJuIG5pbAogICAgICAgZW5kCi0gICAgICBhcmd1bWVudCA9 IEFSR1Yuc2hpZnQKKyAgICAgIGFyZ3VtZW50ID0gQGFyZ2xpc3Quc2hpZnQKICAgICBlbHNpZiBA b3JkZXJpbmcgPT0gUkVRVUlSRV9PUkRFUiAKLSAgICAgIGlmIChBUkdWWzBdICF+IC9eLS4vKQor ICAgICAgaWYgKEBhcmdsaXN0WzBdICF+IC9eLS4vKQogCXRlcm1pbmF0ZQogCXJldHVybiBuaWwK ICAgICAgIGVuZAotICAgICAgYXJndW1lbnQgPSBBUkdWLnNoaWZ0CisgICAgICBhcmd1bWVudCA9 IEBhcmdsaXN0LnNoaWZ0CiAgICAgZWxzZQotICAgICAgYXJndW1lbnQgPSBBUkdWLnNoaWZ0Cisg ICAgICBhcmd1bWVudCA9IEBhcmdsaXN0LnNoaWZ0CiAgICAgZW5kCiAKICAgICAjCkBAIC01MTcs OCArNTM4LDggQEAKICAgICAgIGlmIEBhcmd1bWVudF9mbGFnc1tvcHRpb25fbmFtZV0gPT0gUkVR VUlSRURfQVJHVU1FTlQKIAlpZiBhcmd1bWVudCA9fiAvPSguKikkLwogCSAgb3B0aW9uX2FyZ3Vt ZW50ID0gJDEKLQllbHNpZiAwIDwgQVJHVi5sZW5ndGgKLQkgIG9wdGlvbl9hcmd1bWVudCA9IEFS R1Yuc2hpZnQKKwllbHNpZiAwIDwgQGFyZ2xpc3QubGVuZ3RoCisJICBvcHRpb25fYXJndW1lbnQg PSBAYXJnbGlzdC5zaGlmdAogCWVsc2UKIAkgIHNldF9lcnJvcihNaXNzaW5nQXJndW1lbnQsCiAJ ICAgICAgICAgICAgIm9wdGlvbiBgI3thcmd1bWVudH0nIHJlcXVpcmVzIGFuIGFyZ3VtZW50IikK QEAgLTUyNiw4ICs1NDcsOCBAQAogICAgICAgZWxzaWYgQGFyZ3VtZW50X2ZsYWdzW29wdGlvbl9u YW1lXSA9PSBPUFRJT05BTF9BUkdVTUVOVAogCWlmIGFyZ3VtZW50ID1+IC89KC4qKSQvCiAJICBv cHRpb25fYXJndW1lbnQgPSAkMQotCWVsc2lmIDAgPCBBUkdWLmxlbmd0aCAmJiBBUkdWWzBdICF+ IC9eLS4vCi0JICBvcHRpb25fYXJndW1lbnQgPSBBUkdWLnNoaWZ0CisJZWxzaWYgMCA8IEBhcmds aXN0Lmxlbmd0aCAmJiBAYXJnbGlzdFswXSAhfiAvXi0uLworCSAgb3B0aW9uX2FyZ3VtZW50ID0g QGFyZ2xpc3Quc2hpZnQKIAllbHNlCiAJICBvcHRpb25fYXJndW1lbnQgPSAnJwogCWVuZApAQCAt NTUzLDggKzU3NCw4IEBACiAJICBpZiAwIDwgQHJlc3Rfc2luZ2xlcy5sZW5ndGgKIAkgICAgb3B0 aW9uX2FyZ3VtZW50ID0gQHJlc3Rfc2luZ2xlcwogCSAgICBAcmVzdF9zaW5nbGVzID0gJycKLQkg IGVsc2lmIDAgPCBBUkdWLmxlbmd0aAotCSAgICBvcHRpb25fYXJndW1lbnQgPSBBUkdWLnNoaWZ0 CisJICBlbHNpZiAwIDwgQGFyZ2xpc3QubGVuZ3RoCisJICAgIG9wdGlvbl9hcmd1bWVudCA9IEBh cmdsaXN0LnNoaWZ0CiAJICBlbHNlCiAJICAgICMgMTAwMy4yIHNwZWNpZmllcyB0aGUgZm9ybWF0 IG9mIHRoaXMgbWVzc2FnZS4KIAkgICAgc2V0X2Vycm9yKE1pc3NpbmdBcmd1bWVudCwgIm9wdGlv biByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAje2NofSIpCkBAIC01NjMsOCArNTg0LDggQEAKIAkg IGlmIDAgPCBAcmVzdF9zaW5nbGVzLmxlbmd0aAogCSAgICBvcHRpb25fYXJndW1lbnQgPSBAcmVz dF9zaW5nbGVzCiAJICAgIEByZXN0X3NpbmdsZXMgPSAnJwotCSAgZWxzaWYgMCA8IEFSR1YubGVu Z3RoICYmIEFSR1ZbMF0gIX4gL14tLi8KLQkgICAgb3B0aW9uX2FyZ3VtZW50ID0gQVJHVi5zaGlm dAorCSAgZWxzaWYgMCA8IEBhcmdsaXN0Lmxlbmd0aCAmJiBAYXJnbGlzdFswXSAhfiAvXi0uLwor CSAgICBvcHRpb25fYXJndW1lbnQgPSBAYXJnbGlzdC5zaGlmdAogCSAgZWxzZQogCSAgICBvcHRp b25fYXJndW1lbnQgPSAnJwogCSAgZW5kCg== ------=_Part_98989_23865387.1182636503195--