Index: tools/telemetry/telemetry/user_story/user_story_filter_unittest.py |
diff --git a/tools/telemetry/telemetry/user_story/user_story_filter_unittest.py b/tools/telemetry/telemetry/user_story/user_story_filter_unittest.py |
index 8445e70dcc5a06cad7731f477a8f0e0e3fc44290..58386a7ea2cf8cad2500ce6fa65aef7dfb299287 100644 |
--- a/tools/telemetry/telemetry/user_story/user_story_filter_unittest.py |
+++ b/tools/telemetry/telemetry/user_story/user_story_filter_unittest.py |
@@ -4,92 +4,91 @@ |
import unittest |
-from telemetry.user_story import user_story_filter |
from telemetry.page import page |
from telemetry.page import page_set |
- |
- |
-class MockUrlFilterOptions(object): |
- def __init__(self, page_filter_include, page_filter_exclude): |
- self.page_filter = page_filter_include |
- self.page_filter_exclude = page_filter_exclude |
- self.page_label_filter = None |
- self.page_label_filter_exclude = None |
- |
- |
-class MockLabelFilterOptions(object): |
- def __init__(self, page_label_filter, page_label_filter_exclude): |
- self.page_filter = None |
- self.page_filter_exclude = None |
- self.page_label_filter = page_label_filter |
- self.page_label_filter_exclude = page_label_filter_exclude |
+from telemetry.user_story import user_story_filter |
class UserStoryFilterTest(unittest.TestCase): |
+ |
def setUp(self): |
ps = page_set.PageSet() |
self.p1 = page.Page( |
- 'file://conformance/textures/tex-sub-image-2d.html', page_set=ps, |
- name='WebglConformance.conformance_textures_tex_sub_image_2d', |
- labels=['label1', 'label2']) |
+ url='file://your/smile/widen.html', page_set=ps, |
+ name='MayYour.smile_widen', labels=['label1', 'label2']) |
self.p2 = page.Page( |
- 'file://othersuite/textures/tex-sub-image-3d.html', page_set=ps, |
- name='OtherSuite.textures_tex_sub_image_3d', |
- labels=['label1']) |
+ url='file://share_a/smile/too.html', page_set=ps, |
+ name='ShareA.smiles_too', labels=['label1']) |
self.p3 = page.Page( |
- 'file://othersuite/textures/tex-sub-image-3d.html', page_set=ps, |
+ url='file://share_a/smile/too.html', page_set=ps, |
labels=['label2']) |
+ self.pages = [self.p1, self.p2, self.p3] |
+ |
+ @staticmethod |
+ def ProcessCommandLineArgs(parser=None, **kwargs): |
+ class Options(object): |
+ def __init__( |
+ self, story_filter=None, story_filter_exclude=None, |
+ story_label_filter=None, story_label_filter_exclude=None): |
+ self.story_filter = story_filter |
+ self.story_filter_exclude = story_filter_exclude |
+ self.story_label_filter = story_label_filter |
+ self.story_label_filter_exclude = story_label_filter_exclude |
+ user_story_filter.UserStoryFilter.ProcessCommandLineArgs( |
+ parser, Options(**kwargs)) |
+ |
+ def PageSelections(self): |
+ return [user_story_filter.UserStoryFilter.IsSelected(p) for p in self.pages] |
+ |
+ def testNoFilterMatchesAll(self): |
+ self.ProcessCommandLineArgs() |
+ self.assertEquals([True, True, True], self.PageSelections()) |
+ |
+ def testBadRegexCallsParserError(self): |
+ class MockParserException(Exception): |
+ pass |
+ class MockParser(object): |
+ def error(self, _): |
+ raise MockParserException |
+ with self.assertRaises(MockParserException): |
+ self.ProcessCommandLineArgs(parser=MockParser(), story_filter='+') |
+ |
+ def testUniqueSubstring(self): |
+ self.ProcessCommandLineArgs(story_filter='smile_widen') |
+ self.assertEquals([True, False, False], self.PageSelections()) |
+ |
+ def testSharedSubstring(self): |
+ self.ProcessCommandLineArgs(story_filter='smile') |
+ self.assertEquals([True, True, True], self.PageSelections()) |
+ |
+ def testNoMatch(self): |
+ self.ProcessCommandLineArgs(story_filter='frown') |
+ self.assertEquals([False, False, False], self.PageSelections()) |
+ |
+ def testExclude(self): |
+ self.ProcessCommandLineArgs(story_filter_exclude='ShareA') |
+ self.assertEquals([True, False, True], self.PageSelections()) |
+ |
+ def testExcludeTakesPriority(self): |
+ self.ProcessCommandLineArgs( |
+ story_filter='smile', |
+ story_filter_exclude='wide') |
+ self.assertEquals([False, True, True], self.PageSelections()) |
+ |
+ def testNoNameMatchesDisplayName(self): |
+ self.ProcessCommandLineArgs(story_filter='share_a/smile') |
+ self.assertEquals([False, False, True], self.PageSelections()) |
+ |
+ def testNoLabelMatch(self): |
+ self.ProcessCommandLineArgs(story_label_filter='labelX') |
+ self.assertEquals([False, False, False], self.PageSelections()) |
+ |
+ def testLabelsAllMatch(self): |
+ self.ProcessCommandLineArgs(story_label_filter='label1,label2') |
+ self.assertEquals([True, True, True], self.PageSelections()) |
- def testURLPattern(self): |
- options = MockUrlFilterOptions('conformance_textures', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- options = MockUrlFilterOptions('textures', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- options = MockUrlFilterOptions('somethingelse', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- |
- def testName(self): |
- options = MockUrlFilterOptions('somethingelse', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- options = MockUrlFilterOptions('textures_tex_sub_image', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- options = MockUrlFilterOptions('WebglConformance', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- options = MockUrlFilterOptions('OtherSuite', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- |
- def testNameNone(self): |
- options = MockUrlFilterOptions('othersuite/textures', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p3)) |
- options = MockUrlFilterOptions('conformance/textures', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p3)) |
- |
- def testLabelFilters(self): |
- # Include both labels |
- options = MockLabelFilterOptions('label1,label2', '') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p3)) |
- # Exclude takes priority |
- options = MockLabelFilterOptions('label1', 'label2') |
- user_story_filter.UserStoryFilter.ProcessCommandLineArgs(None, options) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p1)) |
- self.assertTrue(user_story_filter.UserStoryFilter.IsSelected(self.p2)) |
- self.assertFalse(user_story_filter.UserStoryFilter.IsSelected(self.p3)) |
+ def testExcludeLabelTakesPriority(self): |
+ self.ProcessCommandLineArgs( |
+ story_label_filter='label1', |
+ story_label_filter_exclude='label2') |
+ self.assertEquals([False, True, False], self.PageSelections()) |