summaryrefslogtreecommitdiff
path: root/cpan/Win32/t/GetCurrentThreadId.t
diff options
context:
space:
mode:
Diffstat (limited to 'cpan/Win32/t/GetCurrentThreadId.t')
-rw-r--r--cpan/Win32/t/GetCurrentThreadId.t38
1 files changed, 38 insertions, 0 deletions
diff --git a/cpan/Win32/t/GetCurrentThreadId.t b/cpan/Win32/t/GetCurrentThreadId.t
new file mode 100644
index 0000000000..ce98f3e562
--- /dev/null
+++ b/cpan/Win32/t/GetCurrentThreadId.t
@@ -0,0 +1,38 @@
+use strict;
+use Config qw(%Config);
+use Test;
+use Win32;
+
+my $fork_emulation = $Config{ccflags} =~ /PERL_IMPLICIT_SYS/;
+
+my $tests = $fork_emulation ? 4 : 2;
+plan tests => $tests;
+
+my $pid = $$+0; # make sure we don't copy any magic to $pid
+
+if ($^O eq "cygwin") {
+ skip(!defined &Cygwin::pid_to_winpid,
+ Cygwin::pid_to_winpid($pid),
+ Win32::GetCurrentProcessId());
+}
+else {
+ ok($pid, Win32::GetCurrentProcessId());
+}
+
+if ($fork_emulation) {
+ # This test relies on the implementation detail that the fork() emulation
+ # uses the negative value of the thread id as a pseudo process id.
+ if (my $child = fork) {
+ waitpid($child, 0);
+ exit 0;
+ }
+ ok(-$$, Win32::GetCurrentThreadId());
+
+ # GetCurrentProcessId() should still return the real PID
+ ok($pid, Win32::GetCurrentProcessId());
+ ok($$ != Win32::GetCurrentProcessId());
+}
+else {
+ # here we just want to see something.
+ ok(Win32::GetCurrentThreadId() > 0);
+}