diff --git a/Lib/test/test_pep277.py b/Lib/test/test_pep277.py
index 1b4ae8c..fae2c6f 100644
--- a/Lib/test/test_pep277.py
+++ b/Lib/test/test_pep277.py
@@ -1,6 +1,7 @@
 # Test the Unicode versions of normal file functions
 # open, os.open, os.stat. os.listdir, os.rename, os.remove, os.mkdir, os.chdir, os.rmdir
 import sys, os, unittest
+from unicodedata import normalize
 from test import test_support
 
 filenames = [
@@ -13,8 +14,21 @@
     u'\u05d4\u05e9\u05e7\u05e6\u05e5\u05e1',
     u'\u66e8\u66e9\u66eb',
     u'\u66e8\u05e9\u3093\u0434\u0393\xdf',
+    # Specific code points: fn, NFC(fn) and NFKC(fn) all differents
+    u'\u2000\u2000\u2000A',
+    u'\u2001\u2001\u2001A',
+    u'\u2003\u2003\u2003A', # == NFC(u'\u2001\u2001\u2001A')
+    u'\u0020\u0020\u0020A', # u'\u0020' == u' ' == NFKC(u'\u2000')
+                            # u'\u0020' == NFKC(u'\u2001') == NFKC(u'\u2003')
+    u'\u1fee\u1ffd',
+    # Specific code points: NFC(fn), NFD(fn), NFKC(fn) and NFKD(fn) all differents
+    u'\u0385\u03d3\u03d4',
+    u'\u00a8\u0301\u03d2\u0301\u03d2\u0308',    # == NFD(u'\u0385\u03d3\u03d4')
+    u'\u0020\u0308\u0301\u038e\u03ab',          # == NFKC(u'\u0385\u03d3\u03d4')
+    u'\u1e9b\u1fc1\u1fcd\u1fce\u1fcf\u1fdd\u1fde\u1fdf\u1fed',
     ]
 
+
 # Destroy directory dirname and all files under it, to one level.
 def deltree(dirname):
     # Don't hide legitimate errors:  if one of these suckers exists, it's
@@ -25,43 +39,51 @@
             os.unlink(os.path.join(dirname, fname))
         os.rmdir(dirname)
 
+
 class UnicodeFileTests(unittest.TestCase):
-    files = [os.path.join(test_support.TESTFN, f) for f in filenames]
+    files = set(filenames)
+    normal_form = None
 
     def setUp(self):
         try:
             os.mkdir(test_support.TESTFN)
         except OSError:
             pass
+        files = set()
         for name in self.files:
+            name = os.path.join(test_support.TESTFN, self.norm(name))
             try:
                 f = open(name, 'w')
             except UnicodeEncodeError:
                 if not os.path.supports_unicode_filenames:
-                    raise unittest.SkipTest("only NT+ and systems with Unicode"
-                                            "-friendly filesystem encoding")
+                    self.skipTest("only NT+ and systems with Unicode-friendly"
+                                  "filesystem encoding")
             f.write((name+'\n').encode("utf-8"))
             f.close()
             os.stat(name)
+            files.add(name)
+        self.files = files
 
     def tearDown(self):
         deltree(test_support.TESTFN)
 
+    def norm(self, s):
+        if self.normal_form and isinstance(s, unicode):
+            return normalize(self.normal_form, s)
+        return s
+
     def _apply_failure(self, fn, filename, expected_exception,
                        check_fn_in_exception = True):
-        try:
+        with self.assertRaises(expected_exception) as c:
             fn(filename)
-            raise test_support.TestFailed("Expected to fail calling '%s(%r)'"
-                             % (fn.__name__, filename))
-        except expected_exception, details:
-            # the "filename" exception attribute may be encoded
-            if isinstance(details.filename, str):
-                filename = filename.encode(sys.getfilesystemencoding())
-            if check_fn_in_exception and details.filename != filename:
-                raise test_support.TestFailed("Function '%s(%r) failed with "
-                                 "bad filename in the exception: %r"
-                                 % (fn.__name__, filename,
-                                    details.filename))
+        exc_filename = c.exception.filename
+        # the "filename" exception attribute may be encoded
+        if isinstance(exc_filename, str):
+            filename = filename.encode(sys.getfilesystemencoding())
+        if check_fn_in_exception:
+            self.assertEqual(exc_filename, filename, "Function '%s(%r) failed "
+                             "with bad filename in the exception: %r" %
+                             (fn.__name__, filename, exc_filename))
 
     def test_failures(self):
         # Pass non-existing Unicode filenames all over the place.
@@ -82,39 +104,92 @@
             f.close()
             os.stat(name)
 
+    def test_normalize(self):
+        files = set(f for f in self.files if isinstance(f, unicode))
+        others = set()
+        for nf in set(['NFC', 'NFD', 'NFKC', 'NFKD']):
+            others |= set(normalize(nf, file) for file in files)
+        others -= files
+        if sys.platform == 'darwin':
+            files = set(normalize('NFD', file) for file in files)
+        for name in others:
+            if sys.platform == 'darwin' and normalize('NFD', name) in files:
+                # Mac OS X decomposes Unicode names, using Normal Form D.
+                # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html
+                os.stat(name)
+                continue
+            self._apply_failure(open, name, IOError)
+            self._apply_failure(os.stat, name, OSError)
+            self._apply_failure(os.chdir, name, OSError)
+            self._apply_failure(os.rmdir, name, OSError)
+            self._apply_failure(os.remove, name, OSError)
+            # listdir may append a wildcard to the filename, so dont check
+            self._apply_failure(os.listdir, name, OSError, False)
+
     def test_listdir(self):
+        sf0 = set(self.files)
         f1 = os.listdir(test_support.TESTFN)
         f2 = os.listdir(unicode(test_support.TESTFN,
                                 sys.getfilesystemencoding()))
-        sf2 = set(os.path.join(unicode(test_support.TESTFN), f)
-                  for f in f2)
-        self.assertEqual(len(f1), len(self.files))
-        self.assertEqual(sf2, set(self.files))
+        if sys.platform == 'darwin':
+            # Mac OS X returns canonically decomposed Unicode (Normal Form D)
+            # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html
+            sf0 = set(normalize('NFD', unicode(f)) for f in self.files)
+            f2 = [normalize('NFD', unicode(f)) for f in f2]
+        sf2 = set(os.path.join(unicode(test_support.TESTFN), f) for f in f2)
+        self.assertEqual(sf0, sf2)
+        self.assertEqual(len(f1), len(f2))
 
     def test_rename(self):
         for name in self.files:
-            os.rename(name,"tmp")
-            os.rename("tmp",name)
+            os.rename(name, "tmp")
+            os.rename("tmp", name)
 
     def test_directory(self):
-        dirname = os.path.join(test_support.TESTFN,u'Gr\xfc\xdf-\u66e8\u66e9\u66eb')
+        dirname = os.path.join(test_support.TESTFN,
+                               u'Gr\xfc\xdf-\u66e8\u66e9\u66eb')
         filename = u'\xdf-\u66e8\u66e9\u66eb'
         oldwd = os.getcwd()
         os.mkdir(dirname)
         os.chdir(dirname)
-        f = open(filename, 'w')
-        f.write((filename + '\n').encode("utf-8"))
-        f.close()
-        os.access(filename,os.R_OK)
-        os.remove(filename)
-        os.chdir(oldwd)
-        os.rmdir(dirname)
+        try:
+            with open(filename, 'w') as f:
+                f.write((filename + '\n').encode("utf-8"))
+            os.access(filename,os.R_OK)
+            os.remove(filename)
+        finally:
+            os.chdir(oldwd)
+            os.rmdir(dirname)
+
+
+class UnicodeNFCFileTests(UnicodeFileTests):
+    normal_form = 'NFC'
+
+
+class UnicodeNFDFileTests(UnicodeFileTests):
+    normal_form = 'NFD'
+
+
+class UnicodeNFKCFileTests(UnicodeFileTests):
+    normal_form = 'NFKC'
+
+
+class UnicodeNFKDFileTests(UnicodeFileTests):
+    normal_form = 'NFKD'
+
 
 def test_main():
     try:
-        test_support.run_unittest(UnicodeFileTests)
+        test_support.run_unittest(
+            UnicodeFileTests,
+            UnicodeNFCFileTests,
+            UnicodeNFDFileTests,
+            UnicodeNFKCFileTests,
+            UnicodeNFKDFileTests,
+        )
     finally:
         deltree(test_support.TESTFN)
 
+
 if __name__ == "__main__":
     test_main()
diff --git a/Misc/NEWS b/Misc/NEWS
index d8c18c8..c9c5989 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -98,6 +98,9 @@
 Tests
 -----
 
+- Issue #8180: Fix test_pep277 on OS X and add more tests for special Unicode
+  normalization cases.
+
 - Issue #7783: test.test_support.open_urlresource invalidates the outdated
   files from the local cache.
 
