1# Copyright 2023 The Chromium Authors 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import datetime as dt 6import unittest 7 8from crossbench.benchmarks.base import PressBenchmarkStoryFilter 9from crossbench.runner.run import Run 10from crossbench.stories.press_benchmark import PressBenchmarkStory 11from tests import test_helper 12 13 14class MockStory(PressBenchmarkStory): 15 NAME = "MockStory" 16 URL = "http://test.com" 17 SUBSTORIES = ( 18 "Story-1", 19 "Story-2", 20 "Story-3", 21 "Story-4", 22 ) 23 24 @property 25 def substory_duration(self) -> dt.timedelta: 26 return dt.timedelta(seconds=0.1) 27 28 def run(self, run: Run) -> None: 29 pass 30 31 32class PressBenchmarkStoryFilterTestCase(unittest.TestCase): 33 34 def test_empty(self): 35 with self.assertRaises(ValueError): 36 _ = PressBenchmarkStoryFilter(MockStory, []) 37 38 def test_all(self): 39 stories = PressBenchmarkStoryFilter(MockStory, ["all"]).stories 40 self.assertEqual(len(stories), 1) 41 story: MockStory = stories[0] 42 self.assertSequenceEqual(story.substories, MockStory.SUBSTORIES) 43 44 def test_all_separate(self): 45 stories = PressBenchmarkStoryFilter( 46 MockStory, ["all"], separate=True).stories 47 self.assertSequenceEqual([story.substories[0] for story in stories], 48 MockStory.SUBSTORIES) 49 for story in stories: 50 self.assertTrue(len(story.substories), 1) 51 52 def test_match_regexp_none(self): 53 with self.assertRaises(ValueError) as cm: 54 _ = PressBenchmarkStoryFilter(MockStory, ["Story"]).stories 55 self.assertIn("Story", str(cm.exception)) 56 57 def test_match_regexp_some(self): 58 stories = PressBenchmarkStoryFilter(MockStory, [".*-3"]).stories 59 self.assertEqual(len(stories), 1) 60 story: MockStory = stories[0] 61 self.assertSequenceEqual(story.substories, ["Story-3"]) 62 63 def test_match_regexp_all(self): 64 stories = PressBenchmarkStoryFilter(MockStory, ["Story.*"]).stories 65 self.assertEqual(len(stories), 1) 66 story: MockStory = stories[0] 67 self.assertSequenceEqual(story.substories, MockStory.SUBSTORIES) 68 69 def test_match_regexp_all_wrong_case(self): 70 stories = PressBenchmarkStoryFilter(MockStory, ["StOrY.*"]).stories 71 self.assertEqual(len(stories), 1) 72 story: MockStory = stories[0] 73 self.assertSequenceEqual(story.substories, MockStory.SUBSTORIES) 74 75 76if __name__ == "__main__": 77 test_helper.run_pytest(__file__) 78