fzeet 0.6.5 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. data/LICENSE_CEF +29 -0
  2. data/checks/Bstr.rb +14 -0
  3. data/checks/Decimal.rb +27 -0
  4. data/checks/OSVERSIONINFOEX.rb +14 -0
  5. data/checks/Point.rb +65 -0
  6. data/checks/Rect.rb +104 -0
  7. data/checks/RunAll.rb +2 -0
  8. data/checks/SafeArray.rb +27 -0
  9. data/checks/Size.rb +45 -0
  10. data/checks/SystemTime.rb +43 -0
  11. data/checks/Variant.rb +160 -0
  12. data/examples/Control/DateTimePicker.rbw +1 -1
  13. data/examples/Control/MonthCalendar.rbw +1 -1
  14. data/examples/Control/{WebBrowser.rbw → WebBrowser/WebBrowser.rbw} +2 -2
  15. data/examples/Control/{WebBrowser1.rbw → WebBrowser/WebBrowser1.rbw} +0 -0
  16. data/examples/Control/WebBrowser/WebBrowser2.rbw +24 -0
  17. data/examples/Control/{WebBrowser3.rbw → WebBrowser/WebBrowser3.rbw} +0 -0
  18. data/examples/Control/{WebBrowser4.rbw → WebBrowser/WebBrowser4.rbw} +8 -3
  19. data/examples/Control/{WebBrowser4Sinatra.rb → WebBrowser/WebBrowser4Sinatra.rb} +0 -0
  20. data/examples/Control/{WebBrowser5.rbw → WebBrowser/WebBrowser5.rbw} +4 -2
  21. data/examples/Control/WebBrowser/jQueryUI.html +53 -0
  22. data/examples/Control/WebBrowser/jQueryUI.rbw +26 -0
  23. data/examples/MDI.rbw +2 -2
  24. data/examples/Raw/UIRibbon/Command.rbw +3 -3
  25. data/examples/Raw/UIRibbon/Minimal.rbw +3 -3
  26. data/examples/Version.rbw +1 -1
  27. data/lib/fzeet.rb +22 -7
  28. data/lib/fzeet/windows.rb +82 -5
  29. data/lib/fzeet/windows/com.rb +1 -318
  30. data/lib/fzeet/windows/com/Common.rb +318 -0
  31. data/lib/fzeet/windows/comctl.rb +1 -1
  32. data/lib/fzeet/windows/comctl/ComboBoxEx.rb +32 -0
  33. data/lib/fzeet/windows/comctl/DateTimePicker.rb +35 -0
  34. data/lib/fzeet/windows/comctl/Header.rb +61 -1
  35. data/lib/fzeet/windows/comctl/ListView.rb +133 -3
  36. data/lib/fzeet/windows/comctl/MonthCalendar.rb +35 -0
  37. data/lib/fzeet/windows/comctl/ProgressBar.rb +37 -0
  38. data/lib/fzeet/windows/comctl/PropertySheet.rb +50 -2
  39. data/lib/fzeet/windows/comctl/SysLink.rb +37 -0
  40. data/lib/fzeet/windows/comctl/Tab.rb +56 -0
  41. data/lib/fzeet/windows/comctl/TreeView.rb +81 -2
  42. data/lib/fzeet/windows/comctl/UpDown.rb +33 -0
  43. data/lib/fzeet/windows/comdlg.rb +1 -0
  44. data/lib/fzeet/windows/comdlg/ColorDialog.rb +41 -0
  45. data/lib/fzeet/windows/comdlg/Common.rb +87 -0
  46. data/lib/fzeet/windows/comdlg/FileDialog.rb +133 -0
  47. data/lib/fzeet/windows/comdlg/FindReplaceDialog.rb +102 -0
  48. data/lib/fzeet/windows/comdlg/FontDialog.rb +36 -0
  49. data/lib/fzeet/windows/comdlg/PrintDialog.rb +72 -0
  50. data/lib/fzeet/{Dialog → windows/comdlg}/ShellFileDialog.rb +0 -0
  51. data/lib/fzeet/windows/core.rb +5 -0
  52. data/lib/fzeet/windows/core/Common.rb +324 -0
  53. data/lib/fzeet/windows/core/Point.rb +42 -0
  54. data/lib/fzeet/windows/core/Rect.rb +114 -0
  55. data/lib/fzeet/windows/core/Size.rb +34 -0
  56. data/lib/fzeet/windows/core/SystemTime.rb +46 -0
  57. data/lib/fzeet/windows/core/Version.rb +57 -0
  58. data/lib/fzeet/windows/gdi.rb +1 -62
  59. data/lib/fzeet/windows/gdi/Common.rb +40 -0
  60. data/lib/fzeet/windows/gdi/Font.rb +64 -0
  61. data/lib/fzeet/windows/kernel.rb +1 -92
  62. data/lib/fzeet/windows/kernel/Common.rb +92 -0
  63. data/lib/fzeet/windows/libc.rb +1 -1
  64. data/lib/fzeet/windows/libcef.rb +1 -0
  65. data/lib/fzeet/windows/mshtml.rb +1 -1135
  66. data/lib/fzeet/windows/mshtml/Common.rb +1135 -0
  67. data/lib/fzeet/windows/ole.rb +1 -561
  68. data/lib/fzeet/windows/ole/Common.rb +112 -0
  69. data/lib/fzeet/windows/ole/PropVariant.rb +141 -0
  70. data/lib/fzeet/windows/oleaut.rb +3 -0
  71. data/lib/fzeet/windows/oleaut/Bstr.rb +39 -0
  72. data/lib/fzeet/windows/oleaut/Common.rb +187 -0
  73. data/lib/fzeet/windows/oleaut/SafeArray.rb +104 -0
  74. data/lib/fzeet/windows/oleaut/Variant.rb +269 -0
  75. data/lib/fzeet/windows/scintilla.rb +115 -1
  76. data/lib/fzeet/windows/{SciLexer.dll → scintilla/SciLexer.dll} +0 -0
  77. data/lib/fzeet/windows/shdocvw.rb +150 -0
  78. data/lib/fzeet/windows/shell.rb +1 -1
  79. data/lib/fzeet/windows/shell/Common.rb +94 -2
  80. data/lib/fzeet/windows/shlwapi.rb +1 -1
  81. data/lib/fzeet/windows/uiribbon.rb +416 -0
  82. data/lib/fzeet/windows/urlmon.rb +2 -2
  83. data/lib/fzeet/windows/user.rb +20 -0
  84. data/lib/fzeet/windows/user/Accelerator.rb +45 -0
  85. data/lib/fzeet/windows/user/Common.rb +3 -2
  86. data/lib/fzeet/windows/user/Control/Button.rb +54 -0
  87. data/lib/fzeet/windows/user/Control/ComboBox.rb +44 -1
  88. data/lib/fzeet/windows/user/Control/Common.rb +88 -1
  89. data/lib/fzeet/windows/user/Control/Edit.rb +50 -0
  90. data/lib/fzeet/windows/user/Control/ListBox.rb +69 -0
  91. data/lib/fzeet/windows/user/Control/Static.rb +31 -0
  92. data/lib/fzeet/windows/user/Menu.rb +130 -0
  93. data/lib/fzeet/windows/user/Message.rb +9 -0
  94. data/lib/fzeet/windows/user/MessageBox.rb +47 -0
  95. data/lib/fzeet/windows/user/SystemParametersInfo.rb +1 -1
  96. data/lib/fzeet/windows/user/Window.rb +5 -463
  97. data/lib/fzeet/{Window → windows/user/Window}/Common.rb +460 -0
  98. data/lib/fzeet/{Window → windows/user/Window}/Container.rb +0 -0
  99. data/lib/fzeet/{Window → windows/user/Window}/Dialog.rb +0 -0
  100. data/lib/fzeet/{Window → windows/user/Window}/MDI.rb +0 -0
  101. data/lib/fzeet/{Window → windows/user/Window}/View.rb +0 -0
  102. data/lib/fzeet/{Window → windows/user/Window}/Window.rb +0 -0
  103. data/lib/fzeet/{Window → windows/user/Window}/WindowMethods.rb +1 -1
  104. metadata +55 -61
  105. data/examples/Control/WebBrowser2.rbw +0 -39
  106. data/lib/fzeet/Accelerator.rb +0 -48
  107. data/lib/fzeet/Application.rb +0 -71
  108. data/lib/fzeet/Common.rb +0 -350
  109. data/lib/fzeet/Control.rb +0 -19
  110. data/lib/fzeet/Control/Button.rb +0 -57
  111. data/lib/fzeet/Control/ComboBox.rb +0 -46
  112. data/lib/fzeet/Control/ComboBoxEx.rb +0 -35
  113. data/lib/fzeet/Control/Common.rb +0 -89
  114. data/lib/fzeet/Control/DateTimePicker.rb +0 -38
  115. data/lib/fzeet/Control/Edit.rb +0 -53
  116. data/lib/fzeet/Control/ExplorerBrowser.rb +0 -66
  117. data/lib/fzeet/Control/Header.rb +0 -63
  118. data/lib/fzeet/Control/ListBox.rb +0 -72
  119. data/lib/fzeet/Control/ListView.rb +0 -133
  120. data/lib/fzeet/Control/MonthCalendar.rb +0 -38
  121. data/lib/fzeet/Control/ProgressBar.rb +0 -40
  122. data/lib/fzeet/Control/PropertySheet.rb +0 -51
  123. data/lib/fzeet/Control/Scintilla.rb +0 -117
  124. data/lib/fzeet/Control/Static.rb +0 -34
  125. data/lib/fzeet/Control/SysLink.rb +0 -40
  126. data/lib/fzeet/Control/Tab.rb +0 -59
  127. data/lib/fzeet/Control/TreeView.rb +0 -82
  128. data/lib/fzeet/Control/UpDown.rb +0 -36
  129. data/lib/fzeet/Control/WebBrowser.rb +0 -153
  130. data/lib/fzeet/Dialog.rb +0 -6
  131. data/lib/fzeet/Dialog/ColorDialog.rb +0 -44
  132. data/lib/fzeet/Dialog/Common.rb +0 -89
  133. data/lib/fzeet/Dialog/FileDialog.rb +0 -136
  134. data/lib/fzeet/Dialog/FindReplaceDialog.rb +0 -105
  135. data/lib/fzeet/Dialog/FontDialog.rb +0 -39
  136. data/lib/fzeet/Dialog/PrintDialog.rb +0 -75
  137. data/lib/fzeet/Menu.rb +0 -133
  138. data/lib/fzeet/UIRibbon.rb +0 -417
  139. data/lib/fzeet/Window.rb +0 -5
  140. data/lib/fzeet/windows/common.rb +0 -244
data/LICENSE_CEF ADDED
@@ -0,0 +1,29 @@
1
+ // Copyright (c) 2008-2010 Marshall A. Greenblatt. Portions Copyright (c)
2
+ // 2006-2010 Google Inc. All rights reserved.
3
+ //
4
+ // Redistribution and use in source and binary forms, with or without
5
+ // modification, are permitted provided that the following conditions are
6
+ // met:
7
+ //
8
+ // * Redistributions of source code must retain the above copyright
9
+ // notice, this list of conditions and the following disclaimer.
10
+ // * Redistributions in binary form must reproduce the above
11
+ // copyright notice, this list of conditions and the following disclaimer
12
+ // in the documentation and/or other materials provided with the
13
+ // distribution.
14
+ // * Neither the name of Google Inc. nor the name Chromium Embedded
15
+ // Framework nor the names of its contributors may be used to endorse
16
+ // or promote products derived from this software without specific prior
17
+ // written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/checks/Bstr.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ Bstr['foo'].tap { |bstr|
6
+ raise unless bstr.length == 3
7
+ raise unless bstr.multibyte == 'foo'
8
+
9
+ bstr.dispose
10
+ }
11
+
12
+ raise unless Bstr.from('foo') { |bstr|
13
+ raise unless bstr.length == 3
14
+ }.nil?
data/checks/Decimal.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ Decimal[42].tap { |decimal|
6
+ raise unless decimal.int == 42
7
+ }
8
+
9
+ Decimal[-42].tap { |decimal|
10
+ raise unless decimal.int == -42
11
+ }
12
+
13
+ Decimal[0x7fff_ffff_ffff_ffff].tap { |decimal|
14
+ raise unless decimal.longlong == 0x7fff_ffff_ffff_ffff
15
+ }
16
+
17
+ Decimal[-0x7fff_ffff_ffff_ffff].tap { |decimal|
18
+ raise unless decimal.longlong == -0x7fff_ffff_ffff_ffff
19
+ }
20
+
21
+ Decimal[1.1].tap { |decimal|
22
+ raise unless decimal.double == 1.1
23
+ }
24
+
25
+ Decimal[-1.1].tap { |decimal|
26
+ raise unless decimal.double == -1.1
27
+ }
@@ -0,0 +1,14 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ Windows::OSVERSIONINFOEX.new.tap { |ovi|
6
+ ovi[:dwMajorVersion] = 5
7
+ ovi[:dwMinorVersion] = 2
8
+
9
+ raise unless ovi.hex == 0x0502
10
+ raise unless ovi >= :xp
11
+ raise unless ovi > 2000
12
+ raise unless ovi < :vista
13
+ raise unless ovi.name == 'Windows XP'
14
+ }
data/checks/Point.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ # Point.[], Point#to_a
6
+ raise unless Point[42, 43].to_a == [42, 43]
7
+
8
+ # Point#wrap, Point#==
9
+ Point[42, 43].tap { |pt|
10
+ Point.wrap(pt.pointer).tap { |pt1|
11
+ raise unless pt.pointer == pt1.pointer # same pointer
12
+ raise if pt.equal?(pt1) # different objects
13
+ raise unless pt == pt1 # same coords
14
+
15
+ pt1[:x] += 2
16
+ }
17
+
18
+ raise unless pt[:x] == 44
19
+ }
20
+
21
+ # Point#dup
22
+ Point[42, 43].tap { |pt|
23
+ pt.dup.tap { |pt1|
24
+ raise if pt.pointer == pt1.pointer # different pointers
25
+ raise if pt.equal?(pt1) # different objects
26
+ raise unless pt == pt1 # same coords
27
+
28
+ pt1[:x] += 2
29
+ }
30
+
31
+ raise unless pt[:x] == 42
32
+ }
33
+
34
+ # Point#get, Point#set, Point#clear
35
+ Point[42, 43].tap { |pt|
36
+ raise unless pt.set(1, 2).get == [1, 2]
37
+ raise unless pt.clear.get == [0, 0]
38
+ }
39
+
40
+ # Point#inside?, Point#outside?
41
+ Rect[100, 200, 300, 400].tap { |r|
42
+ raise unless Point[100, 200].inside?(r)
43
+ raise unless Point[299, 399].inside?(r)
44
+ raise if Point[300, 400].inside?(r) # rigth-bottom corner is excluded
45
+ raise unless Point[300, 400].outside?(r)
46
+ }
47
+
48
+ # Point#offset, Point#offset!
49
+ Point[42, 43].tap { |pt|
50
+ raise if pt.equal?(pt.offset(10, 20))
51
+ raise unless pt.offset!(10, 20).to_a == [52, 63]
52
+ raise unless pt.offset!(-10, -20).to_a == [42, 43]
53
+ }
54
+
55
+ # Point#client, Point#client!, Point#screen, Point#screen!
56
+ Window.new(x: 100, y: 200).tap { |window|
57
+ Point[100, 200].tap { |screen|
58
+ raise if screen.equal?(screen.client(window))
59
+ screen.client!(window).tap { |client|
60
+ raise if client.equal?(client.screen(window))
61
+ raise unless client.to_a.all? { |coord| coord < 0 }
62
+ raise unless client.screen!(window).to_a == [100, 200]
63
+ }
64
+ }
65
+ }
data/checks/Rect.rb ADDED
@@ -0,0 +1,104 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ # Rect.[](left, top, right, bottom), Rect#to_a
6
+ raise unless Rect[100, 200, 300, 400].to_a == [100, 200, 300, 400]
7
+
8
+ # Rect.[](location, size)
9
+ raise unless Rect[Point[100, 200], Size[200, 200]].to_a == [100, 200, 300, 400]
10
+
11
+ # Rect#wrap, Rect#==
12
+ Rect[100, 200, 300, 400].tap { |r|
13
+ Rect.wrap(r.pointer).tap { |r1|
14
+ raise unless r.pointer == r1.pointer # same pointer
15
+ raise if r.equal?(r1) # different objects
16
+ raise unless r == r1 # same coords
17
+
18
+ r1[:left] += 50
19
+ }
20
+
21
+ raise unless r[:left] == 150
22
+ }
23
+
24
+ # Rect#dup
25
+ Rect[100, 200, 300, 400].tap { |r|
26
+ r.dup.tap { |r1|
27
+ raise if r.pointer == r1.pointer # different pointers
28
+ raise if r.equal?(r1) # different objects
29
+ raise unless r == r1 # same coords
30
+
31
+ r1[:left] += 50
32
+ }
33
+
34
+ raise unless r[:left] == 100
35
+ }
36
+
37
+ # Rect#get, Rect#set, Rect#clear, Rect#empty?
38
+ Rect[100, 200, 300, 400].tap { |r|
39
+ raise unless r.set(1, 2, 3, 4).get == [1, 2, 3, 4]
40
+ raise if r.empty?
41
+ raise unless r.clear.get == [0, 0, 0, 0]
42
+ raise unless r.empty?
43
+ }
44
+
45
+ # Rect#lt, Rect#lt=, Rect#lb, Rect#lb=, Rect#rt, Rect#rt=, Rect#rb, Rect#rb=
46
+ # Rect#width, Rect#width=, Rect#height, Rect#height=, Rect#size, Rect#size=
47
+ # Rect#structSize
48
+ Rect[100, 200, 300, 400].tap { |r|
49
+ raise unless r.lt.to_a == [100, 200]
50
+ raise unless r.lb.to_a == [100, 400]
51
+ raise unless r.rt.to_a == [300, 200]
52
+ raise unless r.rb.to_a == [300, 400]
53
+
54
+ raise unless r.location.to_a == [100, 200]
55
+ raise unless r.size.to_a == [200, 200]
56
+
57
+ r.location = Point[1, 2]
58
+ r.size = Size[3, 4]
59
+
60
+ raise unless r.to_a == [1, 2, 4, 6]
61
+
62
+ raise unless r.structSize == 16
63
+ }
64
+
65
+ # Rect#include?, Rect#exclude?
66
+ Rect[100, 200, 300, 400].tap { |r|
67
+ raise unless r.include?(Point[100, 200])
68
+ raise unless r.include?(Point[299, 399])
69
+ raise if r.include?(Point[300, 400]) # rigth-bottom corner is excluded
70
+ raise unless r.exclude?(Point[300, 400])
71
+
72
+ raise unless r.include?(Rect[100, 200, 299, 399])
73
+ raise unless r.include?(Rect[100, 200, 299, 399], Point[299, 399])
74
+ }
75
+
76
+ # Rect#normalized?, Rect#normalize, Point#normalize!
77
+ Rect[300, 400, 100, 200].tap { |r|
78
+ raise if r.equal?(r.normalize)
79
+ raise if r.normalized?
80
+ raise unless r.normalize!.to_a == [100, 200, 300, 400]
81
+ raise unless r.normalized?
82
+ }
83
+
84
+ # Rect#offset, Rect#offset!, Rect#inflate, Rect#inflate!
85
+ Rect[100, 200, 300, 400].tap { |r|
86
+ raise if r.equal?(r.offset(10, 20))
87
+ raise unless r.offset!(10, 20).to_a == [110, 220, 310, 420]
88
+ raise unless r.offset!(-10, -20).to_a == [100, 200, 300, 400]
89
+
90
+ raise if r.equal?(r.inflate(10, 20))
91
+ raise unless r.inflate!(10, 20).to_a == [90, 180, 310, 420]
92
+ raise unless r.inflate!(-10, -20).to_a == [100, 200, 300, 400]
93
+ }
94
+
95
+ # Rect#|, Rect#&, Rect#-
96
+ [Rect[100, 200, 300, 400], Rect[110, 220, 310, 420]].tap { |r1, r2|
97
+ raise unless (r1 | r2).to_a == [100, 200, 310, 420]
98
+
99
+ raise unless (r1 & r2).to_a == [110, 220, 300, 400]
100
+
101
+ raise unless r1 - r2 == r1
102
+ r2[:top] = 200
103
+ raise unless (r1 - r2).to_a == [100, 200, 110, 400]
104
+ }
data/checks/RunAll.rb ADDED
@@ -0,0 +1,2 @@
1
+ Dir["#{File.dirname(path = File.expand_path(__FILE__))}/*.rb"].
2
+ each { |check| next if check == path; require check }
@@ -0,0 +1,27 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ SafeArray.vector(2).tap { |sa|
6
+ raise unless sa[:cDims] == 1
7
+ raise unless sa.length == 2
8
+ raise unless sa.vt == Windows::VT_VARIANT
9
+
10
+ sa[0] = Variant[:int, 42]
11
+ raise unless sa[0].int == 42
12
+
13
+ sa[1] = Variant[:bstr, 'foo']
14
+ raise unless sa[1].bstr == 'foo'
15
+
16
+ sa.dispose
17
+ }
18
+
19
+ raise unless SafeArray.vector(2) { |sa|
20
+ raise unless sa.length == 2
21
+ }.nil?
22
+
23
+ SafeArray.vector(5) { |sa|
24
+ (1..5).each.with_index { |v, i| sa[i] = Variant[:int, v] }
25
+
26
+ raise unless sa.inject(1) { |product, variant| product *= variant.int } == 120
27
+ }
data/checks/Size.rb ADDED
@@ -0,0 +1,45 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ # Size.[], Size#to_a
6
+ raise unless Size[42, 43].to_a == [42, 43]
7
+
8
+ # Size#wrap, Size#==
9
+ Size[42, 43].tap { |s|
10
+ Size.wrap(s.pointer).tap { |s1|
11
+ raise unless s.pointer == s1.pointer # same pointer
12
+ raise if s.equal?(s1) # different objects
13
+ raise unless s == s1 # same lengths
14
+
15
+ s1[:cx] += 2
16
+ }
17
+
18
+ raise unless s[:cx] == 44
19
+ }
20
+
21
+ # Size#dup
22
+ Size[42, 43].tap { |s|
23
+ s.dup.tap { |s1|
24
+ raise if s.pointer == s1.pointer # different pointers
25
+ raise if s.equal?(s1) # different objects
26
+ raise unless s == s1 # same lengths
27
+
28
+ s1[:cx] += 2
29
+ }
30
+
31
+ raise unless s[:cx] == 42
32
+ }
33
+
34
+ # Size#get, Size#set, Size#clear
35
+ Size[42, 43].tap { |s|
36
+ raise unless s.set(1, 2).get == [1, 2]
37
+ raise unless s.clear.get == [0, 0]
38
+ }
39
+
40
+ # Size#inflate, Size#inflate!
41
+ Size[42, 43].tap { |s|
42
+ raise if s.equal?(s.inflate(10, 20))
43
+ raise unless s.inflate!(10, 20).to_a == [52, 63]
44
+ raise unless s.inflate!(-10, -20).to_a == [42, 43]
45
+ }
@@ -0,0 +1,43 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ # SystemTime.[], SystemTime#get
6
+ SystemTime[Time.local(2000, 3, 4, 5, 6, 7, 8.9 * 1000)].tap { |st|
7
+ local = st.get
8
+
9
+ raise unless local.year == 2000
10
+ raise unless local.month == 3
11
+ raise unless local.day == 4
12
+ raise unless local.hour == 5
13
+ raise unless local.min == 6
14
+ raise unless local.sec == 7
15
+ raise unless st[:wMilliseconds] == 9
16
+ raise unless local.usec == 9000
17
+ }
18
+
19
+ # SystemTime#wrap, SystemTime#==
20
+ SystemTime[Time.local(2000, 3, 4)].tap { |st|
21
+ SystemTime.wrap(st.pointer).tap { |st1|
22
+ raise unless st.pointer == st1.pointer # same pointer
23
+ raise if st.equal?(st1) # different objects
24
+ raise unless st == st1 # same time
25
+
26
+ st1[:wYear] += 10
27
+ }
28
+
29
+ raise unless st[:wYear] == 2010
30
+ }
31
+
32
+ # SystemTime#dup
33
+ SystemTime[Time.local(2000, 3, 4)].tap { |st|
34
+ st.dup.tap { |st1|
35
+ raise if st.pointer == st1.pointer # different pointers
36
+ raise if st.equal?(st1) # different objects
37
+ raise unless st == st1 # same time
38
+
39
+ st1[:wYear] += 10
40
+ }
41
+
42
+ raise unless st[:wYear] == 2000
43
+ }
data/checks/Variant.rb ADDED
@@ -0,0 +1,160 @@
1
+ require 'fzeet'
2
+
3
+ include Fzeet
4
+
5
+ Variant[:bool, true].tap { |variant|
6
+ raise unless variant.bool == true
7
+ variant.bool = false
8
+ raise unless variant.bool == false
9
+ }
10
+
11
+ Variant[:bool, false].tap { |variant|
12
+ raise unless variant.bool == false
13
+ variant.bool = true
14
+ raise unless variant.bool == true
15
+ }
16
+
17
+ Variant[:bool, false].tap { |variant|
18
+ variant.clear
19
+
20
+ begin
21
+ variant.bool
22
+ rescue
23
+ else
24
+ raise
25
+ end
26
+ }
27
+
28
+ Variant[:byte, 255].tap { |variant|
29
+ raise unless variant.byte == 255
30
+ }
31
+
32
+ Variant[:char, 255].tap { |variant|
33
+ raise unless variant.char == -1
34
+ }
35
+
36
+ Variant[:qword, 0xdead_beef_feeb_daed].tap { |variant|
37
+ raise unless variant.qword >> 32 == 0xdead_beef
38
+ }
39
+
40
+ Variant[:float, 1.1].tap { |variant|
41
+ #raise unless variant.float == 1.1
42
+ raise unless variant.float - 1.1 < 0.000_000_1
43
+ }
44
+
45
+ Variant[:double, 1.1].tap { |variant|
46
+ raise unless variant.double == 1.1
47
+ }
48
+
49
+ Variant[:string, 'foo'].tap { |variant|
50
+ raise unless variant.string == 'foo'
51
+
52
+ variant.clear
53
+ }
54
+
55
+ Variant[:date, Time.local(2000, 3, 4, 5, 6, 7)].tap { |variant|
56
+ local = variant.date
57
+
58
+ raise unless local.year == 2000
59
+ raise unless local.month == 3
60
+ raise unless local.day == 4
61
+ raise unless local.hour == 5
62
+ raise unless local.min == 6
63
+ raise unless local.sec == 7
64
+ }
65
+
66
+ Variant[:decimal, 42].tap { |variant|
67
+ raise unless variant.decimal == 42
68
+ }
69
+
70
+ Variant[:decimal, -42].tap { |variant|
71
+ raise unless variant.decimal == -42
72
+ }
73
+
74
+ Variant[:decimal, 1.1].tap { |variant|
75
+ raise unless variant.decimal == 1.1
76
+ }
77
+
78
+ Variant[:decimal, -1.1].tap { |variant|
79
+ raise unless variant.decimal == -1.1
80
+ }
81
+
82
+ IFoo = Windows::COM::Interface[Windows::IDispatch,
83
+ Windows::GUID['00000000-0000-0000-0000-000000000042'],
84
+
85
+ value: [[], :int]
86
+ ]
87
+
88
+ Foo = Windows::COM::Callback[IFoo]
89
+
90
+ class Foo
91
+ def value; 42 end
92
+ end
93
+
94
+ Foo.new.tap { |foo|
95
+ raise unless foo.refc == 1
96
+
97
+ Variant[:dispatch, foo].tap { |variant|
98
+ raise unless foo.refc == 2
99
+
100
+ dispatch = variant.dispatch
101
+
102
+ raise unless foo.refc == 3
103
+
104
+ dispatch.QueryInstance(Foo) { |instance|
105
+ raise unless foo.refc == 4
106
+
107
+ raise unless instance.value == 42
108
+ }.Release
109
+
110
+ raise unless foo.refc == 3
111
+
112
+ dispatch.Release
113
+
114
+ raise unless foo.refc == 2
115
+
116
+ variant.clear
117
+
118
+ raise unless foo.refc == 1
119
+ }
120
+
121
+ foo.Release
122
+
123
+ raise unless foo.refc == 0
124
+ }
125
+
126
+ Variant[:array, SafeArray.vector(2)].tap { |variant|
127
+ array = variant.array
128
+
129
+ array.
130
+ put(0, Variant[:int, 42]).
131
+ put(1, Variant[:array, SafeArray.vector(2).
132
+ put(0, Variant[:int, 43]).
133
+ put(1, Variant[:bstr, 'foo'])
134
+ ])
135
+
136
+ raise unless array[0].int == 42
137
+ raise unless array[1].array[0].int == 43
138
+ raise unless array[1].array[1].bstr == 'foo'
139
+
140
+ variant.clear
141
+ }
142
+
143
+ FFI::MemoryPointer.new(:int) { |pint|
144
+ pint.write_int(0xc0ffee)
145
+
146
+ Variant[:byref, pint].tap { |variant|
147
+ raise unless variant.byref.address == pint.address
148
+ raise unless variant.byref(:int) == 0xc0ffee
149
+ }
150
+ }
151
+
152
+ Decimal[1.1].tap { |decimal|
153
+ Variant[:byref, decimal].tap { |variant|
154
+ raise unless Decimal.new(variant.byref).double == 1.1
155
+ }
156
+ }
157
+
158
+ Variant[:object, [1, 2, 3, 4, 5]].tap { |variant|
159
+ raise unless variant.object.inject(:+) == 15
160
+ }