win 0.3.16 → 0.3.17
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +4 -0
- data/VERSION +1 -1
- data/lib/win/gui/input.rb +1 -1
- data/lib/win/gui/message.rb +5 -23
- data/lib/win/library.rb +18 -22
- data/lib/win/system/info.rb +4 -4
- data/spec/win/gui/input_spec.rb +14 -1
- data/spec/win/gui/message_spec.rb +39 -18
- data/spec/win/gui/window_spec.rb +40 -30
- data/spec/win/library_spec.rb +27 -2
- metadata +3 -3
data/HISTORY
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.17
|
data/lib/win/gui/input.rb
CHANGED
@@ -193,7 +193,7 @@ module Win
|
|
193
193
|
# A positive value indicates that the wheel was rotated forward, away from the user; a negative value
|
194
194
|
# indicates that the wheel was rotated backward, toward the user. One wheel click is defined as
|
195
195
|
# WHEEL_DELTA, which is 120.
|
196
|
-
# - If dwFlags contains
|
196
|
+
# - If dwFlags contains MOUSEEVENTF_WHEEL, then data specifies the amount of
|
197
197
|
# wheel movement. A positive value indicates that the wheel was rotated to the right; a negative value
|
198
198
|
# indicates that the wheel was rotated to the left. One wheel click is defined as WHEEL_DELTA (= 120).
|
199
199
|
# - Windows 2000/XP: If flags contains MOUSEEVENTF_XDOWN or MOUSEEVENTF_XUP, then data specifies which
|
data/lib/win/gui/message.rb
CHANGED
@@ -421,6 +421,7 @@ module Win
|
|
421
421
|
# {|handle, msg, data, l_result| callback code }
|
422
422
|
#
|
423
423
|
function :SendMessageCallback, [:HWND, :uint, :uint, :pointer, :SendAsyncProc, :ulong], :int8, boolean: true,
|
424
|
+
alternative: [[:HWND, :uint, :uint, :long, :SendAsyncProc, :ulong], :int8, ->(*args){Integer === args[3]}],
|
424
425
|
&->(api, handle, msg, w_param, l_param, data=0, &block){
|
425
426
|
api.call(handle, msg, w_param, l_param, block, data)}
|
426
427
|
|
@@ -462,28 +463,8 @@ module Win
|
|
462
463
|
#:call-seq:
|
463
464
|
# success = post_message(handle, msg, w_param, l_param)
|
464
465
|
#
|
465
|
-
function :PostMessage, [:ulong, :uint, :uint, :pointer], :int,
|
466
|
-
|
467
|
-
function :PostMessage, [:ulong, :uint, :uint, :long], :int,
|
468
|
-
boolean: true, camel_name: :PostMessageLong, snake_name: :post_message_long
|
469
|
-
|
470
|
-
def PostMessage(handle, msg, w_param, l_param)
|
471
|
-
# Routes call depending on lParam type (:pointer or :long)
|
472
|
-
case l_param
|
473
|
-
when Fixnum
|
474
|
-
PostMessageLong(handle, msg, w_param, l_param)
|
475
|
-
else
|
476
|
-
PostMessagePointer(handle, msg, w_param, l_param)
|
477
|
-
end
|
478
|
-
end
|
479
|
-
|
480
|
-
def post_message(handle, msg, w_param, l_param, &block)
|
481
|
-
if block
|
482
|
-
block[PostMessage(handle, msg, w_param, l_param)]
|
483
|
-
else
|
484
|
-
PostMessage(handle, msg, w_param, l_param) != 0
|
485
|
-
end
|
486
|
-
end
|
466
|
+
function :PostMessage, [:ulong, :uint, :uint, :pointer], :int, boolean: true,
|
467
|
+
alternative: [[:ulong, :uint, :uint, :long], :int, ->(*args){Integer === args.last}]
|
487
468
|
|
488
469
|
##
|
489
470
|
# The SendMessage function sends the specified message to a window or windows. It calls the window procedure for
|
@@ -526,7 +507,8 @@ module Win
|
|
526
507
|
#:call-seq:
|
527
508
|
# send_message(handle, msg, w_param, l_param)
|
528
509
|
#
|
529
|
-
function :SendMessage, [:ulong, :uint, :uint, :pointer], :int
|
510
|
+
function :SendMessage, [:ulong, :uint, :uint, :pointer], :int,
|
511
|
+
alternative: [[:ulong, :uint, :uint, :long], :int, ->(*args){Integer === args.last}]
|
530
512
|
|
531
513
|
##
|
532
514
|
# :method: :SendMessageLong?
|
data/lib/win/library.rb
CHANGED
@@ -311,16 +311,20 @@ module Win
|
|
311
311
|
ffi_lib *(ffi_libraries.map(&:name) << options[:dll]) if options[:dll]
|
312
312
|
libs = ffi_libraries.map(&:name)
|
313
313
|
|
314
|
-
|
314
|
+
alternative = options.delete(:alternative) # Function may have alternative signature
|
315
|
+
effective_name = if alternative
|
315
316
|
|
316
|
-
alt_params, alt_returns, condition = generate_signature(*
|
317
|
+
alt_params, alt_returns, condition = generate_signature(*alternative)
|
317
318
|
api = function name, params, returns,
|
318
|
-
options.
|
319
|
+
options.merge( camel_only: true, camel_name: "#{camel_name}Original")
|
319
320
|
alt_api = function name, alt_params, alt_returns,
|
320
|
-
options.
|
321
|
+
options.merge( camel_only: true, camel_name: "#{camel_name}Alternative")
|
322
|
+
|
321
323
|
define_method camel_name do |*args|
|
322
324
|
(condition[*args] ? alt_api : api).call(*args)
|
323
325
|
end
|
326
|
+
module_function camel_name
|
327
|
+
public camel_name
|
324
328
|
api.effective_name
|
325
329
|
else
|
326
330
|
effective_names.inject(nil) do |func, effective_name|
|
@@ -349,21 +353,10 @@ module Win
|
|
349
353
|
# Generate body for snake_case method
|
350
354
|
method_body = generate_snake_method_body(api, options, &def_block)
|
351
355
|
|
352
|
-
# Define snake_case instance method
|
356
|
+
# Define snake_case as both instance and module-level method
|
353
357
|
define_method snake_name, &method_body
|
354
|
-
|
355
|
-
|
356
|
-
# module_function snake_name # TODO: Doesn't work as a perfect replacement for eigen_class stuff. :( Why?
|
357
|
-
|
358
|
-
# OK, instead of module_method we're going to directly modify eigenclass
|
359
|
-
eigen_class = class << self;
|
360
|
-
self;
|
361
|
-
end
|
362
|
-
|
363
|
-
# Define snake_case class method inside eigenclass, that should do it
|
364
|
-
eigen_class.class_eval do
|
365
|
-
define_method snake_name, &method_body
|
366
|
-
end
|
358
|
+
module_function snake_name
|
359
|
+
public snake_name
|
367
360
|
|
368
361
|
# Define (instance method!) aliases, if any
|
369
362
|
aliases.each {|ali| alias_method ali, snake_name }
|
@@ -466,7 +459,8 @@ module Win
|
|
466
459
|
# Win::Library::API is a wrapper for callable function API object that mimics Win32::API
|
467
460
|
class API
|
468
461
|
|
469
|
-
# The name of the DLL(s) that export this API function
|
462
|
+
# The name of the DLL(s) that export this API function.
|
463
|
+
# dll_name alias needed for compatibility with Win32::API interface
|
470
464
|
attr_reader :dll
|
471
465
|
alias_method :dll_name, :dll
|
472
466
|
|
@@ -478,7 +472,9 @@ module Win
|
|
478
472
|
|
479
473
|
# The name of the actual Windows API function. For example, if you passed 'GetUserName' to the
|
480
474
|
# constructor, then the effective function name would be either 'GetUserNameA' or 'GetUserNameW'.
|
481
|
-
|
475
|
+
# effective_function_name alias needed for compatibility with Win32::API interface
|
476
|
+
attr_accessor :effective_name
|
477
|
+
alias_method :effective_function_name, :effective_name
|
482
478
|
|
483
479
|
# The prototype, returned as an array of FFI types
|
484
480
|
attr_reader :prototype
|
@@ -486,10 +482,10 @@ module Win
|
|
486
482
|
# The return type (:void for no return value)
|
487
483
|
attr_reader :return_type
|
488
484
|
|
489
|
-
def initialize( namespace, function_name,
|
485
|
+
def initialize( namespace, function_name, effective_name, prototype, return_type, dll )
|
490
486
|
@namespace = namespace
|
491
487
|
@function_name = function_name.to_sym
|
492
|
-
@
|
488
|
+
@effective_name = effective_name.to_sym
|
493
489
|
@prototype = prototype
|
494
490
|
@return_type = return_type
|
495
491
|
@dll = dll
|
data/lib/win/system/info.rb
CHANGED
@@ -3,13 +3,13 @@ require 'win/library'
|
|
3
3
|
module Win
|
4
4
|
module System
|
5
5
|
|
6
|
-
# Contains constants and Win32 API functions related to
|
7
|
-
#
|
8
|
-
# http://msdn.microsoft.com/en-us/library/
|
6
|
+
# Contains constants and Win32 API functions related to system information functions.
|
7
|
+
# More functions of this type can be found here:
|
8
|
+
# http://msdn.microsoft.com/en-us/library/ms724953%28v=VS.85%29.aspx
|
9
9
|
module Info
|
10
10
|
extend Win::Library
|
11
11
|
|
12
|
-
# Enum COMPUTER_NAME_FORMAT (for GetComputerNameEx)
|
12
|
+
# Enum COMPUTER_NAME_FORMAT (for GetComputerNameEx). TODO: convert into FFI::Enum
|
13
13
|
|
14
14
|
ComputerNameNetBIOS = 0
|
15
15
|
ComputerNameDnsHostname = 1
|
data/spec/win/gui/input_spec.rb
CHANGED
@@ -39,7 +39,20 @@ module WinGuiInputTest
|
|
39
39
|
|
40
40
|
describe '#mouse_event' do
|
41
41
|
spec { use {mouse_event( flags = MOUSEEVENTF_ABSOLUTE, dx = 0, dy = 0, data=0, extra_info=0 )}}
|
42
|
-
|
42
|
+
|
43
|
+
it 'emulates mouse clicks' do
|
44
|
+
test_app do |app|
|
45
|
+
# Position cursor at app's "Close Window" control
|
46
|
+
left, top, right, bottom = get_window_rect(app.handle)
|
47
|
+
set_cursor_pos(x=right-5, y=top+5).should be_true
|
48
|
+
|
49
|
+
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
|
50
|
+
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
|
51
|
+
sleep SLEEP_DELAY
|
52
|
+
window?(app.handle).should == false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
43
56
|
end # describe '#mouse_event'
|
44
57
|
|
45
58
|
describe "#get_cursor_pos" do
|
@@ -15,7 +15,7 @@ module WinGuiMessageTest
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def msg
|
18
|
-
@msg ||=Win::Gui::Message::Msg.new
|
18
|
+
@msg ||= Win::Gui::Message::Msg.new
|
19
19
|
end
|
20
20
|
|
21
21
|
def msg_callback
|
@@ -83,21 +83,32 @@ module WinGuiMessageTest
|
|
83
83
|
end # describe '#post_message'
|
84
84
|
|
85
85
|
describe '#send_message' do
|
86
|
+
after(:all){close_test_app if @launched_test_app}
|
87
|
+
|
86
88
|
spec{ use{ success = SendMessage(handle = 0, msg = 0, w_param = 0, l_param = nil) }}
|
87
89
|
spec{ use{ success = send_message(handle = 0, msg = 0, w_param = 0, l_param = nil) }}
|
88
90
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
91
|
+
context 'sends a message to the specified window' do
|
92
|
+
it 'with nil as last argument(lParam)' do
|
93
|
+
app = launch_test_app
|
94
|
+
send_message(app.handle, WM_SYSCOMMAND, SC_CLOSE, nil)
|
95
|
+
sleep SLEEP_DELAY
|
96
|
+
window?(app.handle).should == false
|
97
|
+
end
|
94
98
|
|
95
|
-
|
96
|
-
|
99
|
+
it 'with pointer as last argument(lParam)' do
|
100
|
+
app = launch_test_app
|
101
|
+
send_message(app.handle, WM_SYSCOMMAND, SC_CLOSE, FFI::MemoryPointer.new(:long))
|
102
|
+
sleep SLEEP_DELAY
|
103
|
+
window?(app.handle).should == false
|
104
|
+
end
|
97
105
|
|
98
|
-
|
99
|
-
|
100
|
-
|
106
|
+
it 'with Fixnum as last argument(lParam)' do
|
107
|
+
app = launch_test_app
|
108
|
+
send_message(app.handle, WM_SYSCOMMAND, SC_CLOSE, 0)
|
109
|
+
sleep SLEEP_DELAY
|
110
|
+
window?(app.handle).should == false
|
111
|
+
end
|
101
112
|
end
|
102
113
|
end # describe '#send_message'
|
103
114
|
|
@@ -111,13 +122,13 @@ module WinGuiMessageTest
|
|
111
122
|
it "sends message to window and returns, specifying callback to be called by system after message is processed" do
|
112
123
|
sent = SendMessageCallback(@app.handle, WM_USER, 0, nil, msg_callback, data=13)
|
113
124
|
sent.should == 1
|
114
|
-
@handle.should == nil
|
125
|
+
@handle.should == nil # Callback did not fire just yet
|
115
126
|
@message.should == nil
|
116
127
|
@data.should == nil
|
117
128
|
@result.should == nil
|
118
129
|
|
119
|
-
sleep SLEEP_DELAY #
|
120
|
-
peek_message
|
130
|
+
sleep SLEEP_DELAY # Small delay to allow message delivery
|
131
|
+
peek_message # Dispatching sent message (even though there is nothing in queue)
|
121
132
|
|
122
133
|
@handle.should == @app.handle
|
123
134
|
@message.should == WM_USER
|
@@ -126,16 +137,26 @@ module WinGuiMessageTest
|
|
126
137
|
end
|
127
138
|
|
128
139
|
it "snake_case api defaults data to 0, converts block into callback and returns true/false" do
|
129
|
-
sent = send_message_callback(@app.handle, WM_USER, 0, nil){|*args
|
140
|
+
sent = send_message_callback(@app.handle, WM_USER, 0, nil){|*args| @data=args[2]}
|
130
141
|
sent.should == true
|
131
|
-
@data.should == nil
|
142
|
+
@data.should == nil # Callback did not fire just yet
|
132
143
|
|
133
|
-
sleep SLEEP_DELAY #
|
134
|
-
peek_message
|
144
|
+
sleep SLEEP_DELAY # Small delay to allow message delivery
|
145
|
+
peek_message # Dispatching sent message (even though there is nothing in queue)
|
135
146
|
|
136
147
|
@data.should == 0
|
137
148
|
end
|
138
149
|
|
150
|
+
it "can be used with :pointer as a 4th arg" do
|
151
|
+
sent = send_message_callback(@app.handle, WM_USER, 0, FFI::MemoryPointer.new(:long)){|*args|}
|
152
|
+
sent.should == true
|
153
|
+
end
|
154
|
+
|
155
|
+
it "can be used with :long as a 4th arg" do
|
156
|
+
sent = send_message_callback(@app.handle, WM_USER, 0, 0){|*args|}
|
157
|
+
sent.should == true
|
158
|
+
end
|
159
|
+
|
139
160
|
it "fails if unable to send message" do
|
140
161
|
sent = SendMessageCallback(not_a_handle, WM_USER, 0, nil, msg_callback, 0)
|
141
162
|
sent.should == 0
|
data/spec/win/gui/window_spec.rb
CHANGED
@@ -468,25 +468,50 @@ module WinGuiWindowTest
|
|
468
468
|
end
|
469
469
|
end # context GA_PARENT
|
470
470
|
|
471
|
-
|
471
|
+
context 'GA_ROOT - Retrieves the root window by walking the chain of parent windows' do
|
472
|
+
it "retrieves a handle to the specified window's root (top level parent)" do
|
473
|
+
child = find_window_ex(@app.handle, 0, nil, nil)
|
474
|
+
root1 = GetAncestor(child, GA_ROOT)
|
475
|
+
root2 = get_ancestor(child, GA_ROOT)
|
476
|
+
root1.should == root2
|
477
|
+
root1.should == @app.handle
|
478
|
+
end
|
479
|
+
end
|
472
480
|
# GA_ROOTOWNER - Retrieves the owned root window by walking the chain of parent and owner windows
|
473
481
|
# returned by GetParent.
|
474
|
-
it "original api retrieves the handle to the ancestor of the specified window. " do
|
475
|
-
pending
|
476
|
-
success = GetAncestor(hwnd=0, ga_flags=0)
|
477
|
-
end
|
478
|
-
|
479
|
-
it "snake_case api retrieves the handle to the ancestor of the specified window. " do
|
480
|
-
pending
|
481
|
-
success = get_ancestor(hwnd=0, ga_flags=0)
|
482
|
-
end
|
483
|
-
|
484
482
|
end # describe get_ancestor
|
485
483
|
|
486
484
|
describe "#get_window" do
|
487
485
|
spec{ use{ handle = GetWindow(any_handle, command=0) }}
|
488
486
|
spec{ use{ handle = get_window(any_handle, command=0) }}
|
489
487
|
|
488
|
+
# GW_ENABLEDPOPUP - Windows 2000/XP: The retrieved handle identifies the enabled popup window owned by
|
489
|
+
|
490
|
+
context 'GW_HWND... works with windows of the same type' do
|
491
|
+
before(:all) do
|
492
|
+
@statusbar = find_window_ex(@app.handle, 0, STATUSBAR_CLASS, nil)
|
493
|
+
@textarea = find_window_ex(@app.handle, 0, TEXTAREA_CLASS, nil)
|
494
|
+
end
|
495
|
+
|
496
|
+
it 'GW_HWNDFIRST - The retrieved handle identifies the window of the same type that is highest in Z order' do
|
497
|
+
get_window(@statusbar, GW_HWNDFIRST).should == @statusbar
|
498
|
+
end
|
499
|
+
it 'GW_HWNDLAST - The retrieved handle identifies the window of the same type that is lowest in the Z order' do
|
500
|
+
get_window(@statusbar, GW_HWNDLAST).should == @textarea
|
501
|
+
end
|
502
|
+
it 'GW_HWNDNEXT - The retrieved handle identifies the window below the specified window in the Z order' do
|
503
|
+
get_window(@statusbar, GW_HWNDNEXT).should == @textarea
|
504
|
+
end
|
505
|
+
it 'GW_HWNDPREV - The retrieved handle identifies the window above the specified window in the Z order' do
|
506
|
+
get_window(@textarea, GW_HWNDPREV).should == @statusbar
|
507
|
+
end
|
508
|
+
|
509
|
+
it 'returns nil/0 in case nothing is returned' do
|
510
|
+
get_window(@textarea, GW_HWNDNEXT).should == nil
|
511
|
+
GetWindow(@textarea, GW_HWNDNEXT).should == 0
|
512
|
+
end
|
513
|
+
end # context 'GW_HWND...
|
514
|
+
|
490
515
|
context "GW_CHILD retrieves a window handle to a first (top of the Z order) child of given window" do
|
491
516
|
before(:all) do
|
492
517
|
# GW_CHILD - The retrieved handle identifies the child window at the top of the Z order, if the specified
|
@@ -510,11 +535,12 @@ module WinGuiWindowTest
|
|
510
535
|
end # context GW_CHILD
|
511
536
|
|
512
537
|
context "GW_OWNER - retrieves a handle to an owner of a given Window" do
|
513
|
-
#
|
538
|
+
# Ownership is a relationship between two top level windows while Parent is a relationship between a top
|
539
|
+
# level and a WS_CHILD, or a WS_CHILD and another WS_CHILD. The parent of a button is the form it is on,
|
540
|
+
# while a message box is owned by the form that showed it.
|
514
541
|
|
515
542
|
it 'returns owner (but NOT parent!) of a given window' do
|
516
|
-
pending
|
517
|
-
|
543
|
+
pending 'Need to open modal dialog, app should be it`s owner'
|
518
544
|
child = find_window_ex(@app.handle, 0, nil, nil)
|
519
545
|
p owner1 = GetWindow(child, GW_OWNER)
|
520
546
|
p owner2 = get_window(child, GW_OWNER)
|
@@ -526,27 +552,12 @@ module WinGuiWindowTest
|
|
526
552
|
GetWindow(@app.handle, GW_OWNER).should == 0
|
527
553
|
get_window(@app.handle, GW_OWNER).should == nil
|
528
554
|
end
|
529
|
-
|
530
|
-
end
|
531
|
-
|
532
|
-
it "GW_OWNER - retrieves a handle to a window that has the specified relationship to given Window" do
|
533
|
-
pending
|
534
|
-
# GW_ENABLEDPOPUP - Windows 2000/XP: The retrieved handle identifies the enabled popup window owned by
|
535
|
-
# GW_HWNDFIRST - The retrieved handle identifies the window of the same type that is highest in Z order.
|
536
|
-
# GW_HWNDLAST - The retrieved handle identifies the window of the same type that is lowest in the Z order.
|
537
|
-
# GW_HWNDNEXT - The retrieved handle identifies the window below the specified window in the Z order.
|
538
|
-
# GW_HWNDPREV - The retrieved handle identifies the window above the specified window in the Z order.
|
539
|
-
# GW_OWNER - The retrieved handle identifies the specified window's owner window, if any. For more
|
540
555
|
end
|
541
556
|
end # describe get_window
|
542
557
|
|
543
558
|
describe '#enum_windows' do
|
544
|
-
# before(:each){@app = launch_test_app}
|
545
|
-
# after(:each){close_test_app}
|
546
559
|
|
547
560
|
spec{ use{ handles = enum_windows(value = 13) }}
|
548
|
-
spec{ use{ enum_windows do |handle, message|
|
549
|
-
end }}
|
550
561
|
|
551
562
|
it 'iterates through all the top-level windows, passing each top level window handle and value to a given block' do
|
552
563
|
enum_windows(13) do |handle, message|
|
@@ -558,7 +569,6 @@ module WinGuiWindowTest
|
|
558
569
|
|
559
570
|
it 'returns an array of top-level window handles if block is not given' do
|
560
571
|
enum = enum_windows(13)
|
561
|
-
# p enum
|
562
572
|
enum.should be_a_kind_of Array
|
563
573
|
enum.should_not be_empty
|
564
574
|
enum.should have_at_least(5).elements # typical number of top windows in WinXP system?
|
data/spec/win/library_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
require 'win/library'
|
3
|
+
require 'win/gui/message'
|
3
4
|
|
4
5
|
module WinLibraryTest
|
5
6
|
|
@@ -43,7 +44,7 @@ module WinLibraryTest
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def redefined_methods
|
46
|
-
[:FindWindow, :IsWindow, :EnumWindows, :GetUserName, :GetForegroundWindow, :keybd_event]
|
47
|
+
[:FindWindow, :IsWindow, :EnumWindows, :GetUserName, :GetForegroundWindow, :keybd_event, :SendMessage]
|
47
48
|
end
|
48
49
|
|
49
50
|
def hide_method(*names) # hide original method(s) if it is defined
|
@@ -296,6 +297,30 @@ module WinLibraryTest
|
|
296
297
|
end
|
297
298
|
end
|
298
299
|
|
300
|
+
context 'defining API function with alternative signature' do
|
301
|
+
before(:each) do
|
302
|
+
@def_block = nil
|
303
|
+
MyLib.function :SendMessage, [:ulong, :uint, :uint, :pointer], :int,
|
304
|
+
alternative: [[:ulong, :uint, :uint, :long], :int, ->(*args){Integer === args.last}]
|
305
|
+
end
|
306
|
+
|
307
|
+
it 'defines camel and snake methods (as well as hidden Original/Alternative methods)' do
|
308
|
+
expect { send_message(any_handle, Win::Gui::Message::WM_GETTEXT, buffer.size, buffer) }.to_not raise_error
|
309
|
+
expect { send_message(any_handle, Win::Gui::Message::WM_GETTEXT, buffer.size, buffer.address) }.to_not raise_error
|
310
|
+
end
|
311
|
+
|
312
|
+
it 'defines camel and snake methods that work with both signatures' do
|
313
|
+
respond_to?(:SendMessage).should be_true
|
314
|
+
respond_to?(:send_message).should be_true
|
315
|
+
respond_to?(:SendMessageOriginal).should be_true
|
316
|
+
respond_to?(:SendMessageAlternative).should be_true
|
317
|
+
MyLib.respond_to?(:SendMessage).should be_true
|
318
|
+
MyLib.respond_to?(:send_message).should be_true
|
319
|
+
MyLib.respond_to?(:SendMessageOriginal).should be_true
|
320
|
+
MyLib.respond_to?(:SendMessageAlternative).should be_true
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
299
324
|
context 'trying to define an invalid API function' do
|
300
325
|
it 'raises error when trying to define function with a wrong function name' do
|
301
326
|
expect { MyLib.function 'FindWindowImpossible', 'PP', 'L' }.
|
@@ -330,7 +355,7 @@ module WinLibraryTest
|
|
330
355
|
end
|
331
356
|
end
|
332
357
|
|
333
|
-
context 'defining API function that has snake_case name' do
|
358
|
+
context 'defining API function that has original snake_case name' do
|
334
359
|
it 'should define original function in (generated) CamelCase' do
|
335
360
|
MyLib.function :keybd_event, [:char, :char, :ulong, :ulong], :void
|
336
361
|
expect {KeybdEvent(Win::Gui::Input::VK_CONTROL, 0, Win::Gui::Input::KEYEVENTF_KEYDOWN, 0)}.to_not raise_error
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 17
|
9
|
+
version: 0.3.17
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- arvicco
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-13 00:00:00 +04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|