1259698Sdim#! /usr/bin/perl -w
2259698Sdim
3259698Sdimuse strict;
4259698Sdimuse Test::More tests => 87;
5259698SdimBEGIN {use_ok 'OS2::Process', qw(:DEFAULT CFI_POINTER CF_TEXT)}
6259698Sdim
7259698Sdim# Initialize
8259698Sdimmy $raw = "Just a random\nselection";
9259698Sdim(my $cr = $raw) =~ s/\n/\r\n/g;
10259698Sdimok(ClipbrdText_set($raw), 'ClipbrdText_set');
11259698Sdim
12259698Sdimmy ($v, $p, @f);
13259698Sdimis(ClipbrdText, $cr, "ClipbrdText it back");
14288943Sdimis(ClipbrdOwner, 0, "ClipbrdOwner is not defined");
15259698Sdim$v = ClipbrdViewer;
16276479Sdimok((!$v || IsWindow $v), "ClipbrdViewer is not defined or a valid window");
17259698Sdim
18259698Sdim{
19259698Sdim  my $h = OS2::localClipbrd->new;
20259698Sdim  $p = ClipbrdData;
21259698Sdim
22288943Sdim  @f = MemoryRegionSize($p, 0x4000);		# 4 pages, 16K, limit
23288943Sdim  is(scalar @f, 2, 'MemoryRegionSize(16K) returns 2 values');
24276479Sdim  # diag(sprintf '%#x, %#x, %#x, %#x', @f, $f[0]+$p, $p);
25276479Sdim  is($f[0], 4096, 'MemoryRegionSize claims 1 page is available');
26259698Sdim  ok($f[1] & 0x1, 'MemoryRegionSize claims page readable');# PAG_READ=1 0x12013
27288943Sdim
28288943Sdim  my @f1 = MemoryRegionSize($p, 0x100000);		# 16 blocks, 1M, limit
29288943Sdim  is(scalar @f1, 2, 'MemoryRegionSize(1M) returns 2 values');
30259698Sdim  is($f1[0], $f[0], 'MemoryRegionSize returns same length');
31288943Sdim  is($f1[1], $f[1], 'MemoryRegionSize returns same flags');
32259698Sdim
33288943Sdim  @f1 = MemoryRegionSize($p);
34288943Sdim  is(scalar @f1, 2, 'MemoryRegionSize(no-limit) returns 2 values');
35288943Sdim  is($f1[0], $f[0], 'MemoryRegionSize returns same length');
36259698Sdim  is($f1[1], $f[1], 'MemoryRegionSize returns same flags');
37288943Sdim}
38288943Sdim
39288943Sdimok($p, 'ClipbrdData');
40288943Sdim
41288943Sdimis(ClipbrdFmtInfo, CFI_POINTER, 'ClipbrdFmtInfo is CFI_POINTER');
42288943Sdim
43296417Sdim# CF_TEXT is 1
44296417Sdimok(!defined eval {ClipbrdText(1+CF_TEXT); 1}, "ClipbrdText(not CF_TEXT) croaks");
45296417Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
46288943Sdim
47296417Sdim@f = ClipbrdFmtAtoms;
48296417Sdimis(scalar @f, 1, "Only one format available");
49296417Sdimis($f[0], CF_TEXT, "format is CF_TEXT");
50296417Sdim
51296417Sdim@f = ClipbrdFmtNames;
52296417Sdimis(scalar @f, 1, "Only one format available");
53296417Sdimis($f[0], '#1', "format is CF_TEXT='#1'");
54288943Sdim
55288943Sdim{
56259698Sdim  my $h = OS2::localClipbrd->new;
57288943Sdim  ok(EmptyClipbrd, 'EmptyClipbrd');
58259698Sdim}
59259698Sdim
60259698Sdim@f = ClipbrdFmtNames;
61259698Sdimis(scalar @f, 0, "No format available");
62259698Sdim
63259698Sdimundef $p; undef $v;
64259698Sdimeval {
65259698Sdim  my $h = OS2::localClipbrd->new;
66259698Sdim  $p = ClipbrdData;
67259698Sdim  $v = 1;
68259698Sdim};
69259698Sdim
70259698Sdimok(! defined $p, 'ClipbrdData croaked');
71259698Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
72259698Sdim
73259698Sdimok(! defined eval {ClipbrdText}, "ClipbrdText croaks");
74259698Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
75259698Sdim
76259698Sdim# CF_TEXT is 1
77259698Sdimok(!defined eval {ClipbrdText(1+CF_TEXT); 1}, "ClipbrdText(not CF_TEXT) croaks");
78259698Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
79259698Sdim
80259698Sdimis(ClipbrdOwner, 0, "ClipbrdOwner is not defined");
81259698Sdim
82259698Sdim$v = ClipbrdViewer;
83259698Sdimok((!$v || IsWindow $v), "ClipbrdViewer is not defined or a valid window");
84259698Sdim
85259698Sdimis(ClipbrdFmtInfo, 0, 'ClipbrdFmtInfo is 0');
86259698Sdim
87259698Sdim@f = ClipbrdFmtAtoms;
88259698Sdimis(scalar @f, 0, "No formats available");
89259698Sdim
90259698Sdim{
91259698Sdim  my $h = OS2::localClipbrd->new;
92259698Sdim  ok(EmptyClipbrd, 'EmptyClipbrd when clipboard is empty succeeds');
93259698Sdim}
94259698Sdim
95259698Sdimok(ClipbrdText_set($raw, 1), 'ClipbrdText_set() raw');
96259698Sdimis(ClipbrdText, $raw, "ClipbrdText it back");
97259698Sdim
98259698Sdim{
99259698Sdim  my $h = OS2::localClipbrd->new;
100259698Sdim  ok(EmptyClipbrd, 'EmptyClipbrd again');
101259698Sdim}
102259698Sdim
103259698Sdimmy $ar = AddAtom 'perltest/unknown_raw';
104259698Sdimok($ar, 'Atom added');
105259698Sdimmy $ar1 = AddAtom 'perltest/unknown_raw1';
106259698Sdimok($ar1, 'Atom added');
107259698Sdimmy $a = AddAtom 'perltest/unknown';
108259698Sdimok($a, 'Atom added');
109259698Sdimmy $a1 = AddAtom 'perltest/unknown1';
110259698Sdimok($a1, 'Atom added');
111259698Sdim
112259698Sdim{
113259698Sdim  my $h = OS2::localClipbrd->new;
114259698Sdim  ok(ClipbrdData_set($raw), 	     'ClipbrdData_set()');
115259698Sdim  ok(ClipbrdData_set($raw, 0, $ar1), 'ClipbrdData_set(perltest/unknown_raw1)');
116259698Sdim  ok(ClipbrdData_set($cr,  0, $ar),  'ClipbrdData_set(perltest/unknown_raw)');
117259698Sdim  ok(ClipbrdData_set($raw, 1, $a1),  'ClipbrdData_set(perltest/unknown1)');
118259698Sdim  ok(ClipbrdData_set($cr,  1, $a),   'ClipbrdData_set(perltest/unknown)');
119259698Sdim  # Results should be the same, except ($raw, 0) one...
120259698Sdim}
121259698Sdim
122259698Sdimis(ClipbrdText, $cr,	    "ClipbrdText CF_TEXT back");
123259698Sdimis(ClipbrdText($ar1), $raw, "ClipbrdText perltest/unknown_raw1 back");
124259698Sdimis(ClipbrdText($ar), $cr,   "ClipbrdText perltest/unknown_raw back");
125259698Sdimis(ClipbrdText($a1), $cr,   "ClipbrdText perltest/unknown1 back");
126259698Sdimis(ClipbrdText($a), $cr,    "ClipbrdText perltest/unknown back");
127259698Sdim
128259698Sdimis(ClipbrdFmtInfo,	 CFI_POINTER, 'ClipbrdFmtInfo is CFI_POINTER');
129259698Sdimis(ClipbrdFmtInfo($ar1), CFI_POINTER, 'ClipbrdFmtInfo is CFI_POINTER');
130259698Sdimis(ClipbrdFmtInfo($ar),  CFI_POINTER, 'ClipbrdFmtInfo is CFI_POINTER');
131259698Sdimis(ClipbrdFmtInfo($a1),  CFI_POINTER, 'ClipbrdFmtInfo is CFI_POINTER');
132259698Sdimis(ClipbrdFmtInfo($a),   CFI_POINTER, 'ClipbrdFmtInfo is CFI_POINTER');
133259698Sdim
134259698Sdim# CF_TEXT is 1
135259698Sdimok(!defined eval {ClipbrdText(1+CF_TEXT); 1}, "ClipbrdText(1+CF_TEXT) croaks");
136259698Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
137259698Sdim
138259698Sdimmy $names = join ',', sort '#1', qw(perltest/unknown perltest/unknown1
139259698Sdim				    perltest/unknown_raw perltest/unknown_raw1);
140259698Sdim@f = ClipbrdFmtAtoms;
141259698Sdimis(scalar @f, 5, "5 formats available");
142259698Sdimis((join ',', sort map AtomName($_), @f), $names, "formats are $names");
143259698Sdim
144259698Sdim@f = ClipbrdFmtNames;
145259698Sdimis(scalar @f, 5, "Only one format available");
146259698Sdimis((join ',', sort @f), $names, "formats are $names");
147259698Sdim
148259698Sdim{
149259698Sdim  my $h = OS2::localClipbrd->new;
150259698Sdim  ok(EmptyClipbrd, 'EmptyClipbrd');
151259698Sdim}
152259698Sdim
153259698Sdim@f = ClipbrdFmtNames;
154259698Sdimis(scalar @f, 0, "No formats available");
155259698Sdim
156259698Sdim{
157259698Sdim  my $h = OS2::localClipbrd->new;
158259698Sdim  ok(ClipbrdText_set($cr,  1, $ar),  'ClipbrdText_set(perltest/unknown_raw)');
159259698Sdim};
160259698Sdim
161288943Sdim#diag(join ' ', ClipbrdFmtNames);
162288943Sdim
163288943Sdimis(ClipbrdText($ar), $cr,   "ClipbrdText perltest/unknown_raw back");
164288943Sdimis(ClipbrdFmtInfo($ar),  CFI_POINTER, 'ClipbrdFmtInfo is CFI_POINTER');
165288943Sdim
166259698Sdimok(!defined eval {ClipbrdText(CF_TEXT); 1}, "ClipbrdText(CF_TEXT) croaks");
167259698Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
168259698Sdim# CF_TEXT is 1
169259698Sdimok(!defined eval {ClipbrdText(1+CF_TEXT); 1}, "ClipbrdText(1+CF_TEXT) croaks");
170259698Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
171259698Sdim
172259698Sdim@f = ClipbrdFmtNames;
173259698Sdimis(scalar @f, 1, "1 format available");
174259698Sdimis($f[0], 'perltest/unknown_raw', "format is perltest/unknown_raw");
175259698Sdim
176296417Sdim@f = ClipbrdFmtAtoms;
177276479Sdimis(scalar @f, 1, "1 format available");
178276479Sdimis($f[0], $ar, "format is perltest/unknown_raw");
179276479Sdim
180276479Sdim{
181259698Sdim  my $h = OS2::localClipbrd->new;
182259698Sdim  ok(EmptyClipbrd, 'EmptyClipbrd');
183259698Sdim}
184259698Sdim
185259698Sdimundef $p; undef $v;
186259698Sdimeval {
187259698Sdim  my $h = OS2::localClipbrd->new;
188259698Sdim  $p = ClipbrdData;
189296417Sdim  $v = 1;
190296417Sdim};
191296417Sdim
192296417Sdimok(! defined $p, 'ClipbrdData croaked');
193296417Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
194259698Sdim
195259698Sdimok(! defined eval {ClipbrdText}, "ClipbrdText croaks");
196296417Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
197259698Sdim
198296417Sdim# CF_TEXT is 1
199259698Sdimok(!defined eval {ClipbrdText(1+CF_TEXT); 1}, "ClipbrdText(not CF_TEXT) croaks");
200296417Sdimlike($@, qr/\bPMERR_INVALID_HWND\b/, 'with expected (lousy) error message');
201296417Sdim
202259698Sdimis(ClipbrdOwner, 0, "ClipbrdOwner is not defined");
203296417Sdim
204259698Sdim$v = ClipbrdViewer;
205296417Sdimok((!$v || IsWindow $v), "ClipbrdViewer is not defined or a valid window");
206259698Sdim
207296417Sdimis(ClipbrdFmtInfo, 0, 'ClipbrdFmtInfo is 0');
208296417Sdim
209259698Sdim@f = ClipbrdFmtAtoms;
210296417Sdimis(scalar @f, 0, "No formats available");
211296417Sdim
212259698Sdim