srcanamdw/codescanner/pyinstaller/e2etests/win32/testMSOffice.py
changeset 1 22878952f6e2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srcanamdw/codescanner/pyinstaller/e2etests/win32/testMSOffice.py	Thu Feb 18 12:29:02 2010 +0530
@@ -0,0 +1,199 @@
+# Copyright (C) 2005, Giovanni Bajo
+# Based on previous work under copyright (c) 1999, 2002 McMillan Enterprises, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+# Test MSOffice
+#
+# Main purpose of test is to ensure that Dynamic COM objects
+# work as expected.
+
+# Assumes Word and Excel installed on your machine.
+
+import win32com, sys, string, win32api, traceback
+import win32com.client.dynamic
+from win32com.test.util import CheckClean
+import pythoncom
+from win32com.client import gencache
+from pywintypes import Unicode
+
+error = "MSOffice test error"
+
+# Test a few of the MSOffice components.
+def TestWord():
+	# Try and load the object exposed by Word 8
+	# Office 97 - _totally_ different object model!
+	try:
+		# NOTE - using "client.Dispatch" would return an msword8.py instance!
+		print "Starting Word 8 for dynamic test"
+		word = win32com.client.dynamic.Dispatch("Word.Application")
+		TestWord8(word)
+
+		word = None
+		# Now we will test Dispatch without the new "lazy" capabilities
+		print "Starting Word 8 for non-lazy dynamic test"
+		dispatch = win32com.client.dynamic._GetGoodDispatch("Word.Application")
+		typeinfo = dispatch.GetTypeInfo()
+		attr = typeinfo.GetTypeAttr()
+		olerepr = win32com.client.build.DispatchItem(typeinfo, attr, None, 0)
+		word = win32com.client.dynamic.CDispatch(dispatch, olerepr)
+		dispatch = typeinfo = attr = olerepr = None
+		TestWord8(word)
+
+	except pythoncom.com_error:
+		print "Starting Word 7 for dynamic test"
+		word = win32com.client.Dispatch("Word.Basic")
+		TestWord7(word)
+
+	try:
+		print "Starting MSWord for generated test"
+		# Typelib, lcid, major and minor for the typelib
+		try:
+			o = gencache.EnsureModule("{00020905-0000-0000-C000-000000000046}", 1033, 8, 0, bForDemand=1)
+		except TypeError:
+			o = gencache.EnsureModule("{00020905-0000-0000-C000-000000000046}", 1033, 8, 0)
+		if o is None :
+			raise ImportError, "Can not load the Word8 typelibrary."
+		word = win32com.client.Dispatch("Word.Application.8")
+		TestWord8(word)
+	except ImportError, details:
+		print "Can not test MSWord8 -", details
+
+def TestWord7(word):
+	word.FileNew()
+	# If not shown, show the app.
+	if not word.AppShow(): word._proc_("AppShow")
+
+	for i in xrange(12):
+		word.FormatFont(Color=i+1, Points=i+12)
+		word.Insert("Hello from Python %d\n" % i)
+
+	word.FileClose(2)
+
+def TestWord8(word):
+	word.Visible = 1
+	doc = word.Documents.Add()
+	wrange = doc.Range()
+	for i in range(10):
+		wrange.InsertAfter("Hello from Python %d\n" % i)
+	paras = doc.Paragraphs
+	for i in range(len(paras)):
+		paras[i]().Font.ColorIndex = i+1
+		paras[i]().Font.Size = 12 + (4 * i)
+	# XXX - note that
+	# for para in paras:
+	# 	para().Font...
+	# doesnt seem to work - no error, just doesnt work
+	# Should check if it works for VB!
+	doc.Close(SaveChanges = 0)
+	word.Quit()
+	win32api.Sleep(1000) # Wait for word to close, else we
+	# may get OA error.
+
+def TestWord8OldStyle():
+	try:
+		import win32com.test.Generated4Test.msword8
+	except ImportError:
+		print "Can not do old style test"
+
+
+def TextExcel(xl):
+	xl.Visible = 0
+	if xl.Visible: raise error, "Visible property is true."
+	xl.Visible = 1
+	if not xl.Visible: raise error, "Visible property not true."
+
+	if int(xl.Version[0])>=8:
+		xl.Workbooks.Add()
+	else:
+		xl.Workbooks().Add()
+
+
+	xl.Range("A1:C1").Value = (1,2,3)
+	xl.Range("A2:C2").Value = ('x','y','z')
+	xl.Range("A3:C3").Value = ('3','2','1')
+
+	for i in xrange(20):
+		xl.Cells(i+1,i+1).Value = "Hi %d" % i
+
+	if xl.Range("A1").Value <> "Hi 0":
+		raise error, "Single cell range failed"
+
+	if xl.Range("A1:B1").Value <> ((Unicode("Hi 0"),2),):
+		raise error, "flat-horizontal cell range failed"
+
+	if xl.Range("A1:A2").Value <> ((Unicode("Hi 0"),),(Unicode("x"),)):
+		raise error, "flat-vertical cell range failed"
+
+	if xl.Range("A1:C3").Value <> ((Unicode("Hi 0"),2,3),(Unicode("x"),Unicode("Hi 1"),Unicode("z")),(3,2,Unicode("Hi 2"))):
+		raise error, "square cell range failed"
+
+	xl.Range("A1:C3").Value =((3,2,1),("x","y","z"),(1,2,3))
+
+	if xl.Range("A1:C3").Value  <> ((3,2,1),(Unicode("x"),Unicode("y"),Unicode("z")),(1,2,3)):
+		raise error, "Range was not what I set it to!"
+
+	# test dates out with Excel
+	xl.Cells(5,1).Value = "Excel time"
+	xl.Cells(5,2).Formula = "=Now()"
+
+	import time
+	xl.Cells(6,1).Value = "Python time"
+	xl.Cells(6,2).Value = pythoncom.MakeTime(time.time())
+	xl.Cells(6,2).NumberFormat = "d/mm/yy h:mm"
+	xl.Columns("A:B").EntireColumn.AutoFit()
+
+	xl.Workbooks(1).Close(0)
+	xl.Quit()
+
+def TestAll():
+	try:
+		TestWord()
+
+		print "Starting Excel for Dynamic test..."
+		xl = win32com.client.dynamic.Dispatch("Excel.Application")
+		TextExcel(xl)
+
+		try:
+			print "Starting Excel 8 for generated excel8.py test..."
+			try:
+				mod = gencache.EnsureModule("{00020813-0000-0000-C000-000000000046}", 0, 1, 2, bForDemand=1)
+			except TypeError:
+				mod = gencache.EnsureModule("{00020813-0000-0000-C000-000000000046}", 0, 1, 2)
+			xl = win32com.client.Dispatch("Excel.Application")
+			TextExcel(xl)
+		except ImportError:
+			print "Could not import the generated Excel 97 wrapper"
+
+		try:
+			import xl5en32
+			mod = gencache.EnsureModule("{00020813-0000-0000-C000-000000000046}", 9, 1, 0)
+			xl = win32com.client.Dispatch("Excel.Application.5")
+			print "Starting Excel 95 for makepy test..."
+			TextExcel(xl)
+		except ImportError:
+			print "Could not import the generated Excel 95 wrapper"
+
+	except KeyboardInterrupt:
+		print "*** Interrupted MSOffice test ***"
+	except:
+		traceback.print_exc()
+
+if __name__=='__main__':
+	TestAll()
+	CheckClean()
+	pythoncom.CoUninitialize()
+