diff --git a/Lib/plat-mac/aepack.py b/Lib/plat-mac/aepack.py
index 6797473..bfe539a 100644
--- a/Lib/plat-mac/aepack.py
+++ b/Lib/plat-mac/aepack.py
@@ -343,43 +343,3 @@
 	if classtype:
 		newobj.__class__ = classtype
 	return newobj
-
-def _test():
-	"""Test program. Pack and unpack various things"""
-	objs = [
-		'a string',
-		12,
-		12.0,
-		None,
-		['a', 'list', 'of', 'strings'],
-		{'key1': 'value1', 'key2':'value2'},
-		Carbon.File.FSSpec(os.curdir),
-		Carbon.File.FSSpec(os.curdir).NewAliasMinimal(),
-		aetypes.Enum('enum'),
-		aetypes.Type('type'),
-		aetypes.Keyword('kwrd'),
-		aetypes.Range(1, 10),
-		aetypes.Comparison(1, '<   ', 10),
-		aetypes.Logical('not ', 1),
-		# Cannot do StyledText
-		# Cannot do AEText
-		aetypes.IntlText(0, 0, 'international text'),
-		aetypes.IntlWritingCode(0,0),
-		aetypes.QDPoint(50,100),
-		aetypes.QDRectangle(50,100,150,200),
-		aetypes.RGBColor(0x7000, 0x6000, 0x5000),
-		aetypes.Unknown('xxxx', 'unknown type data'),
-		aetypes.Character(1),
-		aetypes.Character(2, aetypes.Line(2)),
-	]
-	for o in objs:
-		print 'BEFORE', o, `o`
-		packed = pack(o)
-		unpacked = unpack(packed)
-		print 'AFTER ', unpacked, `unpacked`
-	import sys
-	sys.exit(1)
-	
-if __name__ == '__main__':
-	_test()
-	
diff --git a/Lib/test/test_aepack.py b/Lib/test/test_aepack.py
new file mode 100755
index 0000000..70b89de
--- /dev/null
+++ b/Lib/test/test_aepack.py
@@ -0,0 +1,84 @@
+# Copyright (C) 2003 Python Software Foundation
+
+import unittest
+import aepack
+import aetypes
+import os
+from test import test_support
+
+class TestAepack(unittest.TestCase):
+    OBJECTS = [
+        aetypes.Enum('enum'),
+        aetypes.Type('type'),
+        aetypes.Keyword('kwrd'),
+        aetypes.Range(1, 10),
+        aetypes.Comparison(1, '<   ', 10),
+        aetypes.Logical('not ', 1),
+        aetypes.IntlText(0, 0, 'international text'),
+        aetypes.IntlWritingCode(0,0),
+        aetypes.QDPoint(50,100),
+        aetypes.QDRectangle(50,100,150,200),
+        aetypes.RGBColor(0x7000, 0x6000, 0x5000),
+        aetypes.Unknown('xxxx', 'unknown type data'),
+        aetypes.Character(1),
+        aetypes.Character(2, aetypes.Line(2)),
+    ]
+
+    def test_roundtrip_string(self):
+        o = 'a string'
+        packed = aepack.pack(o)
+        unpacked = aepack.unpack(packed)
+        self.assertEqual(o, unpacked)
+
+    def test_roundtrip_int(self):
+        o = 12
+        packed = aepack.pack(o)
+        unpacked = aepack.unpack(packed)
+        self.assertEqual(o, unpacked)
+
+    def test_roundtrip_float(self):
+        o = 12.1
+        packed = aepack.pack(o)
+        unpacked = aepack.unpack(packed)
+        self.assertEqual(o, unpacked)
+
+    def test_roundtrip_None(self):
+        o = None
+        packed = aepack.pack(o)
+        unpacked = aepack.unpack(packed)
+        self.assertEqual(o, unpacked)
+
+    def test_roundtrip_aeobjects(self):
+        for o in self.OBJECTS:
+            packed = aepack.pack(o)
+            unpacked = aepack.unpack(packed)
+            self.assertEqual(repr(o), repr(unpacked))
+            
+    def test_roundtrip_FSSpec(self):
+        try:
+            import Carbon.File
+        except:
+            return
+        o = Carbon.File.FSSpec(os.curdir)
+        packed = aepack.pack(o)
+        unpacked = aepack.unpack(packed)
+        self.assertEqual(o.as_pathname(), unpacked.as_pathname())
+
+    def test_roundtrip_Alias(self):
+        try:
+            import Carbon.File
+        except:
+            return
+        o = Carbon.File.FSSpec(os.curdir).NewAliasMinimal()
+        packed = aepack.pack(o)
+        unpacked = aepack.unpack(packed)
+        self.assertEqual(o.FSResolveAlias(None)[0].as_pathname(), 
+            unpacked.FSResolveAlias(None)[0].as_pathname())
+    
+
+def test_main():
+    test_support.run_unittest(TestAepack)
+
+
+if __name__ == '__main__':
+    test_main()
