1# -*- coding: utf-8 -*- 2 3#------------------------------------------------------------------------- 4# drawElements Quality Program utilities 5# -------------------------------------- 6# 7# Copyright 2015 The Android Open Source Project 8# 9# Licensed under the Apache License, Version 2.0 (the "License"); 10# you may not use this file except in compliance with the License. 11# You may obtain a copy of the License at 12# 13# http://www.apache.org/licenses/LICENSE-2.0 14# 15# Unless required by applicable law or agreed to in writing, software 16# distributed under the License is distributed on an "AS IS" BASIS, 17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18# See the License for the specific language governing permissions and 19# limitations under the License. 20# 21#------------------------------------------------------------------------- 22 23import re 24import sys 25from fnmatch import fnmatch 26 27def fail (msg): 28 print "ERROR: " + msg 29 sys.exit(-1) 30 31# filename -> [case name] 32def readCaseList (filename): 33 f = open(filename, 'rb') 34 cases = [] 35 for line in f: 36 if line[0:6] == "TEST: ": 37 cases.append(line[6:].strip()) 38 f.close() 39 return cases 40 41# filename -> [(filter, min, recommended)] 42def readResolutionList (filename): 43 f = open(filename, 'rb') 44 resList = [] 45 for line in f: 46 line = line.strip() 47 params = line.split('\t') 48 if len(params) == 3: 49 resList.append((params[0], params[1], params[2])) 50 elif len(params) != 0: 51 fail("Invalid line in resolution list: '%s'" % line) 52 f.close() 53 return resList 54 55def getMatchingCases (cases, pattern): 56 matching = [] 57 for case in cases: 58 if fnmatch(case, pattern): 59 matching.append(case) 60 return matching 61 62def isResolutionOk (res): 63 return re.match('^[1-9][0-9]*x[1-9][0-9]*$', res) != None 64 65if __name__ == "__main__": 66 if len(sys.argv) != 3: 67 print "%s: [caselist] [resolution list]" % sys.argv[0] 68 sys.exit(-1) 69 70 caseList = readCaseList(sys.argv[1]) 71 resList = readResolutionList(sys.argv[2]) 72 73 # Pass 1: sanity check for resolution values 74 for pattern, minRes, recRes in resList: 75 if not isResolutionOk(minRes) or not isResolutionOk(recRes): 76 fail("Invalid resolution: '%s %s %s'" % (pattern, minRes, recRes)) 77 78 # Pass 2: check that each case is specified by one rule 79 markedCases = set() 80 for pattern, minRes, recRes in resList: 81 matchingCases = getMatchingCases(caseList, pattern) 82 83 if len(matchingCases) == 0: 84 fail("Pattern '%s' does not match any cases" % pattern) 85 86 for case in matchingCases: 87 if case in markedCases: 88 fail("Case '%s' specified multiple times (when processing '%s')" % (case, pattern)) 89 markedCases.add(case) 90 91 for case in caseList: 92 if not case in markedCases: 93 fail("Case '%s' not specified by any rule" % case) 94