sbsv2/raptor/test/smoke_suite/longfilenames.py
changeset 3 e1eecf4d390d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/longfilenames.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,129 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import os
+import re
+import sys
+
+def run():
+	# Content for files to be generated.
+	cpp = "longerfilenamethanyoumightnormallyexpecttobepresent"
+	path = "/test/smoke_suite/test_resources/longfilenames/"
+	targetinfo = """TARGET			longfilenames.exe
+TARGETTYPE		exe
+UID				0xE8000047
+LIBRARY			euser.lib
+SYSTEMINCLUDE	/epoc32/include
+"""
+	
+	# Some numbers for path and file operations
+	length_limit = 245 # Safety-margin of 10 chars for changing dir structures in Raptor
+	extLen = 8 # eg. _001.o.d
+	numLen = 43 # release directory length (c_0000000000000000/longfilenames_exe/winscw/urel/) (minus a few as a safety-margin)
+	pathmultiplier = 5	# expand cpp to the maximum length
+	mmpStart = 1
+	mmpStop = 270
+	cppStart = 1
+	cppStop = 270
+
+
+	# Find SBS_Home and its length as a string
+	sbsHome = os.environ["SBS_HOME"]
+	sbsLen = len(sbsHome)
+	
+	# Work out path lengths required
+	dirname = sbsHome + path
+	string = cpp * pathmultiplier
+	dirlen = len(dirname)
+	fileLen = length_limit - dirlen - numLen - extLen
+	if fileLen < 0:
+		print "Error: Your test path is too long for the longfilenames test to work"
+		sys.exit()
+	fileName = string[0:fileLen]
+
+	# Generate the mmp file using the mmp string
+	f = open(dirname + 'longfilenames.mmp', 'w')
+	f.writelines(targetinfo)
+	f.writelines("\nSOURCE		" + cpp + ".cpp\n")
+	while mmpStart <= mmpStop:
+		sourceinfo = "SOURCE		" + fileName + '_%03d' %mmpStart + ".cpp " + '\n'
+		f.writelines(sourceinfo)
+		mmpStart += 1
+	f.close()
+
+	# File generating utility
+	while cppStart <= cppStop:
+		t = str(cppStart)
+		filename = dirname + fileName + '_%03d' %cppStart + '.cpp'
+		content = 'int x' + t + ' = 1;'
+		f = open (filename, 'w')
+		f.write (content)
+		f.close()
+		cppStart += 1
+
+
+	t = SmokeTest()
+	t.id = "79"
+	t.name = "longfilenames"
+	t.command = "sbs -b smoke_suite/test_resources/longfilenames/bld.inf -c winscw"
+	t.description = """Ensure that winscw links with large amounts of object files with long names are buildable.
+		Note that the link in the build of this component should always be greater than 16500 chars, regardless
+		of environment - we know such calls are currently problematic on Windows with GNU Make and Cygwin's
+		Bash unless a linker response file is not used to hold the object files."""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/urel/longfilenames.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/longfilenames.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/longfilenames/bld.inf', [
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.dep",
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.o",
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.o.d",
+		"longfilenames_exe/winscw/urel/longfilenames.UID.CPP",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.dep",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.o",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.o.d",
+		"longfilenames_exe/winscw/urel/longfilenames_urel_objects.lrf"]
+		)
+	
+	basefilename = "longfilenames_exe/winscw/urel/" + fileName + "_%03d.%s"
+	for i in range(1, 271):		
+		t.addbuildtargets('smoke_suite/test_resources/longfilenames/bld.inf', [
+			basefilename % (i, "dep"),
+			basefilename % (i, "o"),
+			basefilename % (i, "o.d")
+			]
+		)
+
+	t.run()
+		
+	# Remove all created files
+	
+	# Matches longerfilena......_nnn.cpp
+	cpp_regex = re.compile("^.+_\d{3}.cpp$", re.I)
+	for file in os.listdir(dirname):
+		if cpp_regex.match(file) is not None:
+			try:
+				os.remove(dirname + file)
+			except:
+				pass
+	
+	try:
+		os.remove(dirname + 'longfilenames.mmp')
+	except:
+		pass
+	
+	return t