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