#!perl -w
use strict;
my @tests = (
"CreateToolhelp32Snapshot",
"CloseToolhelp32Snapshot",
"GetLastToolHelpError",
# "Heap32First",
# "Heap32Next",
# "Heap32ListFirst",
# "Heap32ListNext",
"Module32First",
"Module32Next",
"Process32First",
"Process32Next",
"SetLastToolHelpError",
"Thread32First",
"Thread32Next",
"Toolhelp32ReadProcessMemory"
);
sub speak { printf "\n%-70s", @_; }
sub croak { printf "\n%-70s", @_; }
use Test;
speak "plan tests: "; plan tests => scalar @tests + 1;
use Win32API::ToolHelp ':All';
speak "test use Win32API::ToolHelp ':All': "; ok 1;
my $result = 1;
foreach my $test (@tests) {
speak "test $test: ";
if (eval "Test$test") {
ok 1;
} else {
croak " GetLastToolHelpError() returned \"" . GetLastToolHelpError . "\"";
ok 0;
$result = 0;
}
}
speak "summarize tests: "; print $result ? "success" : "failure", "\n";
sub TestCreateToolhelp32Snapshot {
my ($result, $handle);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result\"";
if (!$result) { return 0; }
1
}
sub TestCloseToolhelp32Snapshot {
my ($result, $handle);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result\"";
if (!$result) { return 0; }
$result = CloseToolhelp32Snapshot(0);
croak " CloseToolhelp32Snapshot(0) returned \"$result\"";
if ($result) { return 0; }
$result = CloseToolhelp32Snapshot(0xffffffff);
croak " CloseToolhelp32Snapshot(0xffffffff) returned \"$result\"";
if ($result) { return 0; }
1
}
sub TestGetLastToolHelpError {
my ($result, $handle, $error);
SetLastToolHelpError(0);
croak " SetLastToolHelpError(0) called";
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result\"";
if (!$result) { return 0; }
$error = GetLastToolHelpError();
croak " GetLastToolHelpError() returned \"$error\"";
if ($error != 0) { return 0; }
$result = CloseToolhelp32Snapshot(0);
croak " CloseToolhelp32Snapshot(0) returned \"$result\"";
if ($result) { return 0; }
$error = GetLastToolHelpError();
croak " GetLastToolHelpError() returned \"$error\"";
if ($error == 0) { return 0; }
1
}
sub TestHeap32First {
my ($result, $handle, $hl, $he, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Heap32ListFirst($handle, $hl);
croak " Heap32ListFirst($handle, \$hl) returned \"$result\"";
if (!$result) { goto EXIT; }
$result = Heap32First($he, $$, $hl->{th32HeapID});
croak " Heap32First(\$he, $$, $hl->{th32HeapID}) returned \"$result\"";
if (!$result) { return 0; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestHeap32Next {
my ($result, $handle, $hl, $he, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Heap32ListFirst($handle, $hl);
croak " Heap32ListFirst($handle, \$hl) returned \"$result\"";
if (!$result) { goto EXIT; }
$result = Heap32First($he, $$, $hl->{th32HeapID});
croak " Heap32First(\$he, $$, $hl->{th32HeapID}) returned \"$result\"";
if (!$result) { return 0; }
$result = Heap32Next($he, $$, $hl->{th32HeapID});
croak " Heap32Next(\$he, $$, $hl->{th32HeapID}) returned \"$result\"";
if (!$result) { return 0; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestHeap32ListFirst {
my ($result, $handle, $hl, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Heap32ListFirst($handle, $hl);
croak " Heap32ListFirst($handle, \$hl) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestHeap32ListNext {
my ($result, $handle, $hl, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Heap32ListFirst($handle, $hl);
croak " Heap32ListFirst($handle, \$hl) returned \"$result\"";
if (!$result) { goto EXIT; }
$result = Heap32ListNext($handle, $hl);
croak " Heap32ListNext($handle, \$hl) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result2) { return 0; }
$result
}
sub TestModule32First {
my ($result, $handle, $me, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Module32First($handle, $me);
croak " Module32First($handle, \$me) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestModule32Next {
my ($result, $handle, $me, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Module32First($handle, $me);
croak " Module32First($handle, \$me) returned \"$result\"";
if (!$result) { goto EXIT; }
$result = Module32Next($handle, $me);
croak " Module32Next($handle, \$me) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestProcess32First {
my ($result, $handle, $me, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Process32First($handle, $me);
croak " Process32First($handle, \$me) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestProcess32Next {
my ($result, $handle, $me, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Process32First($handle, $me);
croak " Process32First($handle, \$me) returned \"$result\"";
if (!$result) { goto EXIT; }
$result = Process32Next($handle, $me);
croak " Process32Next($handle, \$me) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestSetLastToolHelpError {
my ($error);
SetLastToolHelpError(0);
croak " SetLastToolHelpError(0) called";
$error = GetLastToolHelpError();
croak " GetLastToolHelpError() returned \"$error\"";
if ($error != 0) { return 0; }
SetLastToolHelpError(6);
croak " SetLastToolHelpError(6) called";
$error = GetLastToolHelpError();
croak " GetLastToolHelpError() returned \"$error\"";
if ($error != 6) { return 0; }
1
}
sub TestThread32First {
my ($result, $handle, $te, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Thread32First($handle, $te);
croak " Thread32First($handle, \$te) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestThread32Next {
my ($result, $handle, $te, $result2);
$handle = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, $$);
croak " CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, $$) returned \"$handle\"";
if ($handle == 0 || $handle == 0xffffffff) { return 0; }
$result = Thread32First($handle, $te);
croak " Thread32First($handle, \$te) returned \"$result\"";
if (!$result) { goto EXIT; }
$result = Thread32Next($handle, $te);
croak " Thread32Next($handle, \$te) returned \"$result\"";
if (!$result) { goto EXIT; }
EXIT:
$result2 = CloseToolhelp32Snapshot($handle);
croak " CloseToolhelp32Snapshot($handle) returned \"$result2\"";
if (!$result) { return 0; }
$result
}
sub TestToolhelp32ReadProcessMemory {
my ($result, $buf);
$result = Toolhelp32ReadProcessMemory($$, 0, $buf, 4);
croak " Toolhelp32ReadProcessMemory($$, 0, \$buf, 4) returned \"$result\"";
if (!$result) { return 0; }
1
}