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.
- 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
|
+
}
|