Update makerel to make a release from a git checkout.
[p5sagit/p5-mst-13.2.git] / ext / Win32 / t / GetCurrentThreadId.t
index 230431c..ce98f3e 100644 (file)
@@ -3,18 +3,36 @@ use Config qw(%Config);
 use Test;
 use Win32;
 
-plan tests => 1;
+my $fork_emulation = $Config{ccflags} =~ /PERL_IMPLICIT_SYS/;
 
-if (my $pid = fork) {
-    waitpid($pid, 0);
-    exit 0;
+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());
 }
 
-# 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 ($Config{ccflags} =~ /PERL_IMPLICIT_SYS/) {
+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());
-} else {
-# here we just want to see something.
+
+    # 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);
 }