win32-clipboard 0.6.3 → 0.6.4
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGES +112 -105
- data/MANIFEST +31 -12
- data/README +106 -112
- data/Rakefile +4 -7
- data/certs/djberg96_pub.pem +21 -0
- data/examples/clipboard_test.rb +28 -28
- data/lib/win32-clipboard.rb +1 -0
- data/lib/win32/clipboard.rb +447 -447
- data/lib/win32/html_clipboard.rb +232 -232
- data/lib/win32/windows/constants.rb +14 -14
- data/lib/win32/windows/functions.rb +66 -66
- data/lib/win32/windows/structs.rb +43 -43
- data/test/lock.rb +18 -18
- data/test/notify.rb +27 -27
- data/test/test_clipboard.rb +176 -176
- data/test/test_clipboard_chain.rb +137 -137
- data/test/test_html_clipboard.rb +50 -50
- data/test/test_image_clipboard.rb +51 -51
- data/win32-clipboard.gemspec +26 -26
- metadata +37 -13
- metadata.gz.sig +0 -0
@@ -1,137 +1,137 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
###########################################################################
|
3
|
-
# test_clipboard_chain.rb
|
4
|
-
#
|
5
|
-
# Test suite for the win32-clipboard library(only clipboard chain).
|
6
|
-
###########################################################################
|
7
|
-
require 'test-unit'
|
8
|
-
require 'win32/clipboard'
|
9
|
-
require 'timeout'
|
10
|
-
require File.join(File.dirname(__FILE__), 'lock')
|
11
|
-
|
12
|
-
include Win32
|
13
|
-
|
14
|
-
class TC_Clipboard_Chain < Test::Unit::TestCase
|
15
|
-
test "clipboard viewer chain" do
|
16
|
-
begin
|
17
|
-
# Add clipboard viewer 1-3
|
18
|
-
# clipboard viewer chain: cv3 -> cv2 -> cv1
|
19
|
-
cv1 = ClipboardViewer.new('1')
|
20
|
-
puts 'Added clipboard viewer 1'
|
21
|
-
|
22
|
-
cv2 = ClipboardViewer.new('2')
|
23
|
-
puts 'Added clipboard viewer 2'
|
24
|
-
|
25
|
-
cv3 = ClipboardViewer.new('3')
|
26
|
-
puts 'Added clipboard viewer 3'
|
27
|
-
|
28
|
-
lock do
|
29
|
-
Clipboard.set_data('foo')
|
30
|
-
end
|
31
|
-
|
32
|
-
result = Clipboard.data
|
33
|
-
assert_equal(result, cv1.result)
|
34
|
-
assert_equal(result, cv2.result)
|
35
|
-
assert_equal(result, cv3.result)
|
36
|
-
|
37
|
-
# Remove clipboard viewer 2
|
38
|
-
# clipboard viewer chain: cv3 -> cv1
|
39
|
-
assert_not_nil(cv2.remove)
|
40
|
-
|
41
|
-
cv1.clear
|
42
|
-
cv3.clear
|
43
|
-
Clipboard.set_data('bar')
|
44
|
-
|
45
|
-
result = Clipboard.data
|
46
|
-
assert_equal(result, cv1.result)
|
47
|
-
assert_equal(result, cv3.result)
|
48
|
-
|
49
|
-
# Remove clipboard viewer 3
|
50
|
-
assert_not_nil(cv3.remove)
|
51
|
-
|
52
|
-
cv1.clear
|
53
|
-
Clipboard.set_data('foobar')
|
54
|
-
|
55
|
-
result = Clipboard.data
|
56
|
-
assert_equal(result, cv1.result)
|
57
|
-
assert_not_nil(cv1.remove)
|
58
|
-
ensure
|
59
|
-
cv1.exit
|
60
|
-
cv2.exit
|
61
|
-
cv3.exit
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
class ClipboardViewer
|
66
|
-
NOTIFY_TIMEOUT = 20
|
67
|
-
def initialize(key)
|
68
|
-
@key = key
|
69
|
-
load_path = File.join(File.join(File.dirname(__FILE__), '..'), 'lib')
|
70
|
-
@pipe = IO.popen("#{RbConfig.ruby} -I #{load_path} #{File.join(File.dirname(__FILE__), "notify.rb")} #{key} #{NOTIFY_TIMEOUT}")
|
71
|
-
@result = nil
|
72
|
-
is_ready = false
|
73
|
-
|
74
|
-
@t = Thread.start do
|
75
|
-
begin
|
76
|
-
while true
|
77
|
-
result = @pipe.gets.chomp
|
78
|
-
|
79
|
-
if result == 'ready'
|
80
|
-
is_ready = true
|
81
|
-
else
|
82
|
-
@result = result
|
83
|
-
end
|
84
|
-
|
85
|
-
if @result == @key.chop
|
86
|
-
break
|
87
|
-
end
|
88
|
-
end
|
89
|
-
rescue => e
|
90
|
-
puts $!
|
91
|
-
puts e.backtrace
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
Timeout::timeout(5) do
|
96
|
-
until is_ready
|
97
|
-
lock do
|
98
|
-
Clipboard.set_data('ready')
|
99
|
-
end
|
100
|
-
sleep(0.1)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
def clear
|
106
|
-
@result = nil
|
107
|
-
end
|
108
|
-
|
109
|
-
def result
|
110
|
-
Timeout::timeout(5) do
|
111
|
-
until @result
|
112
|
-
sleep(0.1)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
@result
|
116
|
-
rescue Timeout::Error
|
117
|
-
raise 'Cannot get result.(Timeout)'
|
118
|
-
end
|
119
|
-
|
120
|
-
def remove
|
121
|
-
return unless @t.alive?
|
122
|
-
lock do
|
123
|
-
Clipboard.set_data(@key)
|
124
|
-
end
|
125
|
-
ret = @t.join(3)
|
126
|
-
if ret
|
127
|
-
@pipe.close
|
128
|
-
end
|
129
|
-
ret
|
130
|
-
end
|
131
|
-
|
132
|
-
def exit
|
133
|
-
return unless @t.alive?
|
134
|
-
Process.kill('KILL', @pipe.pid)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
###########################################################################
|
3
|
+
# test_clipboard_chain.rb
|
4
|
+
#
|
5
|
+
# Test suite for the win32-clipboard library(only clipboard chain).
|
6
|
+
###########################################################################
|
7
|
+
require 'test-unit'
|
8
|
+
require 'win32/clipboard'
|
9
|
+
require 'timeout'
|
10
|
+
require File.join(File.dirname(__FILE__), 'lock')
|
11
|
+
|
12
|
+
include Win32
|
13
|
+
|
14
|
+
class TC_Clipboard_Chain < Test::Unit::TestCase
|
15
|
+
test "clipboard viewer chain" do
|
16
|
+
begin
|
17
|
+
# Add clipboard viewer 1-3
|
18
|
+
# clipboard viewer chain: cv3 -> cv2 -> cv1
|
19
|
+
cv1 = ClipboardViewer.new('1')
|
20
|
+
puts 'Added clipboard viewer 1'
|
21
|
+
|
22
|
+
cv2 = ClipboardViewer.new('2')
|
23
|
+
puts 'Added clipboard viewer 2'
|
24
|
+
|
25
|
+
cv3 = ClipboardViewer.new('3')
|
26
|
+
puts 'Added clipboard viewer 3'
|
27
|
+
|
28
|
+
lock do
|
29
|
+
Clipboard.set_data('foo')
|
30
|
+
end
|
31
|
+
|
32
|
+
result = Clipboard.data
|
33
|
+
assert_equal(result, cv1.result)
|
34
|
+
assert_equal(result, cv2.result)
|
35
|
+
assert_equal(result, cv3.result)
|
36
|
+
|
37
|
+
# Remove clipboard viewer 2
|
38
|
+
# clipboard viewer chain: cv3 -> cv1
|
39
|
+
assert_not_nil(cv2.remove)
|
40
|
+
|
41
|
+
cv1.clear
|
42
|
+
cv3.clear
|
43
|
+
Clipboard.set_data('bar')
|
44
|
+
|
45
|
+
result = Clipboard.data
|
46
|
+
assert_equal(result, cv1.result)
|
47
|
+
assert_equal(result, cv3.result)
|
48
|
+
|
49
|
+
# Remove clipboard viewer 3
|
50
|
+
assert_not_nil(cv3.remove)
|
51
|
+
|
52
|
+
cv1.clear
|
53
|
+
Clipboard.set_data('foobar')
|
54
|
+
|
55
|
+
result = Clipboard.data
|
56
|
+
assert_equal(result, cv1.result)
|
57
|
+
assert_not_nil(cv1.remove)
|
58
|
+
ensure
|
59
|
+
cv1.exit
|
60
|
+
cv2.exit
|
61
|
+
cv3.exit
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class ClipboardViewer
|
66
|
+
NOTIFY_TIMEOUT = 20
|
67
|
+
def initialize(key)
|
68
|
+
@key = key
|
69
|
+
load_path = File.join(File.join(File.dirname(__FILE__), '..'), 'lib')
|
70
|
+
@pipe = IO.popen("#{RbConfig.ruby} -I #{load_path} #{File.join(File.dirname(__FILE__), "notify.rb")} #{key} #{NOTIFY_TIMEOUT}")
|
71
|
+
@result = nil
|
72
|
+
is_ready = false
|
73
|
+
|
74
|
+
@t = Thread.start do
|
75
|
+
begin
|
76
|
+
while true
|
77
|
+
result = @pipe.gets.chomp
|
78
|
+
|
79
|
+
if result == 'ready'
|
80
|
+
is_ready = true
|
81
|
+
else
|
82
|
+
@result = result
|
83
|
+
end
|
84
|
+
|
85
|
+
if @result == @key.chop
|
86
|
+
break
|
87
|
+
end
|
88
|
+
end
|
89
|
+
rescue => e
|
90
|
+
puts $!
|
91
|
+
puts e.backtrace
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
Timeout::timeout(5) do
|
96
|
+
until is_ready
|
97
|
+
lock do
|
98
|
+
Clipboard.set_data('ready')
|
99
|
+
end
|
100
|
+
sleep(0.1)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def clear
|
106
|
+
@result = nil
|
107
|
+
end
|
108
|
+
|
109
|
+
def result
|
110
|
+
Timeout::timeout(5) do
|
111
|
+
until @result
|
112
|
+
sleep(0.1)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
@result
|
116
|
+
rescue Timeout::Error
|
117
|
+
raise 'Cannot get result.(Timeout)'
|
118
|
+
end
|
119
|
+
|
120
|
+
def remove
|
121
|
+
return unless @t.alive?
|
122
|
+
lock do
|
123
|
+
Clipboard.set_data(@key)
|
124
|
+
end
|
125
|
+
ret = @t.join(3)
|
126
|
+
if ret
|
127
|
+
@pipe.close
|
128
|
+
end
|
129
|
+
ret
|
130
|
+
end
|
131
|
+
|
132
|
+
def exit
|
133
|
+
return unless @t.alive?
|
134
|
+
Process.kill('KILL', @pipe.pid)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
data/test/test_html_clipboard.rb
CHANGED
@@ -1,50 +1,50 @@
|
|
1
|
-
########################################################################
|
2
|
-
# test_html_clipboard.rb
|
3
|
-
#
|
4
|
-
# Test suite for the HtmlClipboard class.
|
5
|
-
########################################################################
|
6
|
-
require 'test-unit'
|
7
|
-
require 'win32/clipboard'
|
8
|
-
require 'win32/html_clipboard'
|
9
|
-
include Win32
|
10
|
-
|
11
|
-
class TC_Html_Clipboard < Test::Unit::TestCase
|
12
|
-
def setup
|
13
|
-
@html_str = "Writing to the <i>clipboard</i> is <b>easy</b> with this code"
|
14
|
-
@plain_str = "Writing to the clipboard is easy with this code"
|
15
|
-
end
|
16
|
-
|
17
|
-
test "CF_HTML constant is defined" do
|
18
|
-
assert_not_nil(HtmlClipboard::CF_HTML)
|
19
|
-
assert_kind_of(Integer, HtmlClipboard::CF_HTML)
|
20
|
-
end
|
21
|
-
|
22
|
-
test "get_data basic functionality" do
|
23
|
-
assert_respond_to(HtmlClipboard, :get_data)
|
24
|
-
end
|
25
|
-
|
26
|
-
test "set_data basic functionality" do
|
27
|
-
assert_respond_to(HtmlClipboard, :set_data)
|
28
|
-
end
|
29
|
-
|
30
|
-
test "getting html data returns a plain string" do
|
31
|
-
assert_nothing_raised{ HtmlClipboard.set_data(@html_str) }
|
32
|
-
assert_equal(@plain_str, HtmlClipboard.get_data)
|
33
|
-
end
|
34
|
-
|
35
|
-
test "html_format basic functionality" do
|
36
|
-
assert_respond_to(HtmlClipboard, :html_format?)
|
37
|
-
assert_boolean(HtmlClipboard.html_format?)
|
38
|
-
end
|
39
|
-
|
40
|
-
test "data details basic functionality" do
|
41
|
-
assert_respond_to(HtmlClipboard, :data_details)
|
42
|
-
assert_nothing_raised{ HtmlClipboard.data_details }
|
43
|
-
assert_kind_of(String, HtmlClipboard.data_details)
|
44
|
-
end
|
45
|
-
|
46
|
-
def teardown
|
47
|
-
@html_str = nil
|
48
|
-
@plain_str = nil
|
49
|
-
end
|
50
|
-
end
|
1
|
+
########################################################################
|
2
|
+
# test_html_clipboard.rb
|
3
|
+
#
|
4
|
+
# Test suite for the HtmlClipboard class.
|
5
|
+
########################################################################
|
6
|
+
require 'test-unit'
|
7
|
+
require 'win32/clipboard'
|
8
|
+
require 'win32/html_clipboard'
|
9
|
+
include Win32
|
10
|
+
|
11
|
+
class TC_Html_Clipboard < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
@html_str = "Writing to the <i>clipboard</i> is <b>easy</b> with this code"
|
14
|
+
@plain_str = "Writing to the clipboard is easy with this code"
|
15
|
+
end
|
16
|
+
|
17
|
+
test "CF_HTML constant is defined" do
|
18
|
+
assert_not_nil(HtmlClipboard::CF_HTML)
|
19
|
+
assert_kind_of(Integer, HtmlClipboard::CF_HTML)
|
20
|
+
end
|
21
|
+
|
22
|
+
test "get_data basic functionality" do
|
23
|
+
assert_respond_to(HtmlClipboard, :get_data)
|
24
|
+
end
|
25
|
+
|
26
|
+
test "set_data basic functionality" do
|
27
|
+
assert_respond_to(HtmlClipboard, :set_data)
|
28
|
+
end
|
29
|
+
|
30
|
+
test "getting html data returns a plain string" do
|
31
|
+
assert_nothing_raised{ HtmlClipboard.set_data(@html_str) }
|
32
|
+
assert_equal(@plain_str, HtmlClipboard.get_data)
|
33
|
+
end
|
34
|
+
|
35
|
+
test "html_format basic functionality" do
|
36
|
+
assert_respond_to(HtmlClipboard, :html_format?)
|
37
|
+
assert_boolean(HtmlClipboard.html_format?)
|
38
|
+
end
|
39
|
+
|
40
|
+
test "data details basic functionality" do
|
41
|
+
assert_respond_to(HtmlClipboard, :data_details)
|
42
|
+
assert_nothing_raised{ HtmlClipboard.data_details }
|
43
|
+
assert_kind_of(String, HtmlClipboard.data_details)
|
44
|
+
end
|
45
|
+
|
46
|
+
def teardown
|
47
|
+
@html_str = nil
|
48
|
+
@plain_str = nil
|
49
|
+
end
|
50
|
+
end
|
@@ -1,51 +1,51 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
###########################################################################
|
3
|
-
# test_image_clipboard.rb
|
4
|
-
#
|
5
|
-
# Test suite for the win32-clipboard library(only get_image_data).
|
6
|
-
###########################################################################
|
7
|
-
require 'test-unit'
|
8
|
-
require 'win32/clipboard'
|
9
|
-
include Win32
|
10
|
-
|
11
|
-
class TC_Image_ClipBoard < Test::Unit::TestCase
|
12
|
-
class << self
|
13
|
-
def startup
|
14
|
-
$is_ready = false
|
15
|
-
@t = Thread.new do
|
16
|
-
begin
|
17
|
-
Win32::Clipboard.notify_change {$is_ready = true}
|
18
|
-
rescue => e
|
19
|
-
puts $!
|
20
|
-
puts e.backtrace
|
21
|
-
end
|
22
|
-
end
|
23
|
-
# wait for notify_change running
|
24
|
-
until $is_ready
|
25
|
-
Clipboard.set_data('foo')
|
26
|
-
sleep 0.1
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def shutdown
|
31
|
-
@t.kill
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
dir = File.join(File.dirname(__FILE__), 'img')
|
36
|
-
Dir.glob("#{dir}/*.bmp") do |file|
|
37
|
-
test "get_image_data file: " + File.basename(file) do
|
38
|
-
$is_ready = false
|
39
|
-
|
40
|
-
bmp = File.open(file, "rb").read
|
41
|
-
Clipboard.set_data(bmp, Clipboard::DIB)
|
42
|
-
|
43
|
-
until $is_ready
|
44
|
-
sleep 0.1
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_equal(Clipboard.data(Clipboard::DIB), bmp)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
###########################################################################
|
3
|
+
# test_image_clipboard.rb
|
4
|
+
#
|
5
|
+
# Test suite for the win32-clipboard library(only get_image_data).
|
6
|
+
###########################################################################
|
7
|
+
require 'test-unit'
|
8
|
+
require 'win32/clipboard'
|
9
|
+
include Win32
|
10
|
+
|
11
|
+
class TC_Image_ClipBoard < Test::Unit::TestCase
|
12
|
+
class << self
|
13
|
+
def startup
|
14
|
+
$is_ready = false
|
15
|
+
@t = Thread.new do
|
16
|
+
begin
|
17
|
+
Win32::Clipboard.notify_change {$is_ready = true}
|
18
|
+
rescue => e
|
19
|
+
puts $!
|
20
|
+
puts e.backtrace
|
21
|
+
end
|
22
|
+
end
|
23
|
+
# wait for notify_change running
|
24
|
+
until $is_ready
|
25
|
+
Clipboard.set_data('foo')
|
26
|
+
sleep 0.1
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def shutdown
|
31
|
+
@t.kill
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
dir = File.join(File.dirname(__FILE__), 'img')
|
36
|
+
Dir.glob("#{dir}/*.bmp") do |file|
|
37
|
+
test "get_image_data file: " + File.basename(file) do
|
38
|
+
$is_ready = false
|
39
|
+
|
40
|
+
bmp = File.open(file, "rb").read
|
41
|
+
Clipboard.set_data(bmp, Clipboard::DIB)
|
42
|
+
|
43
|
+
until $is_ready
|
44
|
+
sleep 0.1
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_equal(Clipboard.data(Clipboard::DIB), bmp)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|