fzeet 0.6.5 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }