1require_relative 'test_optparse' 2 3class TestOptionParser::Acceptable < TestOptionParser 4 5 def setup 6 super 7 @opt.def_option("--integer VAL", Integer) { |v| @integer = v } 8 @opt.def_option("--float VAL", Float) { |v| @float = v } 9 @opt.def_option("--numeric VAL", Numeric) { |v| @numeric = v } 10 11 @opt.def_option("--decimal-integer VAL", 12 OptionParser::DecimalInteger) { |i| @decimal_integer = i } 13 @opt.def_option("--octal-integer VAL", 14 OptionParser::OctalInteger) { |i| @octal_integer = i } 15 @opt.def_option("--decimal-numeric VAL", 16 OptionParser::DecimalNumeric) { |i| @decimal_numeric = i } 17 end 18 19 def test_integer 20 assert_equal(%w"", no_error {@opt.parse!(%w"--integer 0")}) 21 assert_equal(0, @integer) 22 23 assert_equal(%w"", no_error {@opt.parse!(%w"--integer 0b10")}) 24 assert_equal(2, @integer) 25 26 assert_equal(%w"", no_error {@opt.parse!(%w"--integer 077")}) 27 assert_equal(63, @integer) 28 29 assert_equal(%w"", no_error {@opt.parse!(%w"--integer 10")}) 30 assert_equal(10, @integer) 31 32 assert_equal(%w"", no_error {@opt.parse!(%w"--integer 0x3")}) 33 assert_equal(3, @integer) 34 35 assert_raises(OptionParser::InvalidArgument) do 36 @opt.parse!(%w"--integer 0b") 37 end 38 39 assert_raises(OptionParser::InvalidArgument) do 40 @opt.parse!(%w"--integer 09") 41 end 42 43 assert_raises(OptionParser::InvalidArgument) do 44 @opt.parse!(%w"--integer 0x") 45 end 46 47 assert_raises(OptionParser::InvalidArgument) do 48 @opt.parse!(%w"--integer 1234xyz") 49 end 50 end 51 52 def test_float 53 assert_equal(%w"", no_error {@opt.parse!(%w"--float 0")}) 54 assert_in_epsilon(0.0, @float) 55 56 assert_equal(%w"", no_error {@opt.parse!(%w"--float 0.0")}) 57 assert_in_epsilon(0.0, @float) 58 59 assert_equal(%w"", no_error {@opt.parse!(%w"--float 1.2")}) 60 assert_in_epsilon(1.2, @float) 61 62 assert_equal(%w"", no_error {@opt.parse!(%w"--float 1E2")}) 63 assert_in_epsilon(100, @float) 64 65 assert_equal(%w"", no_error {@opt.parse!(%w"--float 1E-2")}) 66 assert_in_epsilon(0.01, @float) 67 68 assert_raises(OptionParser::InvalidArgument) do 69 @opt.parse!(%w"--float 0e") 70 end 71 72 assert_raises(OptionParser::InvalidArgument) do 73 @opt.parse!(%w"--float 1.234xyz") 74 end 75 end 76 77 def test_numeric 78 assert_equal(%w"", no_error {@opt.parse!(%w"--numeric 0")}) 79 assert_equal(0, @numeric) 80 81 assert_equal(%w"", no_error {@opt.parse!(%w"--numeric 0/1")}) 82 assert_equal(0, @numeric) 83 84 assert_equal(%w"", no_error {@opt.parse!(%w"--numeric 1/2")}) 85 assert_equal(Rational(1, 2), @numeric) 86 87 assert_equal(%w"", no_error {@opt.parse!(%w"--numeric 1.2/2.3")}) 88 assert_equal(Rational(12, 23), @numeric) 89 90 assert_raises(OptionParser::InvalidArgument) do 91 @opt.parse!(%w"--numeric 1/") 92 end 93 94 assert_raises(OptionParser::InvalidArgument) do 95 @opt.parse!(%w"--numeric 12/34xyz") 96 end 97 98 assert_raises(OptionParser::InvalidArgument) do 99 @opt.parse!(%w"--numeric 12x/34yz") 100 end 101 end 102 103 def test_decimal_integer 104 assert_equal(%w"", no_error {@opt.parse!(%w"--decimal-integer 0")}) 105 assert_equal(0, @decimal_integer) 106 107 assert_equal(%w"", no_error {@opt.parse!(%w"--decimal-integer 10")}) 108 assert_equal(10, @decimal_integer) 109 110 assert_raises(OptionParser::InvalidArgument) do 111 @opt.parse!(%w"--decimal-integer 0b1") 112 end 113 114 e = assert_raises(OptionParser::InvalidArgument) do 115 @opt.parse!(%w"--decimal-integer 09") 116 end 117 118 assert_equal("invalid argument: --decimal-integer 09", e.message) 119 120 assert_raises(OptionParser::InvalidArgument) do 121 @opt.parse!(%w"--decimal-integer x") 122 end 123 124 assert_raises(OptionParser::InvalidArgument) do 125 @opt.parse!(%w"--decimal-integer 1234xyz") 126 end 127 end 128 129 def test_octal_integer 130 assert_equal(%w"", no_error {@opt.parse!(%w"--octal-integer 0")}) 131 assert_equal(0, @octal_integer) 132 133 assert_equal(%w"", no_error {@opt.parse!(%w"--octal-integer 6")}) 134 assert_equal(6, @octal_integer) 135 136 assert_equal(%w"", no_error {@opt.parse!(%w"--octal-integer 07")}) 137 assert_equal(7, @octal_integer) 138 139 assert_equal(%w"", no_error {@opt.parse!(%w"--octal-integer 10")}) 140 assert_equal(8, @octal_integer) 141 142 assert_equal(%w"", no_error {@opt.parse!(%w"--octal-integer 011")}) 143 assert_equal(9, @octal_integer) 144 145 assert_raises(OptionParser::InvalidArgument) do 146 @opt.parse!(%w"--octal-integer 09") 147 end 148 149 assert_raises(OptionParser::InvalidArgument) do 150 @opt.parse!(%w"--octal-integer 0b1") 151 end 152 153 assert_raises(OptionParser::InvalidArgument) do 154 @opt.parse!(%w"--octal-integer x") 155 end 156 157 assert_raises(OptionParser::InvalidArgument) do 158 @opt.parse!(%w"--octal-integer 01234xyz") 159 end 160 end 161 162 def test_decimal_numeric 163 assert_equal(%w"", no_error {@opt.parse!(%w"--decimal-numeric 0")}) 164 assert_equal(0, @decimal_numeric) 165 166 assert_equal(%w"", no_error {@opt.parse!(%w"--decimal-numeric 01")}) 167 assert_equal(1, @decimal_numeric) 168 169 assert_equal(%w"", no_error {@opt.parse!(%w"--decimal-numeric 1.2")}) 170 assert_in_delta(1.2, @decimal_numeric) 171 172 assert_equal(%w"", no_error {@opt.parse!(%w"--decimal-numeric 1E2")}) 173 assert_in_delta(100.0, @decimal_numeric) 174 175 assert_raises(OptionParser::InvalidArgument) do 176 @opt.parse!(%w"--decimal-numeric 0b1") 177 end 178 179 e = assert_raises(OptionParser::InvalidArgument) do 180 @opt.parse!(%w"--decimal-numeric 09") 181 end 182 183 assert_equal("invalid argument: --decimal-numeric 09", e.message) 184 185 assert_raises(OptionParser::InvalidArgument) do 186 @opt.parse!(%w"--decimal-integer 1234xyz") 187 end 188 189 assert_raises(OptionParser::InvalidArgument) do 190 @opt.parse!(%w"--decimal-integer 12.34xyz") 191 end 192 end 193 194end 195 196