blob: 195d258202c09060cf4da18c5680924faeb6f129 [file] [log] [blame]
# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
'''This module implements the StoryExpectations class which is a wrapper
around typ's expectations_parser module.
Example:
expectations = typ_expectations.StoryExpectations(benchmark1)
expectations.GetBenchmarkExpectationsFromParser(file_content)
disabled_benchmark = expectations.IsBenchmarkDisabled()
disabled_story = expectations.IsStoryDisabled('story1')
'''
from __future__ import absolute_import
from typ import expectations_parser
from typ import json_results
ResultType = json_results.ResultType
# TODO(crbug.com/999335): This set includes all the legal tags that can be
# used in expectations.config. We will add a presubmit check which will make
# sure that the set of tags below and set of all the tags used in
# expectations.config stay in sync.
SYSTEM_CONDITION_TAGS = frozenset([
'android', 'android-go', 'android-low-end', 'android-nexus-5',
'android-nexus-5x', 'android-nexus-6', 'android-pixel-2', 'android-pixel-4',
'chromeos', 'chromeos-board-amd64-generic', 'chromeos-board-betty',
'chromeos-board-betty-pi-arc', 'chromeos-board-eve', 'chromeos-board-kevin',
'chromeos-local', 'chromeos-remote', 'desktop', 'fuchsia',
'fuchsia-board-astro', 'fuchsia-board-qemu-x64', 'fuchsia-board-sherlock',
'linux', 'mac', 'mac-10.12', 'mac-10.13', 'win', 'win10', 'win7',
'android-not-webview', 'android-webview', 'mobile', 'android-marshmallow',
'android-lollipop', 'android-nougat', 'android-oreo', 'android-pie',
'android-10', 'android-webview-google', 'reference', 'android-chromium',
'ubuntu', 'android-kitkat', 'highsierra', 'sierra', 'smart-display',
'web-engine-shell', 'mac-10.11', 'release', 'exact', 'debug',
'android-weblayer', 'win-laptop', 'android-pixel-4a'
])
class StoryExpectations(object):
def __init__(self, benchmark_name):
self._tags = []
self._benchmark_name = benchmark_name
self._typ_expectations = (
expectations_parser.TestExpectations())
def GetBenchmarkExpectationsFromParser(self, raw_data):
error, message = self._typ_expectations.parse_tagged_list(raw_data)
assert not error, 'Expectations parser error: %s' % message
def SetTags(self, tags):
self._typ_expectations.set_tags(tags)
def _IsStoryOrBenchmarkDisabled(self, story_name):
exp = self._typ_expectations.expectations_for(story_name)
expected_results, reasons = exp.results, exp.reason
if ResultType.Skip in expected_results:
return reasons if reasons else 'No reason given'
return ''
def IsBenchmarkDisabled(self):
return self._IsStoryOrBenchmarkDisabled(self._benchmark_name + '/')
def IsStoryDisabled(self, story):
return self._IsStoryOrBenchmarkDisabled(
self._benchmark_name + '/' + story.name)