1 # -*- coding: utf-8 -*-
5 from fnmatch import fnmatch
11 # filename -> [case name]
12 def readCaseList (filename):
13 f = open(filename, 'rb')
16 if line[0:6] == "TEST: ":
17 cases.append(line[6:].strip())
21 # filename -> [(filter, min, recommended)]
22 def readResolutionList (filename):
23 f = open(filename, 'rb')
27 params = line.split('\t')
29 resList.append((params[0], params[1], params[2]))
30 elif len(params) != 0:
31 fail("Invalid line in resolution list: '%s'" % line)
35 def getMatchingCases (cases, pattern):
38 if fnmatch(case, pattern):
42 def isResolutionOk (res):
43 return re.match('^[1-9][0-9]*x[1-9][0-9]*$', res) != None
45 if __name__ == "__main__":
46 if len(sys.argv) != 3:
47 print "%s: [caselist] [resolution list]" % sys.argv[0]
50 caseList = readCaseList(sys.argv[1])
51 resList = readResolutionList(sys.argv[2])
53 # Pass 1: sanity check for resolution values
54 for pattern, minRes, recRes in resList:
55 if not isResolutionOk(minRes) or not isResolutionOk(recRes):
56 fail("Invalid resolution: '%s %s %s'" % (pattern, minRes, recRes))
58 # Pass 2: check that each case is specified by one rule
60 for pattern, minRes, recRes in resList:
61 matchingCases = getMatchingCases(caseList, pattern)
63 if len(matchingCases) == 0:
64 fail("Pattern '%s' does not match any cases" % pattern)
66 for case in matchingCases:
67 if case in markedCases:
68 fail("Case '%s' specified multiple times (when processing '%s')" % (case, pattern))
72 if not case in markedCases:
73 fail("Case '%s' not specified by any rule" % case)