• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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