# -*- coding: utf-8 -*- #------------------------------------------------------------------------- # drawElements Quality Program utilities # -------------------------------------- # # Copyright 2015 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #------------------------------------------------------------------------- import re import sys from fnmatch import fnmatch def fail (msg): print("ERROR: " + msg) sys.exit(-1) # filename -> [case name] def readCaseList (filename): f = open(filename, 'rb') cases = [] for line in f: if line[0:6] == "TEST: ": cases.append(line[6:].strip()) f.close() return cases # filename -> [(filter, min, recommended)] def readResolutionList (filename): f = open(filename, 'rb') resList = [] for line in f: line = line.strip() params = line.split('\t') if len(params) == 3: resList.append((params[0], params[1], params[2])) elif len(params) != 0: fail("Invalid line in resolution list: '%s'" % line) f.close() return resList def getMatchingCases (cases, pattern): matching = [] for case in cases: if fnmatch(case, pattern): matching.append(case) return matching def isResolutionOk (res): return re.match('^[1-9][0-9]*x[1-9][0-9]*$', res) != None if __name__ == "__main__": if len(sys.argv) != 3: print("%s: [caselist] [resolution list]" % sys.argv[0]) sys.exit(-1) caseList = readCaseList(sys.argv[1]) resList = readResolutionList(sys.argv[2]) # Pass 1: sanity check for resolution values for pattern, minRes, recRes in resList: if not isResolutionOk(minRes) or not isResolutionOk(recRes): fail("Invalid resolution: '%s %s %s'" % (pattern, minRes, recRes)) # Pass 2: check that each case is specified by one rule markedCases = set() for pattern, minRes, recRes in resList: matchingCases = getMatchingCases(caseList, pattern) if len(matchingCases) == 0: fail("Pattern '%s' does not match any cases" % pattern) for case in matchingCases: if case in markedCases: fail("Case '%s' specified multiple times (when processing '%s')" % (case, pattern)) markedCases.add(case) for case in caseList: if not case in markedCases: fail("Case '%s' not specified by any rule" % case)