# Copyright 2023 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import datetime as dt import unittest from crossbench.benchmarks.base import PressBenchmarkStoryFilter from crossbench.runner.run import Run from crossbench.stories.press_benchmark import PressBenchmarkStory from tests import test_helper class MockStory(PressBenchmarkStory): NAME = "MockStory" URL = "http://test.com" SUBSTORIES = ( "Story-1", "Story-2", "Story-3", "Story-4", ) @property def substory_duration(self) -> dt.timedelta: return dt.timedelta(seconds=0.1) def run(self, run: Run) -> None: pass class PressBenchmarkStoryFilterTestCase(unittest.TestCase): def test_empty(self): with self.assertRaises(ValueError): _ = PressBenchmarkStoryFilter(MockStory, []) def test_all(self): stories = PressBenchmarkStoryFilter(MockStory, ["all"]).stories self.assertEqual(len(stories), 1) story: MockStory = stories[0] self.assertSequenceEqual(story.substories, MockStory.SUBSTORIES) def test_all_separate(self): stories = PressBenchmarkStoryFilter( MockStory, ["all"], separate=True).stories self.assertSequenceEqual([story.substories[0] for story in stories], MockStory.SUBSTORIES) for story in stories: self.assertTrue(len(story.substories), 1) def test_match_regexp_none(self): with self.assertRaises(ValueError) as cm: _ = PressBenchmarkStoryFilter(MockStory, ["Story"]).stories self.assertIn("Story", str(cm.exception)) def test_match_regexp_some(self): stories = PressBenchmarkStoryFilter(MockStory, [".*-3"]).stories self.assertEqual(len(stories), 1) story: MockStory = stories[0] self.assertSequenceEqual(story.substories, ["Story-3"]) def test_match_regexp_all(self): stories = PressBenchmarkStoryFilter(MockStory, ["Story.*"]).stories self.assertEqual(len(stories), 1) story: MockStory = stories[0] self.assertSequenceEqual(story.substories, MockStory.SUBSTORIES) def test_match_regexp_all_wrong_case(self): stories = PressBenchmarkStoryFilter(MockStory, ["StOrY.*"]).stories self.assertEqual(len(stories), 1) story: MockStory = stories[0] self.assertSequenceEqual(story.substories, MockStory.SUBSTORIES) if __name__ == "__main__": test_helper.run_pytest(__file__)