133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Copyright 2012 the V8 project authors. All rights reserved. 233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Redistribution and use in source and binary forms, with or without 333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# modification, are permitted provided that the following conditions are 433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# met: 533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# 633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Redistributions of source code must retain the above copyright 733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# notice, this list of conditions and the following disclaimer. 833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Redistributions in binary form must reproduce the above 933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# copyright notice, this list of conditions and the following 1033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# disclaimer in the documentation and/or other materials provided 1133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# with the distribution. 1233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Neither the name of Google Inc. nor the names of its 1333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# contributors may be used to endorse or promote products derived 1433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# from this software without specific prior written permission. 1533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# 1633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 2833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 2933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# These outcomes can occur in a TestCase's outcomes list: 3033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgSKIP = "SKIP" 3133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgFAIL = "FAIL" 3233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgPASS = "PASS" 3333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgOKAY = "OKAY" 3433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgTIMEOUT = "TIMEOUT" 3533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgCRASH = "CRASH" 3633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgSLOW = "SLOW" 37594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgFLAKY = "FLAKY" 38690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgNO_VARIANTS = "NO_VARIANTS" 3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# These are just for the status files and are mapped below in DEFS: 4033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgFAIL_OK = "FAIL_OK" 4133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgPASS_OR_FAIL = "PASS_OR_FAIL" 4233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgALWAYS = "ALWAYS" 4433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgKEYWORDS = {} 46594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgfor key in [SKIP, FAIL, PASS, OKAY, TIMEOUT, CRASH, SLOW, FLAKY, FAIL_OK, 47690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org NO_VARIANTS, PASS_OR_FAIL, ALWAYS]: 4833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org KEYWORDS[key] = key 4933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 5033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgDEFS = {FAIL_OK: [FAIL, OKAY], 5133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org PASS_OR_FAIL: [PASS, FAIL]} 5233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 5333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Support arches, modes to be written as keywords instead of strings. 5433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgVARIABLES = {ALWAYS: True} 55864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.orgfor var in ["debug", "release", "android_arm", "android_arm64", "android_ia32", "android_x87", 5612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org "arm", "arm64", "ia32", "mips", "mipsel", "mips64el", "x64", "x87", "nacl_ia32", 57731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org "nacl_x64", "macos", "windows", "linux"]: 5833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org VARIABLES[var] = var 5933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 6033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 6133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef DoSkip(outcomes): 6237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org return SKIP in outcomes 6337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org 6437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org 6537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgdef IsSlow(outcomes): 6637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org return SLOW in outcomes 6733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 6833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 69690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgdef OnlyStandardVariant(outcomes): 70690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org return NO_VARIANTS in outcomes 71690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 72690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org 7333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef IsFlaky(outcomes): 74594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org return FLAKY in outcomes 75594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 76594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 77594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgdef IsPassOrFail(outcomes): 7833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return ((PASS in outcomes) and (FAIL in outcomes) and 7933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org (not CRASH in outcomes) and (not OKAY in outcomes)) 8033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef IsFailOk(outcomes): 8333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return (FAIL in outcomes) and (OKAY in outcomes) 8433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef _AddOutcome(result, new): 8733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org global DEFS 8833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if new in DEFS: 8933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org mapped = DEFS[new] 9033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if type(mapped) == list: 9133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for m in mapped: 9233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org _AddOutcome(result, m) 9333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org elif type(mapped) == str: 9433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org _AddOutcome(result, mapped) 9533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 9633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add(new) 9733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 9833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 9933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef _ParseOutcomeList(rule, outcomes, target_dict, variables): 10033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result = set([]) 10133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if type(outcomes) == str: 10233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org outcomes = [outcomes] 10333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for item in outcomes: 10433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if type(item) == str: 10533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org _AddOutcome(result, item) 10633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org elif type(item) == list: 10733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not eval(item[0], variables): continue 10833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for outcome in item[1:]: 10933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org assert type(outcome) == str 11033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org _AddOutcome(result, outcome) 11133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 11233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org assert False 11333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if len(result) == 0: return 11433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if rule in target_dict: 11533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org target_dict[rule] |= result 11633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 11733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org target_dict[rule] = result 11833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 11933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 12033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef ReadStatusFile(path, variables): 12133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org with open(path) as f: 12233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org global KEYWORDS 12333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org contents = eval(f.read(), KEYWORDS) 12433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 12533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org rules = {} 12633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org wildcards = {} 12733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org variables.update(VARIABLES) 12833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for section in contents: 12933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org assert type(section) == list 13033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org assert len(section) == 2 13133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not eval(section[0], variables): continue 13233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org section = section[1] 13333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org assert type(section) == dict 13433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for rule in section: 13533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org assert type(rule) == str 13633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if rule[-1] == '*': 13733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org _ParseOutcomeList(rule, section[rule], wildcards, variables) 13833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 13933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org _ParseOutcomeList(rule, section[rule], rules, variables) 14033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return rules, wildcards 141