# -*- 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)