| Index: class-dump/src/Tests/doTests.py
|
| ===================================================================
|
| --- class-dump/src/Tests/doTests.py (revision 0)
|
| +++ class-dump/src/Tests/doTests.py (revision 0)
|
| @@ -0,0 +1,207 @@
|
| +#!/usr/bin/python
|
| +
|
| +from datetime import *
|
| +from subprocess import *
|
| +import glob
|
| +import os
|
| +import sys
|
| +import getopt
|
| +
|
| +TESTDIR = "/tmp/cdt"
|
| +TESTDIR_OLD = TESTDIR + "/old"
|
| +TESTDIR_NEW = TESTDIR + "/new"
|
| +TESTDIR_NEW_32 = TESTDIR + "/new32"
|
| +TESTDIR_NEW_64 = TESTDIR + "/new64"
|
| +
|
| +OLD_CD = os.path.expanduser("~/Unix/bin/class-dump-3.3.2")
|
| +#OLD_CD = "/bin/echo"
|
| +NEW_CD = os.path.expanduser("/Local/nygard/Products/Debug/class-dump")
|
| +
|
| +# Must be a version that supports --list-arches
|
| +ARCH_CD = os.path.expanduser("/Local/nygard/Products/Debug/class-dump")
|
| +
|
| +mac_frameworks = [
|
| + "/System/Library/Frameworks/*.framework",
|
| + "/System/Library/PrivateFrameworks/*.framework",
|
| + "/Developer/Library/Frameworks/*.framework",
|
| + "/Developer/Library/PrivateFrameworks/*.framework",
|
| +]
|
| +
|
| +mac_apps = [
|
| + "/Applications/*.app",
|
| + "/Applications/*/*.app",
|
| + "/Applications/Utilities/*.app",
|
| + "/Developer/Applications/*.app",
|
| + "/Developer/Applications/*/*.app",
|
| + "~/Applications/*.app",
|
| + "/System/Library/CoreServices/*.app",
|
| +]
|
| +
|
| +mac_bundles = [
|
| + "/System/Library/CoreServices/*.bundle",
|
| +]
|
| +
|
| +#mac_testapps = [
|
| +# "/Volumes/BigData/TestApplications/*.app",
|
| +#]
|
| +
|
| +def resolve_sdk_root_alias(sdk_root="4.0"):
|
| + if sdk_root in ("3.2", "4.0", "4.1", ):
|
| + return "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS" + sdk_root + ".sdk"
|
| + return sdk_root
|
| +
|
| +def build_ios_paths(sdk_root):
|
| + iphone_frameworks = [
|
| + sdk_root + "/System/Library/Frameworks/*.framework",
|
| + sdk_root + "/System/Library/PrivateFrameworks/*.framework",
|
| + ]
|
| + iphone_apps = []
|
| + iphone_bundles = []
|
| + return dict(apps=iphone_apps, frameworks=iphone_frameworks, bundles=iphone_bundles)
|
| +
|
| +def mkdir_ignore(dir):
|
| + try:
|
| + os.mkdir(dir)
|
| + except OSError as e:
|
| + pass
|
| +
|
| +def printUsage():
|
| + print "doTests.py [--ios] [--sdk-root <path, 4.1, 4.0 or 3.2>]"
|
| + print
|
| +
|
| +def main(argv):
|
| + try:
|
| + opts, args = getopt.getopt(argv, "", ["sdk-root=", "ios"])
|
| + except getopt.GetoptError:
|
| + printUsage()
|
| + sys.exit(2)
|
| +
|
| + shouldTestIOs = False
|
| + sdk_root = None
|
| +
|
| + for opt, arg in opts:
|
| + if opt in ("--ios",):
|
| + shouldTestIOs = True
|
| + if opt in ("--sdk-root",):
|
| + sdk_root = arg
|
| +
|
| + sdk_root = resolve_sdk_root_alias(sdk_root)
|
| +
|
| + if shouldTestIOs:
|
| + print "Testing on iOS targets"
|
| + sdict = build_ios_paths(sdk_root)
|
| + OLD_OPTS = []
|
| + NEW_OPTS = ["--sdk-root", sdk_root]
|
| + else:
|
| + print "Testing on Mac OS X targets"
|
| + if sdk_root:
|
| + print "Ignoring --sdk-root for macosx testing"
|
| + sdict = dict(apps=mac_apps, frameworks=mac_frameworks, bundles=mac_bundles)
|
| + OLD_OPTS = []
|
| + NEW_OPTS = []
|
| +
|
| + print "Starting tests at", datetime.today().ctime()
|
| + print
|
| + print "Old class-dump:", " ".join(Popen("ls -al " + OLD_CD, shell=True, stdout=PIPE).stdout.readlines()),
|
| + print "New class-dump:", " ".join(Popen("ls -al " + NEW_CD, shell=True, stdout=PIPE).stdout.readlines()),
|
| +
|
| + apps = []
|
| + frameworks = []
|
| + bundles = []
|
| +
|
| + for pattern in sdict["apps"]:
|
| + apps.extend(glob.glob(pattern))
|
| + for pattern in sdict["frameworks"]:
|
| + frameworks.extend(glob.glob(pattern))
|
| + for pattern in sdict["bundles"]:
|
| + bundles.extend(glob.glob(pattern))
|
| +
|
| + print " Framework count:", len(frameworks)
|
| + print "Application count:", len(apps)
|
| + print " Bundle count:", len(bundles)
|
| + print " Total:", len(frameworks) + len(apps) + len(bundles)
|
| +
|
| + mkdir_ignore(TESTDIR)
|
| + mkdir_ignore(TESTDIR_OLD)
|
| + mkdir_ignore(TESTDIR_NEW)
|
| +
|
| + all = []
|
| + all.extend(frameworks)
|
| + all.extend(apps)
|
| + all.extend(bundles)
|
| +
|
| + for path in all:
|
| + (base, ext) = os.path.splitext(os.path.basename(path))
|
| + ext = ext.lstrip(".")
|
| + print base, ext
|
| + proc = Popen([ARCH_CD, "--list-arches", path], shell=False, stdout=PIPE)
|
| + arches = proc.stdout.readline().rstrip().split(" ")
|
| + print arches
|
| + proc.stdout.readlines()
|
| + for arch in arches:
|
| + if arch == "none":
|
| + command = [OLD_CD, "-s", "-t", path]
|
| + command.extend(OLD_OPTS)
|
| + #print command
|
| + out = open("%s/%s-%s.txt" % (TESTDIR_OLD, base, ext), "w");
|
| + Popen(command, shell=False, stdout=out, stderr=out)
|
| + out.close()
|
| +
|
| + command = [NEW_CD, "-s", "-t", path]
|
| + command.extend(NEW_OPTS)
|
| + #print command
|
| + out = open("%s/%s-%s.txt" % (TESTDIR_NEW, base, ext), "w");
|
| + Popen(command, shell=False, stdout=out, stderr=out)
|
| + out.close()
|
| + else:
|
| + print arch
|
| +
|
| + command = [OLD_CD, "-s", "-t", "--arch", arch, path]
|
| + command.extend(OLD_OPTS)
|
| + #print command
|
| + out = open("%s/%s-%s-%s.txt" % (TESTDIR_OLD, base, arch, ext), "w");
|
| + Popen(command, shell=False, stdout=out, stderr=out)
|
| + out.close()
|
| +
|
| + command = [NEW_CD, "-s", "-t", "--arch", arch, path]
|
| + command.extend(NEW_OPTS)
|
| + #print command
|
| + out = open("%s/%s-%s-%s.txt" % (TESTDIR_NEW, base, arch, ext), "w");
|
| + Popen(command, shell=False, stdout=out, stderr=out)
|
| + out.close()
|
| +
|
| + print "Ended tests at", datetime.today().ctime()
|
| + Popen("opendiff %s %s" % (TESTDIR_OLD, TESTDIR_NEW), shell=True)
|
| +
|
| +#----------------------------------------------------------------------
|
| +#
|
| +## arch = none check for FWAVCPrivate.framework, KAdminClient, Kernel, SyndicationUI
|
| +#
|
| +## We can remove files that don't contain Objective-C runtime information.
|
| +## Need to jump through some hoops because of the cursed spaces in filenames, grr.
|
| +#foreach i (/tmp/cdt/{old,new}/*.txt)
|
| +# grep -q "This file does not contain" $i
|
| +# if [ $? -eq 0 ]; then
|
| +# rm $i
|
| +# fi
|
| +#end
|
| +#
|
| +### Set up comparisons of new 32-bit vs. 64-bit output
|
| +##foreach arch (ppc ppc7400 i386) do
|
| +## foreach i ($TESTDIR_NEW/*-$arch-*) do
|
| +## ln -s $i $TESTDIR_NEW_32
|
| +## done
|
| +##done
|
| +##
|
| +##foreach arch (ppc64 x86_64) do
|
| +## foreach i ($TESTDIR_NEW/*-$arch-*) do
|
| +## ln -s $i $TESTDIR_NEW_64
|
| +## done
|
| +##done
|
| +#
|
| +#echo "Ended tests at `date`"
|
| +#opendiff /tmp/cdt/old /tmp/cdt/new
|
| +#
|
| +
|
| +if __name__ == "__main__":
|
| + main(sys.argv[1:])
|
|
|
| Property changes on: class-dump/src/Tests/doTests.py
|
| ___________________________________________________________________
|
| Added: svn:executable
|
| + *
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|