win32-clipboard 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,14 @@
1
- module Windows
2
- module Constants
3
- GHND = 0x0042
4
- WM_DESTROY = 0x0002
5
- WM_CLOSE = 0x0010
6
- WM_DRAWCLIPBOARD = 0x0308
7
- WM_CHANGECBCHAIN = 0x030D
8
- GWL_USERDATA = -21
9
- GWL_WNDPROC = -4
10
- CF_TEXT = 1
11
- BI_RGB = 0
12
- BI_BITFIELDS = 3
13
- end
14
- end
1
+ module Windows
2
+ module Constants
3
+ GHND = 0x0042
4
+ WM_DESTROY = 0x0002
5
+ WM_CLOSE = 0x0010
6
+ WM_DRAWCLIPBOARD = 0x0308
7
+ WM_CHANGECBCHAIN = 0x030D
8
+ GWL_USERDATA = -21
9
+ GWL_WNDPROC = -4
10
+ CF_TEXT = 1
11
+ BI_RGB = 0
12
+ BI_BITFIELDS = 3
13
+ end
14
+ end
@@ -1,66 +1,66 @@
1
- require 'ffi'
2
-
3
- module Windows
4
- module Functions
5
- extend FFI::Library
6
-
7
- typedef :uintptr_t, :hglobal
8
- typedef :uintptr_t, :hwnd
9
- typedef :uintptr_t, :handle
10
- typedef :uintptr_t, :hmenu
11
- typedef :uintptr_t, :hdrop
12
- typedef :uintptr_t, :hinstance
13
- typedef :ulong, :dword
14
-
15
- callback :wnd_proc, [:hwnd, :uint, :long, :long], :long
16
-
17
- ffi_lib :kernel32
18
-
19
- attach_function :GlobalAlloc, [:uint, :size_t], :hglobal
20
- attach_function :GlobalFree, [:hglobal], :hglobal
21
- attach_function :GlobalLock, [:hglobal], :pointer
22
- attach_function :GlobalSize, [:hglobal], :size_t
23
- attach_function :GlobalUnlock, [:hglobal], :bool
24
-
25
- ffi_lib :user32
26
-
27
- attach_function :ChangeClipboardChain, [:hwnd, :hwnd], :bool
28
- attach_function :CloseClipboard, [], :bool
29
- attach_function :CountClipboardFormats, [], :int
30
- attach_function :CreateWindowEx, :CreateWindowExA, [:dword, :string, :string, :dword, :int, :int, :int, :int, :hwnd, :hmenu, :hinstance, :pointer], :hwnd
31
- attach_function :DefWindowProc, :DefWindowProcA, [:hwnd, :uint, :uint, :uint], :long
32
- attach_function :DispatchMessage, :DispatchMessageA, [:pointer], :uint
33
- attach_function :EmptyClipboard, [], :bool
34
- attach_function :EnumClipboardFormats, [:uint], :uint
35
- attach_function :GetClipboardData, [:uint], :handle
36
- attach_function :GetClipboardFormatName, :GetClipboardFormatNameA, [:uint, :pointer, :int], :int
37
- attach_function :IsClipboardFormatAvailable, [:uint], :bool
38
- attach_function :OpenClipboard, [:hwnd], :bool
39
- attach_function :PeekMessage, :PeekMessageA, [:pointer, :hwnd, :uint, :uint, :uint], :bool
40
- attach_function :PostMessage, :PostMessageA, [:hwnd, :uint, :uintptr_t, :uintptr_t], :bool
41
- attach_function :PostQuitMessage, :PostQuitMessage, [:uint], :void
42
- attach_function :RegisterClipboardFormat, :RegisterClipboardFormatA, [:string], :uint
43
- attach_function :SetClipboardData, [:uint, :handle], :handle
44
- attach_function :SetClipboardViewer, [:hwnd], :hwnd
45
- attach_function :SendMessage, :SendMessageA, [:hwnd, :uint, :uintptr_t, :uintptr_t], :bool
46
- attach_function :TranslateMessage, [:pointer], :bool
47
-
48
- # Use Long on 32-bit Ruby, LongPtr on 64-bit Ruby
49
- begin
50
- attach_function :GetWindowLongPtr, :GetWindowLongPtrA, [:hwnd, :int], :long
51
- attach_function :SetWindowLongPtr, :SetWindowLongPtrA, [:hwnd, :int, :uintptr_t], :long
52
- rescue FFI::NotFoundError
53
- attach_function :GetWindowLongPtr, :GetWindowLongA, [:hwnd, :int], :long
54
- attach_function :SetWindowLongPtr, :SetWindowLongA, [:hwnd, :int, :uintptr_t], :long
55
- end
56
-
57
- ffi_lib :shell32
58
-
59
- attach_function :DragQueryFileA, [:hdrop, :uint, :pointer, :uint], :uint
60
-
61
- ffi_lib :gdi32
62
-
63
- attach_function :GetEnhMetaFileBits, [:handle, :uint, :pointer], :uint
64
- end
65
- end
66
-
1
+ require 'ffi'
2
+
3
+ module Windows
4
+ module Functions
5
+ extend FFI::Library
6
+
7
+ typedef :uintptr_t, :hglobal
8
+ typedef :uintptr_t, :hwnd
9
+ typedef :uintptr_t, :handle
10
+ typedef :uintptr_t, :hmenu
11
+ typedef :uintptr_t, :hdrop
12
+ typedef :uintptr_t, :hinstance
13
+ typedef :ulong, :dword
14
+
15
+ callback :wnd_proc, [:hwnd, :uint, :long, :long], :long
16
+
17
+ ffi_lib :kernel32
18
+
19
+ attach_function :GlobalAlloc, [:uint, :size_t], :hglobal
20
+ attach_function :GlobalFree, [:hglobal], :hglobal
21
+ attach_function :GlobalLock, [:hglobal], :pointer
22
+ attach_function :GlobalSize, [:hglobal], :size_t
23
+ attach_function :GlobalUnlock, [:hglobal], :bool
24
+
25
+ ffi_lib :user32
26
+
27
+ attach_function :ChangeClipboardChain, [:hwnd, :hwnd], :bool
28
+ attach_function :CloseClipboard, [], :bool
29
+ attach_function :CountClipboardFormats, [], :int
30
+ attach_function :CreateWindowEx, :CreateWindowExA, [:dword, :string, :string, :dword, :int, :int, :int, :int, :hwnd, :hmenu, :hinstance, :pointer], :hwnd
31
+ attach_function :DefWindowProc, :DefWindowProcA, [:hwnd, :uint, :uint, :uint], :long
32
+ attach_function :DispatchMessage, :DispatchMessageA, [:pointer], :uint
33
+ attach_function :EmptyClipboard, [], :bool
34
+ attach_function :EnumClipboardFormats, [:uint], :uint
35
+ attach_function :GetClipboardData, [:uint], :handle
36
+ attach_function :GetClipboardFormatName, :GetClipboardFormatNameA, [:uint, :pointer, :int], :int
37
+ attach_function :IsClipboardFormatAvailable, [:uint], :bool
38
+ attach_function :OpenClipboard, [:hwnd], :bool
39
+ attach_function :PeekMessage, :PeekMessageA, [:pointer, :hwnd, :uint, :uint, :uint], :bool
40
+ attach_function :PostMessage, :PostMessageA, [:hwnd, :uint, :uintptr_t, :uintptr_t], :bool
41
+ attach_function :PostQuitMessage, :PostQuitMessage, [:uint], :void
42
+ attach_function :RegisterClipboardFormat, :RegisterClipboardFormatA, [:string], :uint
43
+ attach_function :SetClipboardData, [:uint, :handle], :handle
44
+ attach_function :SetClipboardViewer, [:hwnd], :hwnd
45
+ attach_function :SendMessage, :SendMessageA, [:hwnd, :uint, :uintptr_t, :uintptr_t], :bool
46
+ attach_function :TranslateMessage, [:pointer], :bool
47
+
48
+ # Use Long on 32-bit Ruby, LongPtr on 64-bit Ruby
49
+ begin
50
+ attach_function :GetWindowLongPtr, :GetWindowLongPtrA, [:hwnd, :int], :long
51
+ attach_function :SetWindowLongPtr, :SetWindowLongPtrA, [:hwnd, :int, :uintptr_t], :long
52
+ rescue FFI::NotFoundError
53
+ attach_function :GetWindowLongPtr, :GetWindowLongA, [:hwnd, :int], :long
54
+ attach_function :SetWindowLongPtr, :SetWindowLongA, [:hwnd, :int, :uintptr_t], :long
55
+ end
56
+
57
+ ffi_lib :shell32
58
+
59
+ attach_function :DragQueryFileA, [:hdrop, :uint, :pointer, :uint], :uint
60
+
61
+ ffi_lib :gdi32
62
+
63
+ attach_function :GetEnhMetaFileBits, [:handle, :uint, :pointer], :uint
64
+ end
65
+ end
66
+
@@ -1,43 +1,43 @@
1
- require 'ffi'
2
-
3
- module Windows
4
- module Structs
5
- extend FFI::Library
6
-
7
- typedef :uchar, :byte
8
- typedef :ulong, :dword
9
- typedef :ushort, :word
10
-
11
- class RGBQUAD < FFI::Struct
12
- layout(
13
- :rgbBlue, :byte,
14
- :rgbGreen, :byte,
15
- :rgbRed, :byte,
16
- :rgbReserved, :byte,
17
- )
18
- end
19
-
20
- class BITMAPINFOHEADER < FFI::Struct
21
- layout(
22
- :biSize, :dword,
23
- :biWidth, :long,
24
- :biHeight, :long,
25
- :biPlanes, :word,
26
- :biBitCount, :word,
27
- :biCompression, :dword,
28
- :biSizeImage, :dword,
29
- :biXPelsPerMeter, :long,
30
- :biYPelsPerMeter, :long,
31
- :biClrUsed, :dword,
32
- :biClrImportant, :dword
33
- )
34
- end
35
-
36
- class BITMAPINFO < FFI::Struct
37
- layout(
38
- :bmiHeader, BITMAPINFOHEADER,
39
- :bmiColor, [RGBQUAD, 1]
40
- )
41
- end
42
- end
43
- end
1
+ require 'ffi'
2
+
3
+ module Windows
4
+ module Structs
5
+ extend FFI::Library
6
+
7
+ typedef :uchar, :byte
8
+ typedef :ulong, :dword
9
+ typedef :ushort, :word
10
+
11
+ class RGBQUAD < FFI::Struct
12
+ layout(
13
+ :rgbBlue, :byte,
14
+ :rgbGreen, :byte,
15
+ :rgbRed, :byte,
16
+ :rgbReserved, :byte,
17
+ )
18
+ end
19
+
20
+ class BITMAPINFOHEADER < FFI::Struct
21
+ layout(
22
+ :biSize, :dword,
23
+ :biWidth, :long,
24
+ :biHeight, :long,
25
+ :biPlanes, :word,
26
+ :biBitCount, :word,
27
+ :biCompression, :dword,
28
+ :biSizeImage, :dword,
29
+ :biXPelsPerMeter, :long,
30
+ :biYPelsPerMeter, :long,
31
+ :biClrUsed, :dword,
32
+ :biClrImportant, :dword
33
+ )
34
+ end
35
+
36
+ class BITMAPINFO < FFI::Struct
37
+ layout(
38
+ :bmiHeader, BITMAPINFOHEADER,
39
+ :bmiColor, [RGBQUAD, 1]
40
+ )
41
+ end
42
+ end
43
+ end
@@ -1,18 +1,18 @@
1
- require 'timeout'
2
- require 'tmpdir'
3
-
4
- def lock(&block)
5
- Timeout::timeout(5) do
6
- open(File.join(Dir.tmpdir, 'ruby-win32-clipboard.lock'), 'w') do |f|
7
- begin
8
- f.flock(File::LOCK_EX)
9
- yield
10
- ensure
11
- f.flock(File::LOCK_UN)
12
- end
13
- end
14
- end
15
- rescue Timeout::Error
16
- raise 'Lock(timeout)'
17
- end
18
-
1
+ require 'timeout'
2
+ require 'tmpdir'
3
+
4
+ def lock(&block)
5
+ Timeout::timeout(5) do
6
+ open(File.join(Dir.tmpdir, 'ruby-win32-clipboard.lock'), 'w') do |f|
7
+ begin
8
+ f.flock(File::LOCK_EX)
9
+ yield
10
+ ensure
11
+ f.flock(File::LOCK_UN)
12
+ end
13
+ end
14
+ end
15
+ rescue Timeout::Error
16
+ raise 'Lock(timeout)'
17
+ end
18
+
@@ -1,27 +1,27 @@
1
- require 'win32/clipboard'
2
- require File.join(File.dirname(__FILE__), 'lock')
3
-
4
- include Win32
5
-
6
- timeout = ARGV[1].to_i
7
-
8
- def write
9
- data = ''
10
- lock do
11
- data = Clipboard.data
12
- end
13
-
14
- begin
15
- STDOUT.puts data
16
- STDOUT.flush
17
- rescue => e
18
- puts $!
19
- end
20
- if data == ARGV[0]
21
- exit
22
- end
23
- end
24
-
25
- Timeout::timeout(timeout) do
26
- Clipboard.notify_change {write}
27
- end
1
+ require 'win32/clipboard'
2
+ require File.join(File.dirname(__FILE__), 'lock')
3
+
4
+ include Win32
5
+
6
+ timeout = ARGV[1].to_i
7
+
8
+ def write
9
+ data = ''
10
+ lock do
11
+ data = Clipboard.data
12
+ end
13
+
14
+ begin
15
+ STDOUT.puts data
16
+ STDOUT.flush
17
+ rescue => e
18
+ puts $!
19
+ end
20
+ if data == ARGV[0]
21
+ exit
22
+ end
23
+ end
24
+
25
+ Timeout::timeout(timeout) do
26
+ Clipboard.notify_change {write}
27
+ end
@@ -1,176 +1,176 @@
1
- # encoding: utf-8
2
- ###########################################################################
3
- # test_clipboard.rb
4
- #
5
- # Test suite for the win32-clipboard library. This will copy and remove
6
- # data from your clipboard. If your current clipboard data is crucial to
7
- # you, please save it first.
8
- #
9
- # You should run this test case via the 'rake test' task.
10
- ###########################################################################
11
- require 'test-unit'
12
- require 'win32/clipboard'
13
- require 'timeout'
14
- include Win32
15
-
16
- class TC_Win32_ClipBoard < Test::Unit::TestCase
17
- test "version is set to expected value" do
18
- assert_equal('0.6.3', Clipboard::VERSION)
19
- end
20
-
21
- test "data method basic functionality" do
22
- assert_respond_to(Clipboard, :data)
23
- assert_nothing_raised{ Clipboard.data }
24
- assert_kind_of(String, Clipboard.data)
25
- end
26
-
27
- test "data method requires proper format" do
28
- assert_raise(TypeError){ Clipboard.data('test') }
29
- assert_raise(NameError){ Clipboard.data(CF_FOO) }
30
- end
31
-
32
- test "get_data is an alias for data" do
33
- assert_respond_to(Clipboard, :get_data)
34
- assert_alias_method(Clipboard, :data, :get_data)
35
- end
36
-
37
- test "set_data basic functionality" do
38
- assert_respond_to(Clipboard, :set_data)
39
- assert_nothing_raised{ Clipboard.set_data('foo') }
40
- end
41
-
42
- test "set_data works with unicode text" do
43
- assert_nothing_raised{
44
- Clipboard.set_data('Ηελλας', Clipboard::UNICODETEXT)
45
- }
46
- end
47
-
48
- test "set_data requires at least one argument" do
49
- assert_raise(ArgumentError){ Clipboard.set_data }
50
- end
51
-
52
- test "set_data requires a valid data format" do
53
- assert_raise(NameError){ Clipboard.set_data('foo', CF_FOO) }
54
- end
55
-
56
- test "set and get ascii data as expected" do
57
- assert_nothing_raised{ Clipboard.set_data('foobar') }
58
- assert_equal('foobar', Clipboard.data)
59
- end
60
-
61
- test "set and get unicode data as expected" do
62
- assert_nothing_raised{
63
- Clipboard.set_data('Ηελλας', Clipboard::UNICODETEXT)
64
- }
65
- assert_equal('Ηελλας', Clipboard.data(Clipboard::UNICODETEXT))
66
- end
67
-
68
- test "empty method basic functionality" do
69
- assert_respond_to(Clipboard, :empty)
70
- assert_nothing_raised{ Clipboard.empty }
71
- end
72
-
73
- test "clear is an alias for empty" do
74
- assert_respond_to(Clipboard, :clear)
75
- assert_alias_method(Clipboard, :clear, :empty)
76
- end
77
-
78
- test "num_formats basic functionality" do
79
- assert_respond_to(Clipboard, :num_formats)
80
- assert_nothing_raised{ Clipboard.num_formats }
81
- assert_kind_of(Fixnum, Clipboard.num_formats)
82
- end
83
-
84
- test "num_formats returns an expected value" do
85
- assert_true(Clipboard.num_formats >= 0)
86
- assert_true(Clipboard.num_formats < 1000)
87
- end
88
-
89
- test "num_formats does not accept any arguments" do
90
- assert_raise(ArgumentError){ Clipboard.num_formats(true) }
91
- end
92
-
93
- test "register_format basic functionality" do
94
- assert_respond_to(Clipboard, :register_format)
95
- assert_nothing_raised{ Clipboard.register_format('Ruby') }
96
- assert_kind_of(Integer, Clipboard.register_format('Ruby'))
97
- end
98
-
99
- test "register_format requires a string argument" do
100
- assert_raises(TypeError){ Clipboard.register_format(1) }
101
- end
102
-
103
- test "formats method basic functionality" do
104
- assert_respond_to(Clipboard, :formats)
105
- assert_nothing_raised{ Clipboard.formats }
106
- assert_kind_of(Hash, Clipboard.formats)
107
- end
108
-
109
- # TODO: Why do these fail?
110
- #test "formats result contains expected values" do
111
- # assert_true(Clipboard.formats.size > 0)
112
- # assert_true(Clipboard.formats.include?(1))
113
- #end
114
-
115
- test "formats method does not accept any arguments" do
116
- assert_raise(ArgumentError){ Clipboard.formats(true) }
117
- end
118
-
119
- test "format_available basic functionality" do
120
- assert_respond_to(Clipboard, :format_available?)
121
- assert_nothing_raised{ Clipboard.format_available?(1) }
122
- end
123
-
124
- test "format_available returns a boolean value" do
125
- assert_boolean(Clipboard.format_available?(1))
126
- end
127
-
128
- test "format_name basic functionality" do
129
- assert_respond_to(Clipboard, :format_name)
130
- assert_nothing_raised{ Clipboard.format_name(1) }
131
- end
132
-
133
- test "format_name returns expected value" do
134
- format = Clipboard.register_format('HTML Format')
135
- assert_equal('HTML Format', Clipboard.format_name(format))
136
- assert_nil(Clipboard.format_name(9999999))
137
- end
138
-
139
- test "format_name requires a numeric argument" do
140
- assert_raise(TypeError){ Clipboard.format_name('foo') }
141
- end
142
-
143
- test "notify_change basic functionality" do
144
- assert_respond_to(Clipboard, :notify_change)
145
- def wait(&block)
146
- Timeout::timeout(5) do
147
- while @count == 0
148
- yield if block
149
- sleep(0.1)
150
- end
151
- end
152
- end
153
-
154
- @count = 0
155
- t = Thread.start do
156
- Clipboard.notify_change {@count += 1}
157
- end
158
- wait {Clipboard.set_data('ready')}
159
- @count = 0
160
-
161
- Clipboard.set_data('foo')
162
- wait
163
- assert_equal(@count, 1)
164
- t.kill
165
- end
166
-
167
- test "expected constants are defined" do
168
- assert_not_nil(Clipboard::TEXT)
169
- assert_not_nil(Clipboard::OEMTEXT)
170
- assert_not_nil(Clipboard::UNICODETEXT)
171
- assert_not_nil(Clipboard::BITMAP)
172
- assert_not_nil(Clipboard::DIB)
173
- assert_not_nil(Clipboard::HDROP)
174
- assert_not_nil(Clipboard::ENHMETAFILE)
175
- end
176
- end
1
+ # encoding: utf-8
2
+ ###########################################################################
3
+ # test_clipboard.rb
4
+ #
5
+ # Test suite for the win32-clipboard library. This will copy and remove
6
+ # data from your clipboard. If your current clipboard data is crucial to
7
+ # you, please save it first.
8
+ #
9
+ # You should run this test case via the 'rake test' task.
10
+ ###########################################################################
11
+ require 'test-unit'
12
+ require 'win32/clipboard'
13
+ require 'timeout'
14
+ include Win32
15
+
16
+ class TC_Win32_ClipBoard < Test::Unit::TestCase
17
+ test "version is set to expected value" do
18
+ assert_equal('0.6.4', Clipboard::VERSION)
19
+ end
20
+
21
+ test "data method basic functionality" do
22
+ assert_respond_to(Clipboard, :data)
23
+ assert_nothing_raised{ Clipboard.data }
24
+ assert_kind_of(String, Clipboard.data)
25
+ end
26
+
27
+ test "data method requires proper format" do
28
+ assert_raise(TypeError){ Clipboard.data('test') }
29
+ assert_raise(NameError){ Clipboard.data(CF_FOO) }
30
+ end
31
+
32
+ test "get_data is an alias for data" do
33
+ assert_respond_to(Clipboard, :get_data)
34
+ assert_alias_method(Clipboard, :data, :get_data)
35
+ end
36
+
37
+ test "set_data basic functionality" do
38
+ assert_respond_to(Clipboard, :set_data)
39
+ assert_nothing_raised{ Clipboard.set_data('foo') }
40
+ end
41
+
42
+ test "set_data works with unicode text" do
43
+ assert_nothing_raised{
44
+ Clipboard.set_data('Ηελλας', Clipboard::UNICODETEXT)
45
+ }
46
+ end
47
+
48
+ test "set_data requires at least one argument" do
49
+ assert_raise(ArgumentError){ Clipboard.set_data }
50
+ end
51
+
52
+ test "set_data requires a valid data format" do
53
+ assert_raise(NameError){ Clipboard.set_data('foo', CF_FOO) }
54
+ end
55
+
56
+ test "set and get ascii data as expected" do
57
+ assert_nothing_raised{ Clipboard.set_data('foobar') }
58
+ assert_equal('foobar', Clipboard.data)
59
+ end
60
+
61
+ test "set and get unicode data as expected" do
62
+ assert_nothing_raised{
63
+ Clipboard.set_data('Ηελλας', Clipboard::UNICODETEXT)
64
+ }
65
+ assert_equal('Ηελλας', Clipboard.data(Clipboard::UNICODETEXT))
66
+ end
67
+
68
+ test "empty method basic functionality" do
69
+ assert_respond_to(Clipboard, :empty)
70
+ assert_nothing_raised{ Clipboard.empty }
71
+ end
72
+
73
+ test "clear is an alias for empty" do
74
+ assert_respond_to(Clipboard, :clear)
75
+ assert_alias_method(Clipboard, :clear, :empty)
76
+ end
77
+
78
+ test "num_formats basic functionality" do
79
+ assert_respond_to(Clipboard, :num_formats)
80
+ assert_nothing_raised{ Clipboard.num_formats }
81
+ assert_kind_of(Fixnum, Clipboard.num_formats)
82
+ end
83
+
84
+ test "num_formats returns an expected value" do
85
+ assert_true(Clipboard.num_formats >= 0)
86
+ assert_true(Clipboard.num_formats < 1000)
87
+ end
88
+
89
+ test "num_formats does not accept any arguments" do
90
+ assert_raise(ArgumentError){ Clipboard.num_formats(true) }
91
+ end
92
+
93
+ test "register_format basic functionality" do
94
+ assert_respond_to(Clipboard, :register_format)
95
+ assert_nothing_raised{ Clipboard.register_format('Ruby') }
96
+ assert_kind_of(Integer, Clipboard.register_format('Ruby'))
97
+ end
98
+
99
+ test "register_format requires a string argument" do
100
+ assert_raises(TypeError){ Clipboard.register_format(1) }
101
+ end
102
+
103
+ test "formats method basic functionality" do
104
+ assert_respond_to(Clipboard, :formats)
105
+ assert_nothing_raised{ Clipboard.formats }
106
+ assert_kind_of(Hash, Clipboard.formats)
107
+ end
108
+
109
+ # TODO: Why do these fail?
110
+ #test "formats result contains expected values" do
111
+ # assert_true(Clipboard.formats.size > 0)
112
+ # assert_true(Clipboard.formats.include?(1))
113
+ #end
114
+
115
+ test "formats method does not accept any arguments" do
116
+ assert_raise(ArgumentError){ Clipboard.formats(true) }
117
+ end
118
+
119
+ test "format_available basic functionality" do
120
+ assert_respond_to(Clipboard, :format_available?)
121
+ assert_nothing_raised{ Clipboard.format_available?(1) }
122
+ end
123
+
124
+ test "format_available returns a boolean value" do
125
+ assert_boolean(Clipboard.format_available?(1))
126
+ end
127
+
128
+ test "format_name basic functionality" do
129
+ assert_respond_to(Clipboard, :format_name)
130
+ assert_nothing_raised{ Clipboard.format_name(1) }
131
+ end
132
+
133
+ test "format_name returns expected value" do
134
+ format = Clipboard.register_format('HTML Format')
135
+ assert_equal('HTML Format', Clipboard.format_name(format))
136
+ assert_nil(Clipboard.format_name(9999999))
137
+ end
138
+
139
+ test "format_name requires a numeric argument" do
140
+ assert_raise(TypeError){ Clipboard.format_name('foo') }
141
+ end
142
+
143
+ test "notify_change basic functionality" do
144
+ assert_respond_to(Clipboard, :notify_change)
145
+ def wait(&block)
146
+ Timeout::timeout(5) do
147
+ while @count == 0
148
+ yield if block
149
+ sleep(0.1)
150
+ end
151
+ end
152
+ end
153
+
154
+ @count = 0
155
+ t = Thread.start do
156
+ Clipboard.notify_change {@count += 1}
157
+ end
158
+ wait {Clipboard.set_data('ready')}
159
+ @count = 0
160
+
161
+ Clipboard.set_data('foo')
162
+ wait
163
+ assert_equal(@count, 1)
164
+ t.kill
165
+ end
166
+
167
+ test "expected constants are defined" do
168
+ assert_not_nil(Clipboard::TEXT)
169
+ assert_not_nil(Clipboard::OEMTEXT)
170
+ assert_not_nil(Clipboard::UNICODETEXT)
171
+ assert_not_nil(Clipboard::BITMAP)
172
+ assert_not_nil(Clipboard::DIB)
173
+ assert_not_nil(Clipboard::HDROP)
174
+ assert_not_nil(Clipboard::ENHMETAFILE)
175
+ end
176
+ end