diff --git a/Mac/Lib/test/ttedit.py b/Mac/Lib/test/ttedit.py
deleted file mode 100644
index a4cd774..0000000
--- a/Mac/Lib/test/ttedit.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Test TE module.
-# Draw a window in which the user can type.
-#
-# This test expects Win, Evt and FrameWork (and anything used by those)
-# to work.
-#
-# Actually, it is more a test of FrameWork by now....
-
-from FrameWork import *
-import Win
-import Qd
-import TE
-import os
-
-class TEWindow(Window):
-	def open(self, name):
-		r = (40, 40, 400, 300)
-		w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555)
-		r2 = (0, 0, 345, 245)
-		Qd.SetPort(w)
-		self.ted = TE.TENew(r2, r2)
-		self.ted.TEAutoView(1)
-		w.DrawGrowIcon()
-		self.wid = w
-		self.do_postopen()
-		
-	def do_idle(self):
-		self.ted.TEIdle()
-		
-	def do_activate(self, onoff, evt):
-		if onoff:
-			self.ted.TEActivate()
-		else:
-			self.ted.TEDeactivate()
-
-	def do_update(self, wid, event):
-		Qd.EraseRect(wid.GetWindowPort().portRect)
-		self.ted.TEUpdate(wid.GetWindowPort().portRect)
-		
-	def do_contentclick(self, local, modifiers, evt):
-		shifted = (modifiers & 0x200)
-		self.ted.TEClick(local, shifted)
-
-	def do_char(self, ch, event):
-		self.ted.TEKey(ord(ch))
-
-class TestList(Application):
-	def __init__(self):
-		Application.__init__(self)
-		self.num = 0
-		self.listoflists = []
-		
-	def makeusermenus(self):
-		self.filemenu = m = Menu(self.menubar, "File")
-		self.newitem = MenuItem(m, "New window...", "O", self.open)
-		self.quititem = MenuItem(m, "Quit", "Q", self.quit)
-	
-	def open(self, *args):
-		w = TEWindow(self)
-		w.open('Window %d'%self.num)
-		self.num = self.num + 1
-		self.listoflists.append(w)
-		
-	def quit(self, *args):
-		raise self
-
-	def do_about(self, id, item, window, event):
-		EasyDialogs.Message("""Test the TextEdit interface.
-		Simple window in which you can type""")
-		
-	def do_idle(self, *args):
-		for l in self.listoflists:
-			l.do_idle()
-
-def main():
-	App = TestList()
-	App.mainloop()
-	
-if __name__ == '__main__':
-	main()
-	
