1begin 2 require 'win32ole' 3rescue LoadError 4end 5require "test/unit" 6 7if defined?(WIN32OLE_VARIANT) 8 9 class TestWIN32OLE_VARIANT < Test::Unit::TestCase 10 def setup 11 @orglocale = WIN32OLE.locale 12 WIN32OLE.locale = 0x0409 # set locale US-Eng 13 end 14 15 def teardown 16 WIN32OLE.locale = @orglocale 17 end 18 19 def test_s_new 20 obj = WIN32OLE_VARIANT.new('foo') 21 assert_instance_of(WIN32OLE_VARIANT, obj) 22 end 23 24 def test_s_new_exc 25 assert_raise(TypeError) { 26 WIN32OLE_VARIANT.new(/foo/) 27 } 28 end 29 30 def test_s_new_no_argument 31 ex = nil 32 begin 33 obj = WIN32OLE_VARIANT.new 34 rescue ArgumentError 35 ex = $! 36 end 37 assert_instance_of(ArgumentError, ex) 38 assert_equal("wrong number of arguments (0 for 1..3)", ex.message); 39 end 40 41 def test_s_new_one_argument 42 ex = nil 43 begin 44 obj = WIN32OLE_VARIANT.new('foo') 45 rescue 46 ex = $! 47 end 48 assert_equal(nil, ex); 49 end 50 51 def test_s_new_with_nil 52 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_I2) 53 assert_equal(0, obj.value) 54 assert_equal(WIN32OLE::VARIANT::VT_I2, obj.vartype) 55 56 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_I4) 57 assert_equal(0, obj.value) 58 assert_equal(WIN32OLE::VARIANT::VT_I4, obj.vartype) 59 60 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_R4) 61 assert_equal(0, obj.value) 62 assert_equal(WIN32OLE::VARIANT::VT_R4, obj.vartype) 63 64 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_R8) 65 assert_equal(0, obj.value) 66 assert_equal(WIN32OLE::VARIANT::VT_R8, obj.vartype) 67 68 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_CY) 69 assert_equal("0", obj.value) 70 assert_equal(WIN32OLE::VARIANT::VT_CY, obj.vartype) 71 72 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_DATE) 73 assert_equal(Time.new(1899,12,30), obj.value) 74 assert_equal(WIN32OLE::VARIANT::VT_DATE, obj.vartype) 75 76 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_BSTR) 77 assert_equal("", obj.value) 78 assert_equal(WIN32OLE::VARIANT::VT_BSTR, obj.vartype) 79 80 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_DISPATCH) 81 assert_nil(obj.value) 82 assert_equal(WIN32OLE::VARIANT::VT_DISPATCH, obj.vartype) 83 84 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_BOOL) 85 assert_equal(false, obj.value) 86 assert_equal(WIN32OLE::VARIANT::VT_BOOL, obj.vartype) 87 88 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_VARIANT) 89 assert_nil(obj.value) 90 assert_equal(WIN32OLE::VARIANT::VT_VARIANT, obj.vartype) 91 92 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_I1) 93 assert_equal(0, obj.value) 94 assert_equal(WIN32OLE::VARIANT::VT_I1, obj.vartype) 95 96 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_UI1) 97 assert_equal(0, obj.value) 98 assert_equal(WIN32OLE::VARIANT::VT_UI1, obj.vartype) 99 100 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_UI2) 101 assert_equal(0, obj.value) 102 assert_equal(WIN32OLE::VARIANT::VT_UI2, obj.vartype) 103 104 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_UI4) 105 assert_equal(0, obj.value) 106 assert_equal(WIN32OLE::VARIANT::VT_UI4, obj.vartype) 107 108 109 if defined?(WIN32OLE::VARIANT::VT_I8) 110 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_I8) 111 assert_equal(0, obj.value) 112 assert_equal(WIN32OLE::VARIANT::VT_I8, obj.vartype) 113 end 114 115 if defined?(WIN32OLE::VARIANT::VT_UI8) 116 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_UI8) 117 assert_equal(0, obj.value) 118 assert_equal(WIN32OLE::VARIANT::VT_UI8, obj.vartype) 119 end 120 121 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_INT) 122 assert_equal(0, obj.value) 123 assert_equal(WIN32OLE::VARIANT::VT_INT, obj.vartype) 124 125 obj = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_UINT) 126 assert_equal(0, obj.value) 127 assert_equal(WIN32OLE::VARIANT::VT_UINT, obj.vartype) 128 end 129 130 def test_s_new_with_non_nil 131 obj = WIN32OLE_VARIANT.new(2, WIN32OLE::VARIANT::VT_I2) 132 assert_equal(2, obj.value) 133 assert_equal(WIN32OLE::VARIANT::VT_I2, obj.vartype) 134 135 obj = WIN32OLE_VARIANT.new(3, WIN32OLE::VARIANT::VT_I4) 136 assert_equal(3, obj.value) 137 assert_equal(WIN32OLE::VARIANT::VT_I4, obj.vartype) 138 139 obj = WIN32OLE_VARIANT.new(4.5, WIN32OLE::VARIANT::VT_R4) 140 assert_equal(4.5, obj.value) 141 assert_equal(WIN32OLE::VARIANT::VT_R4, obj.vartype) 142 143 obj = WIN32OLE_VARIANT.new(5.5, WIN32OLE::VARIANT::VT_R8) 144 assert_equal(5.5, obj.value) 145 assert_equal(WIN32OLE::VARIANT::VT_R8, obj.vartype) 146 147 obj = WIN32OLE_VARIANT.new(600, WIN32OLE::VARIANT::VT_CY) 148 assert_equal("600", obj.value) 149 assert_equal(WIN32OLE::VARIANT::VT_CY, obj.vartype) 150 151 obj = WIN32OLE_VARIANT.new("2001-06-15 12:17:34", WIN32OLE::VARIANT::VT_DATE) 152 assert_equal(Time.new(2001,06,15,12,17,34), obj.value) 153 assert_equal(WIN32OLE::VARIANT::VT_DATE, obj.vartype) 154 155 obj = WIN32OLE_VARIANT.new("foo", WIN32OLE::VARIANT::VT_BSTR) 156 assert_equal("foo", obj.value) 157 assert_equal(WIN32OLE::VARIANT::VT_BSTR, obj.vartype) 158 159 obj = WIN32OLE_VARIANT.new(true, WIN32OLE::VARIANT::VT_BOOL) 160 assert_equal(true, obj.value) 161 assert_equal(WIN32OLE::VARIANT::VT_BOOL, obj.vartype) 162 163 obj = WIN32OLE_VARIANT.new(2, WIN32OLE::VARIANT::VT_I1) 164 assert_equal(2, obj.value) 165 assert_equal(WIN32OLE::VARIANT::VT_I1, obj.vartype) 166 167 obj = WIN32OLE_VARIANT.new(3, WIN32OLE::VARIANT::VT_UI1) 168 assert_equal(3, obj.value) 169 assert_equal(WIN32OLE::VARIANT::VT_UI1, obj.vartype) 170 171 obj = WIN32OLE_VARIANT.new(4, WIN32OLE::VARIANT::VT_UI2) 172 assert_equal(4, obj.value) 173 assert_equal(WIN32OLE::VARIANT::VT_UI2, obj.vartype) 174 175 obj = WIN32OLE_VARIANT.new(5, WIN32OLE::VARIANT::VT_UI4) 176 assert_equal(5, obj.value) 177 assert_equal(WIN32OLE::VARIANT::VT_UI4, obj.vartype) 178 179 if defined?(WIN32OLE::VARIANT::VT_I8) 180 obj = WIN32OLE_VARIANT.new(-123456789012345, WIN32OLE::VARIANT::VT_I8) 181 assert_equal(-123456789012345, obj.value) 182 assert_equal(WIN32OLE::VARIANT::VT_I8, obj.vartype) 183 end 184 185 if defined?(WIN32OLE::VARIANT::VT_UI8) 186 obj = WIN32OLE_VARIANT.new(123456789012345, WIN32OLE::VARIANT::VT_UI8) 187 assert_equal(123456789012345, obj.value) 188 assert_equal(WIN32OLE::VARIANT::VT_UI8, obj.vartype) 189 end 190 191 obj = WIN32OLE_VARIANT.new(4, WIN32OLE::VARIANT::VT_INT) 192 assert_equal(4, obj.value) 193 assert_equal(WIN32OLE::VARIANT::VT_INT, obj.vartype) 194 195 obj = WIN32OLE_VARIANT.new(5, WIN32OLE::VARIANT::VT_UINT) 196 assert_equal(5, obj.value) 197 assert_equal(WIN32OLE::VARIANT::VT_UINT, obj.vartype) 198 end 199 200 def test_s_new_with_non_nil_byref 201 obj = WIN32OLE_VARIANT.new(2, WIN32OLE::VARIANT::VT_I2|WIN32OLE::VARIANT::VT_BYREF) 202 assert_equal(2, obj.value) 203 assert_equal(WIN32OLE::VARIANT::VT_I2|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 204 205 obj = WIN32OLE_VARIANT.new(3, WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_BYREF) 206 assert_equal(3, obj.value) 207 assert_equal(WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 208 209 obj = WIN32OLE_VARIANT.new(4.5, WIN32OLE::VARIANT::VT_R4|WIN32OLE::VARIANT::VT_BYREF) 210 assert_equal(4.5, obj.value) 211 assert_equal(WIN32OLE::VARIANT::VT_R4|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 212 213 obj = WIN32OLE_VARIANT.new(5.5, WIN32OLE::VARIANT::VT_R8|WIN32OLE::VARIANT::VT_BYREF) 214 assert_equal(5.5, obj.value) 215 assert_equal(WIN32OLE::VARIANT::VT_R8|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 216 217 obj = WIN32OLE_VARIANT.new(600, WIN32OLE::VARIANT::VT_CY|WIN32OLE::VARIANT::VT_BYREF) 218 assert_equal("600", obj.value) 219 assert_equal(WIN32OLE::VARIANT::VT_CY|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 220 221 obj = WIN32OLE_VARIANT.new("2001-06-15 12:17:34", WIN32OLE::VARIANT::VT_DATE|WIN32OLE::VARIANT::VT_BYREF) 222 assert_equal(Time.new(2001,06,15,12,17,34), obj.value) 223 assert_equal(WIN32OLE::VARIANT::VT_DATE|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 224 225 obj = WIN32OLE_VARIANT.new("foo", WIN32OLE::VARIANT::VT_BSTR|WIN32OLE::VARIANT::VT_BYREF) 226 assert_equal("foo", obj.value) 227 assert_equal(WIN32OLE::VARIANT::VT_BSTR|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 228 229 obj = WIN32OLE_VARIANT.new(true, WIN32OLE::VARIANT::VT_BOOL|WIN32OLE::VARIANT::VT_BYREF) 230 assert_equal(true, obj.value) 231 assert_equal(WIN32OLE::VARIANT::VT_BOOL|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 232 233 obj = WIN32OLE_VARIANT.new(2, WIN32OLE::VARIANT::VT_I1|WIN32OLE::VARIANT::VT_BYREF) 234 assert_equal(2, obj.value) 235 assert_equal(WIN32OLE::VARIANT::VT_I1|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 236 237 obj = WIN32OLE_VARIANT.new(3, WIN32OLE::VARIANT::VT_UI1|WIN32OLE::VARIANT::VT_BYREF) 238 assert_equal(3, obj.value) 239 assert_equal(WIN32OLE::VARIANT::VT_UI1|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 240 241 obj = WIN32OLE_VARIANT.new(4, WIN32OLE::VARIANT::VT_UI2|WIN32OLE::VARIANT::VT_BYREF) 242 assert_equal(4, obj.value) 243 assert_equal(WIN32OLE::VARIANT::VT_UI2|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 244 245 obj = WIN32OLE_VARIANT.new(5, WIN32OLE::VARIANT::VT_UI4|WIN32OLE::VARIANT::VT_BYREF) 246 assert_equal(5, obj.value) 247 assert_equal(WIN32OLE::VARIANT::VT_UI4|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 248 249 obj = WIN32OLE_VARIANT.new(4, WIN32OLE::VARIANT::VT_INT|WIN32OLE::VARIANT::VT_BYREF) 250 assert_equal(4, obj.value) 251 assert_equal(WIN32OLE::VARIANT::VT_INT|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 252 253 obj = WIN32OLE_VARIANT.new(5, WIN32OLE::VARIANT::VT_UINT|WIN32OLE::VARIANT::VT_BYREF) 254 assert_equal(5, obj.value) 255 assert_equal(WIN32OLE::VARIANT::VT_UINT|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 256 end 257 258 def test_s_new_with_i8_byref 259 obj = WIN32OLE_VARIANT.new(-123456789012345, WIN32OLE::VARIANT::VT_I8|WIN32OLE::VARIANT::VT_BYREF) 260 assert_equal(-123456789012345, obj.value) 261 assert_equal(WIN32OLE::VARIANT::VT_I8|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 262 end 263 264 def test_s_new_with_ui8_byref 265 obj = WIN32OLE_VARIANT.new(123456789012345, WIN32OLE::VARIANT::VT_UI8|WIN32OLE::VARIANT::VT_BYREF) 266 assert_equal(123456789012345, obj.value) 267 assert_equal(WIN32OLE::VARIANT::VT_UI8|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 268 end 269 270 def test_value 271 obj = WIN32OLE_VARIANT.new('foo') 272 assert_equal('foo', obj.value) 273 end 274 275 def test_s_new_2_argument 276 obj = WIN32OLE_VARIANT.new('foo', WIN32OLE::VARIANT::VT_BSTR|WIN32OLE::VARIANT::VT_BYREF) 277 assert_equal('foo', obj.value); 278 end 279 280 def test_s_new_2_argument2 281 obj = WIN32OLE_VARIANT.new('foo', WIN32OLE::VARIANT::VT_BSTR) 282 assert_equal('foo', obj.value); 283 end 284 285 def test_s_new_dispatch_array 286 vt = WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_DISPATCH 287 obj = WIN32OLE_VARIANT.new(nil, vt) 288 assert_equal(vt, obj.vartype) 289 assert_nil(obj.value) 290 291 vt = WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_DISPATCH|WIN32OLE::VARIANT::VT_BYREF 292 obj = WIN32OLE_VARIANT.new(nil, vt) 293 assert_equal(vt, obj.vartype) 294 assert_nil(obj.value) 295 end 296 297 def test_s_new_array 298 # should not occur stack over flow 299 ar = (1..500000).to_a.map{|i| [i]} 300 ar2 = WIN32OLE_VARIANT.new(ar) 301 assert_equal(ar, ar2.value) 302 end 303 304 def test_s_array 305 obj = WIN32OLE_VARIANT.array([2,3], WIN32OLE::VARIANT::VT_I4) 306 assert_instance_of(WIN32OLE_VARIANT, obj) 307 assert_equal(WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_ARRAY, obj.vartype) 308 assert_equal([[0, 0, 0],[0, 0, 0]], obj.value) 309 310 obj = WIN32OLE_VARIANT.array([2,3], WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_BYREF) 311 assert_equal(WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_BYREF|WIN32OLE::VARIANT::VT_ARRAY, obj.vartype) 312 assert_equal([[0, 0, 0],[0, 0, 0]], obj.value) 313 314 obj = WIN32OLE_VARIANT.array([2,3], WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_ARRAY) 315 assert_instance_of(WIN32OLE_VARIANT, obj) 316 assert_equal(WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_ARRAY, obj.vartype) 317 assert_equal([[0, 0, 0],[0, 0, 0]], obj.value) 318 319 assert_equal(0, obj[0,0]) 320 obj[0,0] = 10 321 assert_equal([[10, 0, 0],[0, 0, 0]], obj.value) 322 obj[0,1] = "13.2" 323 assert_equal([[10, 13, 0],[0, 0, 0]], obj.value) 324 325 obj = WIN32OLE_VARIANT.array([3, 2], WIN32OLE::VARIANT::VT_VARIANT) 326 obj[0,0] = 10 327 obj[0,1] = "string" 328 obj[1,0] = 12.735 329 assert_equal([[10, "string"],[12.735, nil],[nil,nil]], obj.value) 330 331 obj = WIN32OLE_VARIANT.array([2,3], WIN32OLE::VARIANT::VT_DISPATCH) 332 assert_equal([[nil, nil, nil],[nil,nil,nil]], obj.value) 333 334 end 335 336 def test_s_array_exc 337 assert_raise(TypeError) { 338 obj = WIN32OLE_VARIANT.array(2, WIN32OLE::VARIANT::VT_I4) 339 } 340 end 341 342 def test_conversion_num2str 343 obj = WIN32OLE_VARIANT.new(124, WIN32OLE::VARIANT::VT_BSTR) 344 assert_equal("124", obj.value); 345 end 346 347 def test_conversion_float2int 348 obj = WIN32OLE_VARIANT.new(12.345, WIN32OLE::VARIANT::VT_I4) 349 assert_equal(12, obj.value) 350 obj = WIN32OLE_VARIANT.new(12.345, WIN32OLE::VARIANT::VT_I4|WIN32OLE::VARIANT::VT_BYREF) 351 assert_equal(12, obj.value) 352 end 353 354 def test_conversion_str2num 355 obj = WIN32OLE_VARIANT.new("12.345", WIN32OLE::VARIANT::VT_R8) 356 assert_equal(12.345, obj.value) 357 end 358 359 def test_conversion_ole_variant2ole_variant 360 obj = WIN32OLE_VARIANT.new("12.345", WIN32OLE::VARIANT::VT_R4) 361 obj = WIN32OLE_VARIANT.new(obj, WIN32OLE::VARIANT::VT_I4) 362 assert_equal(12, obj.value) 363 end 364 365 def test_conversion_str2date 366 obj = WIN32OLE_VARIANT.new("2004-12-24 12:24:45", WIN32OLE::VARIANT::VT_DATE) 367 assert_equal(Time.new(2004,12,24,12,24,45), obj.value) 368 end 369 370 def test_conversion_time2date 371 dt = Time.mktime(2004, 12, 24, 12, 24, 45) 372 obj = WIN32OLE_VARIANT.new(dt, WIN32OLE::VARIANT::VT_DATE) 373 assert_equal(dt, obj.value) 374 end 375 376 # this test failed because of VariantTimeToSystemTime 377 # and SystemTimeToVariantTime API ignores wMilliseconds 378 # member of SYSTEMTIME struct. 379 # 380 # def test_conversion_time_nsec2date 381 # dt = Time.new(2004, 12,24, 12, 24, 45) 382 # dt += 0.1 383 # obj = WIN32OLE_VARIANT.new(dt, WIN32OLE::VARIANT::VT_DATE) 384 # assert_equal(dt, obj.value) 385 # end 386 387 def test_conversion_str2cy 388 begin 389 WIN32OLE.locale = 0x0411 # set locale Japanese 390 rescue WIN32OLERuntimeError 391 skip("Japanese locale is not installed") 392 end 393 if WIN32OLE.locale == 0x0411 394 obj = WIN32OLE_VARIANT.new("\\10,000", WIN32OLE::VARIANT::VT_CY) 395 assert_equal("10000", obj.value) 396 end 397 end 398 399 def test_create_vt_array 400 obj = WIN32OLE_VARIANT.new([1.2, 2.3], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_R8) 401 assert_equal([1.2, 2.3], obj.value) 402 assert_equal(WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_R8, obj.vartype) 403 404 obj = WIN32OLE_VARIANT.new([1.2, 2.3], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_R8|WIN32OLE::VARIANT::VT_BYREF) 405 assert_equal([1.2, 2.3], obj.value) 406 assert_equal(WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_R8|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 407 end 408 409 def test_create_vt_array2 410 obj = WIN32OLE_VARIANT.new([1.2, "a"], WIN32OLE::VARIANT::VT_ARRAY) 411 assert_equal([1.2, "a"], obj.value) 412 assert_equal(WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_VARIANT, obj.vartype) 413 414 obj = WIN32OLE_VARIANT.new([1.2, "a"]) 415 assert_equal([1.2, "a"], obj.value) 416 assert_equal(WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_VARIANT, obj.vartype) 417 end 418 419 420 def test_create_vt_nested_array 421 obj = WIN32OLE_VARIANT.new([[1.2, "a", "b"], [3.4, "C", "D"]], WIN32OLE::VARIANT::VT_ARRAY) 422 assert_equal([[1.2, "a", "b"], [3.4, "C", "D"]], obj.value) 423 424 obj = WIN32OLE_VARIANT.new([[1.2, "a", "b"], [3.4, "C", "D"]]) 425 assert_equal([[1.2, "a", "b"], [3.4, "C", "D"]], obj.value) 426 427 obj = WIN32OLE_VARIANT.new([[1.2, "a", "b"], [3.4, "C", "D"], [5.6, "E", "F"]]) 428 assert_equal([[1.2, "a", "b"], [3.4, "C", "D"], [5.6, "E", "F"]], obj.value) 429 430 obj = WIN32OLE_VARIANT.new([[[1.2], [3.4]], [[5.6], [7.8]], [[9.1],[9.2]]]) 431 assert_equal([[[1.2], [3.4]], [[5.6], [7.8]], [[9.1],[9.2]]], obj.value) 432 end 433 434 def test_create_vt_array3 435 obj = WIN32OLE_VARIANT.new([]) 436 assert_equal([], obj.value) 437 438 obj = WIN32OLE_VARIANT.new([[]]) 439 assert_equal([[]], obj.value) 440 441 obj = WIN32OLE_VARIANT.new([[],[]]) 442 assert_equal([[],[]], obj.value) 443 444 obj = WIN32OLE_VARIANT.new([], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_BYREF) 445 assert_equal([], obj.value) 446 447 obj = WIN32OLE_VARIANT.new([[]], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_BYREF) 448 assert_equal([[]], obj.value) 449 450 obj = WIN32OLE_VARIANT.new([[],[]], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_BYREF) 451 assert_equal([[],[]], obj.value) 452 end 453 454 def test_create_vt_array_nil 455 vartype = WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_DISPATCH|WIN32OLE::VARIANT::VT_BYREF 456 obj = WIN32OLE_VARIANT.new(nil, vartype) 457 assert_nil(obj.value) 458 assert_equal(vartype, obj.vartype) 459 460 vartype = WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_DISPATCH 461 obj = WIN32OLE_VARIANT.new(nil, vartype) 462 assert_nil(obj.value) 463 assert_equal(vartype, obj.vartype) 464 end 465 466 def test_create_vt_array_str 467 vartype = WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_BSTR 468 obj = WIN32OLE_VARIANT.new(["abc", "123"], vartype) 469 assert_equal(vartype, obj.vartype) 470 assert_equal(["abc", "123"], obj.value) 471 472 vartype = WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_BYREF|WIN32OLE::VARIANT::VT_BSTR 473 obj = WIN32OLE_VARIANT.new(["abc", "123"], vartype) 474 assert_equal(vartype, obj.vartype) 475 assert_equal(["abc", "123"], obj.value) 476 end 477 478 def test_create_vt_array_exc 479 exc = assert_raise(TypeError) { 480 obj = WIN32OLE_VARIANT.new(1, WIN32OLE::VARIANT::VT_ARRAY); 481 } 482 assert_match(/wrong argument type Fixnum \(expected Array\)/, exc.message) 483 end 484 485 def test_create_vt_array_str2ui1array 486 obj = WIN32OLE_VARIANT.new("ABC", WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_UI1) 487 assert_equal("ABC", obj.value) 488 489 obj.value = "DEF" 490 assert_equal("DEF", obj.value) 491 obj[0] = 71 492 assert_equal("GEF", obj.value) 493 494 obj = WIN32OLE_VARIANT.new([65, 0].pack("C*"), WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_UI1) 495 assert_equal([65, 0].pack("C*"), obj.value) 496 497 obj = WIN32OLE_VARIANT.new("abc", WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_UI1|WIN32OLE::VARIANT::VT_BYREF) 498 assert_equal("abc", obj.value) 499 obj.value = "DEF" 500 assert_equal("DEF", obj.value) 501 assert_equal(WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_UI1|WIN32OLE::VARIANT::VT_BYREF, obj.vartype) 502 obj[1] = 71 503 assert_equal("DGF", obj.value) 504 505 end 506 507 def test_create_vt_array_int 508 obj = WIN32OLE_VARIANT.new([65, 0], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_UI1) 509 assert_equal([65, 0].pack("C*"), obj.value) 510 511 obj = WIN32OLE_VARIANT.new([65, 0]) 512 assert_equal([65, 0], obj.value) 513 514 obj = WIN32OLE_VARIANT.new([65, 0], WIN32OLE::VARIANT::VT_I2|WIN32OLE::VARIANT::VT_ARRAY) 515 assert_equal([65, 0], obj.value) 516 517 end 518 519 def test_vt_array_bracket 520 obj = WIN32OLE_VARIANT.new([[1,2,3],[4,5,6]]) 521 assert_equal(1, obj[0,0]) 522 assert_equal(2, obj[0,1]) 523 assert_equal(3, obj[0,2]) 524 assert_equal(4, obj[1,0]) 525 assert_equal(5, obj[1,1]) 526 assert_equal(6, obj[1,2]) 527 528 assert_raise(WIN32OLERuntimeError) { 529 obj[0,4] 530 } 531 assert_raise(WIN32OLERuntimeError) { 532 obj[0,-1] 533 } 534 assert_raise(ArgumentError) { 535 obj[0] 536 } 537 538 obj[0,0] = 7 539 obj[1,2] = 8 540 assert_equal([[7,2,3], [4,5,8]], obj.value) 541 542 assert_raise(WIN32OLERuntimeError) { 543 obj[0,4] = 9 544 } 545 assert_raise(WIN32OLERuntimeError) { 546 obj[0,-1] = 10 547 } 548 assert_raise(ArgumentError) { 549 obj[0] = 11 550 } 551 end 552 553 def test_conversion_vt_date 554 obj = WIN32OLE_VARIANT.new(-657434, WIN32OLE::VARIANT::VT_DATE) 555 assert_equal(Time.new(100,1,1), obj.value) 556 557 obj = WIN32OLE_VARIANT.new("1500/12/29 23:59:59", WIN32OLE::VARIANT::VT_DATE) 558 assert_equal(Time.new(1500,12,29,23,59,59), obj.value) 559 560 obj = WIN32OLE_VARIANT.new("1500/12/30 00:00:00", WIN32OLE::VARIANT::VT_DATE) 561 assert_equal(Time.new(1500,12,30), obj.value) 562 563 obj = WIN32OLE_VARIANT.new("1500/12/30 00:00:01", WIN32OLE::VARIANT::VT_DATE) 564 assert_equal(Time.new(1500,12,30,0,0,1), obj.value) 565 566 obj = WIN32OLE_VARIANT.new("1899/12/29 23:59:59", WIN32OLE::VARIANT::VT_DATE) 567 assert_equal(Time.new(1899,12,29,23,59,59), obj.value) 568 569 obj = WIN32OLE_VARIANT.new("1899/12/30 00:00:00", WIN32OLE::VARIANT::VT_DATE) 570 assert_equal(Time.new(1899,12,30), obj.value) 571 572 obj = WIN32OLE_VARIANT.new("1899/12/30 00:00:01", WIN32OLE::VARIANT::VT_DATE) 573 assert_equal(Time.new(1899,12,30,0,0,1), obj.value) 574 575 obj = WIN32OLE_VARIANT.new(0, WIN32OLE::VARIANT::VT_DATE) 576 assert_equal(Time.new(1899,12,30), obj.value) 577 578 obj = WIN32OLE_VARIANT.new("2008/12/29 23:59:59", WIN32OLE::VARIANT::VT_DATE) 579 assert_equal(Time.new(2008,12,29,23,59,59), obj.value) 580 581 obj = WIN32OLE_VARIANT.new("2008/12/30 00:00:00", WIN32OLE::VARIANT::VT_DATE) 582 assert_equal(Time.new(2008,12,30,0,0,0), obj.value) 583 584 obj = WIN32OLE_VARIANT.new("2008/12/30 00:00:01", WIN32OLE::VARIANT::VT_DATE) 585 assert_equal(Time.new(2008,12,30,0,0,1), obj.value) 586 587 obj = WIN32OLE_VARIANT.new("9999/12/31 23:59:59", WIN32OLE::VARIANT::VT_DATE) 588 assert_equal(Time.new(9999,12,31,23,59,59), obj.value) 589 end 590 591 def test_create_nil_dispatch 592 var = WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_DISPATCH) 593 assert_nil(var.value) 594 end 595 596 def test_create_variant_byref 597 obj = WIN32OLE_VARIANT.new("Str", WIN32OLE::VARIANT::VT_VARIANT|WIN32OLE::VARIANT::VT_BYREF); 598 assert_equal("Str", obj.value); 599 end 600 601 def test_vartype 602 obj = WIN32OLE_VARIANT.new("Str") 603 assert_equal(WIN32OLE::VARIANT::VT_BSTR, obj.vartype) 604 end 605 606 def test_set_value 607 obj = WIN32OLE_VARIANT.new(10) 608 obj.value = 12 609 assert_equal(12, obj.value) 610 assert_equal(WIN32OLE::VARIANT::VT_I4, obj.vartype) 611 obj.value = "14" 612 assert_equal(14, obj.value) 613 assert_equal(WIN32OLE::VARIANT::VT_I4, obj.vartype) 614 obj.value = 11.2 615 assert_equal(11, obj.value) 616 assert_equal(WIN32OLE::VARIANT::VT_I4, obj.vartype) 617 618 obj = WIN32OLE_VARIANT.new([1,2]) 619 assert_raise(WIN32OLERuntimeError) { 620 obj.value = [3,4] 621 } 622 623 obj = WIN32OLE_VARIANT.new("2007/01/01", WIN32OLE::VARIANT::VT_DATE) 624 assert_raise(WIN32OLERuntimeError) { 625 obj.value = "hogehoge" 626 } 627 assert_equal(Time.new(2007,1,1), obj.value) 628 629 obj2 = WIN32OLE_VARIANT.new("2006/01/01", WIN32OLE::VARIANT::VT_DATE) 630 obj.value = obj2 631 assert_equal(Time.new(2006,01,01), obj.value) 632 end 633 634 def test_c_nothing 635 assert_nil(WIN32OLE_VARIANT::Nothing.value) 636 end 637 638 def test_c_empty 639 assert_nil(WIN32OLE_VARIANT::Empty.value) 640 end 641 642 def test_c_null 643 assert_nil(WIN32OLE_VARIANT::Null.value) 644 end 645 646 end 647end 648 649