bpo-33671: Add support.MS_WINDOWS and support.MACOS (GH-7800)

* Add support.MS_WINDOWS: True if Python is running on Microsoft Windows.
* Add support.MACOS: True if Python is running on Apple macOS.
* Replace support.is_android with support.ANDROID
* Replace support.is_jython with support.JYTHON
* Cleanup code to initialize unix_shell
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 4b089f5..569e3e0 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -35,13 +35,11 @@
 if support.PGO:
     raise unittest.SkipTest("test is not helpful for PGO")
 
-mswindows = (sys.platform == "win32")
-
 #
 # Depends on the following external programs: Python
 #
 
-if mswindows:
+if support.MS_WINDOWS:
     SETBINARY = ('import msvcrt; msvcrt.setmode(sys.stdout.fileno(), '
                                                 'os.O_BINARY);')
 else:
@@ -314,7 +312,7 @@
                           self._assert_python, pre_args,
                           executable=NONEXISTING_CMD[0])
 
-    @unittest.skipIf(mswindows, "executable argument replaces shell")
+    @unittest.skipIf(support.MS_WINDOWS, "executable argument replaces shell")
     def test_executable_replaces_shell(self):
         # Check that the executable argument replaces the default shell
         # when shell=True.
@@ -363,7 +361,7 @@
         temp_dir = self._normalize_cwd(temp_dir)
         self._assert_cwd(temp_dir, sys.executable, cwd=FakePath(temp_dir))
 
-    @unittest.skipIf(mswindows, "pending resolution of issue #15533")
+    @unittest.skipIf(support.MS_WINDOWS, "pending resolution of issue #15533")
     def test_cwd_with_relative_arg(self):
         # Check that Popen looks for args[0] relative to cwd if args[0]
         # is relative.
@@ -379,7 +377,7 @@
             python_dir = self._normalize_cwd(python_dir)
             self._assert_cwd(python_dir, rel_python, cwd=python_dir)
 
-    @unittest.skipIf(mswindows, "pending resolution of issue #15533")
+    @unittest.skipIf(support.MS_WINDOWS, "pending resolution of issue #15533")
     def test_cwd_with_relative_executable(self):
         # Check that Popen looks for executable relative to cwd if executable
         # is relative (and that executable takes precedence over args[0]).
@@ -1008,7 +1006,7 @@
 
     def test_no_leaking(self):
         # Make sure we leak no resources
-        if not mswindows:
+        if not support.MS_WINDOWS:
             max_handles = 1026 # too much for most UNIX systems
         else:
             max_handles = 2050 # too much for (at least some) Windows setups
@@ -1244,7 +1242,7 @@
         t = threading.Timer(0.2, kill_proc_timer_thread)
         t.start()
 
-        if mswindows:
+        if support.MS_WINDOWS:
             expected_errorcode = 1
         else:
             # Should be -9 because of the proc.kill() from the thread.
@@ -1365,13 +1363,13 @@
         fds_after_exception = os.listdir(fd_directory)
         self.assertEqual(fds_before_popen, fds_after_exception)
 
-    @unittest.skipIf(mswindows, "behavior currently not supported on Windows")
+    @unittest.skipIf(support.MS_WINDOWS, "behavior currently not supported on Windows")
     def test_file_not_found_includes_filename(self):
         with self.assertRaises(FileNotFoundError) as c:
             subprocess.call(['/opt/nonexistent_binary', 'with', 'some', 'args'])
         self.assertEqual(c.exception.filename, '/opt/nonexistent_binary')
 
-    @unittest.skipIf(mswindows, "behavior currently not supported on Windows")
+    @unittest.skipIf(support.MS_WINDOWS, "behavior currently not supported on Windows")
     def test_file_not_found_with_bad_cwd(self):
         with self.assertRaises(FileNotFoundError) as c:
             subprocess.Popen(['exit', '0'], cwd='/some/nonexistent/directory')
@@ -1505,7 +1503,7 @@
         self.assertIn('capture_output', c.exception.args[0])
 
 
-@unittest.skipIf(mswindows, "POSIX specific tests")
+@unittest.skipIf(support.MS_WINDOWS, "POSIX specific tests")
 class POSIXProcessTestCase(BaseTestCase):
 
     def setUp(self):
@@ -2788,7 +2786,7 @@
         self.assertEqual(returncode, -3)
 
 
-@unittest.skipUnless(mswindows, "Windows specific tests")
+@unittest.skipUnless(support.MS_WINDOWS, "Windows specific tests")
 class Win32ProcessTestCase(BaseTestCase):
 
     def test_startupinfo(self):
@@ -3093,7 +3091,7 @@
             dir = tempfile.mkdtemp()
             name = os.path.join(dir, "foo")
             status, output = subprocess.getstatusoutput(
-                ("type " if mswindows else "cat ") + name)
+                ("type " if support.MS_WINDOWS else "cat ") + name)
             self.assertNotEqual(status, 0)
         finally:
             if dir is not None:
@@ -3127,7 +3125,7 @@
         ProcessTestCase.tearDown(self)
 
 
-@unittest.skipUnless(mswindows, "Windows-specific tests")
+@unittest.skipUnless(support.MS_WINDOWS, "Windows-specific tests")
 class CommandsWithSpaces (BaseTestCase):
 
     def setUp(self):