fzeet 0.6.5 → 0.6.6
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE_CEF +29 -0
- data/checks/Bstr.rb +14 -0
- data/checks/Decimal.rb +27 -0
- data/checks/OSVERSIONINFOEX.rb +14 -0
- data/checks/Point.rb +65 -0
- data/checks/Rect.rb +104 -0
- data/checks/RunAll.rb +2 -0
- data/checks/SafeArray.rb +27 -0
- data/checks/Size.rb +45 -0
- data/checks/SystemTime.rb +43 -0
- data/checks/Variant.rb +160 -0
- data/examples/Control/DateTimePicker.rbw +1 -1
- data/examples/Control/MonthCalendar.rbw +1 -1
- data/examples/Control/{WebBrowser.rbw → WebBrowser/WebBrowser.rbw} +2 -2
- data/examples/Control/{WebBrowser1.rbw → WebBrowser/WebBrowser1.rbw} +0 -0
- data/examples/Control/WebBrowser/WebBrowser2.rbw +24 -0
- data/examples/Control/{WebBrowser3.rbw → WebBrowser/WebBrowser3.rbw} +0 -0
- data/examples/Control/{WebBrowser4.rbw → WebBrowser/WebBrowser4.rbw} +8 -3
- data/examples/Control/{WebBrowser4Sinatra.rb → WebBrowser/WebBrowser4Sinatra.rb} +0 -0
- data/examples/Control/{WebBrowser5.rbw → WebBrowser/WebBrowser5.rbw} +4 -2
- data/examples/Control/WebBrowser/jQueryUI.html +53 -0
- data/examples/Control/WebBrowser/jQueryUI.rbw +26 -0
- data/examples/MDI.rbw +2 -2
- data/examples/Raw/UIRibbon/Command.rbw +3 -3
- data/examples/Raw/UIRibbon/Minimal.rbw +3 -3
- data/examples/Version.rbw +1 -1
- data/lib/fzeet.rb +22 -7
- data/lib/fzeet/windows.rb +82 -5
- data/lib/fzeet/windows/com.rb +1 -318
- data/lib/fzeet/windows/com/Common.rb +318 -0
- data/lib/fzeet/windows/comctl.rb +1 -1
- data/lib/fzeet/windows/comctl/ComboBoxEx.rb +32 -0
- data/lib/fzeet/windows/comctl/DateTimePicker.rb +35 -0
- data/lib/fzeet/windows/comctl/Header.rb +61 -1
- data/lib/fzeet/windows/comctl/ListView.rb +133 -3
- data/lib/fzeet/windows/comctl/MonthCalendar.rb +35 -0
- data/lib/fzeet/windows/comctl/ProgressBar.rb +37 -0
- data/lib/fzeet/windows/comctl/PropertySheet.rb +50 -2
- data/lib/fzeet/windows/comctl/SysLink.rb +37 -0
- data/lib/fzeet/windows/comctl/Tab.rb +56 -0
- data/lib/fzeet/windows/comctl/TreeView.rb +81 -2
- data/lib/fzeet/windows/comctl/UpDown.rb +33 -0
- data/lib/fzeet/windows/comdlg.rb +1 -0
- data/lib/fzeet/windows/comdlg/ColorDialog.rb +41 -0
- data/lib/fzeet/windows/comdlg/Common.rb +87 -0
- data/lib/fzeet/windows/comdlg/FileDialog.rb +133 -0
- data/lib/fzeet/windows/comdlg/FindReplaceDialog.rb +102 -0
- data/lib/fzeet/windows/comdlg/FontDialog.rb +36 -0
- data/lib/fzeet/windows/comdlg/PrintDialog.rb +72 -0
- data/lib/fzeet/{Dialog → windows/comdlg}/ShellFileDialog.rb +0 -0
- data/lib/fzeet/windows/core.rb +5 -0
- data/lib/fzeet/windows/core/Common.rb +324 -0
- data/lib/fzeet/windows/core/Point.rb +42 -0
- data/lib/fzeet/windows/core/Rect.rb +114 -0
- data/lib/fzeet/windows/core/Size.rb +34 -0
- data/lib/fzeet/windows/core/SystemTime.rb +46 -0
- data/lib/fzeet/windows/core/Version.rb +57 -0
- data/lib/fzeet/windows/gdi.rb +1 -62
- data/lib/fzeet/windows/gdi/Common.rb +40 -0
- data/lib/fzeet/windows/gdi/Font.rb +64 -0
- data/lib/fzeet/windows/kernel.rb +1 -92
- data/lib/fzeet/windows/kernel/Common.rb +92 -0
- data/lib/fzeet/windows/libc.rb +1 -1
- data/lib/fzeet/windows/libcef.rb +1 -0
- data/lib/fzeet/windows/mshtml.rb +1 -1135
- data/lib/fzeet/windows/mshtml/Common.rb +1135 -0
- data/lib/fzeet/windows/ole.rb +1 -561
- data/lib/fzeet/windows/ole/Common.rb +112 -0
- data/lib/fzeet/windows/ole/PropVariant.rb +141 -0
- data/lib/fzeet/windows/oleaut.rb +3 -0
- data/lib/fzeet/windows/oleaut/Bstr.rb +39 -0
- data/lib/fzeet/windows/oleaut/Common.rb +187 -0
- data/lib/fzeet/windows/oleaut/SafeArray.rb +104 -0
- data/lib/fzeet/windows/oleaut/Variant.rb +269 -0
- data/lib/fzeet/windows/scintilla.rb +115 -1
- data/lib/fzeet/windows/{SciLexer.dll → scintilla/SciLexer.dll} +0 -0
- data/lib/fzeet/windows/shdocvw.rb +150 -0
- data/lib/fzeet/windows/shell.rb +1 -1
- data/lib/fzeet/windows/shell/Common.rb +94 -2
- data/lib/fzeet/windows/shlwapi.rb +1 -1
- data/lib/fzeet/windows/uiribbon.rb +416 -0
- data/lib/fzeet/windows/urlmon.rb +2 -2
- data/lib/fzeet/windows/user.rb +20 -0
- data/lib/fzeet/windows/user/Accelerator.rb +45 -0
- data/lib/fzeet/windows/user/Common.rb +3 -2
- data/lib/fzeet/windows/user/Control/Button.rb +54 -0
- data/lib/fzeet/windows/user/Control/ComboBox.rb +44 -1
- data/lib/fzeet/windows/user/Control/Common.rb +88 -1
- data/lib/fzeet/windows/user/Control/Edit.rb +50 -0
- data/lib/fzeet/windows/user/Control/ListBox.rb +69 -0
- data/lib/fzeet/windows/user/Control/Static.rb +31 -0
- data/lib/fzeet/windows/user/Menu.rb +130 -0
- data/lib/fzeet/windows/user/Message.rb +9 -0
- data/lib/fzeet/windows/user/MessageBox.rb +47 -0
- data/lib/fzeet/windows/user/SystemParametersInfo.rb +1 -1
- data/lib/fzeet/windows/user/Window.rb +5 -463
- data/lib/fzeet/{Window → windows/user/Window}/Common.rb +460 -0
- data/lib/fzeet/{Window → windows/user/Window}/Container.rb +0 -0
- data/lib/fzeet/{Window → windows/user/Window}/Dialog.rb +0 -0
- data/lib/fzeet/{Window → windows/user/Window}/MDI.rb +0 -0
- data/lib/fzeet/{Window → windows/user/Window}/View.rb +0 -0
- data/lib/fzeet/{Window → windows/user/Window}/Window.rb +0 -0
- data/lib/fzeet/{Window → windows/user/Window}/WindowMethods.rb +1 -1
- metadata +55 -61
- data/examples/Control/WebBrowser2.rbw +0 -39
- data/lib/fzeet/Accelerator.rb +0 -48
- data/lib/fzeet/Application.rb +0 -71
- data/lib/fzeet/Common.rb +0 -350
- data/lib/fzeet/Control.rb +0 -19
- data/lib/fzeet/Control/Button.rb +0 -57
- data/lib/fzeet/Control/ComboBox.rb +0 -46
- data/lib/fzeet/Control/ComboBoxEx.rb +0 -35
- data/lib/fzeet/Control/Common.rb +0 -89
- data/lib/fzeet/Control/DateTimePicker.rb +0 -38
- data/lib/fzeet/Control/Edit.rb +0 -53
- data/lib/fzeet/Control/ExplorerBrowser.rb +0 -66
- data/lib/fzeet/Control/Header.rb +0 -63
- data/lib/fzeet/Control/ListBox.rb +0 -72
- data/lib/fzeet/Control/ListView.rb +0 -133
- data/lib/fzeet/Control/MonthCalendar.rb +0 -38
- data/lib/fzeet/Control/ProgressBar.rb +0 -40
- data/lib/fzeet/Control/PropertySheet.rb +0 -51
- data/lib/fzeet/Control/Scintilla.rb +0 -117
- data/lib/fzeet/Control/Static.rb +0 -34
- data/lib/fzeet/Control/SysLink.rb +0 -40
- data/lib/fzeet/Control/Tab.rb +0 -59
- data/lib/fzeet/Control/TreeView.rb +0 -82
- data/lib/fzeet/Control/UpDown.rb +0 -36
- data/lib/fzeet/Control/WebBrowser.rb +0 -153
- data/lib/fzeet/Dialog.rb +0 -6
- data/lib/fzeet/Dialog/ColorDialog.rb +0 -44
- data/lib/fzeet/Dialog/Common.rb +0 -89
- data/lib/fzeet/Dialog/FileDialog.rb +0 -136
- data/lib/fzeet/Dialog/FindReplaceDialog.rb +0 -105
- data/lib/fzeet/Dialog/FontDialog.rb +0 -39
- data/lib/fzeet/Dialog/PrintDialog.rb +0 -75
- data/lib/fzeet/Menu.rb +0 -133
- data/lib/fzeet/UIRibbon.rb +0 -417
- data/lib/fzeet/Window.rb +0 -5
- 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
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
data/checks/SafeArray.rb
ADDED
@@ -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
|
+
}
|