PageRenderTime 53ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/projects/jruby-1.7.3/test/externals/ruby1.9/win32ole/test_win32ole_variant.rb

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