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