1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import unittest
6
7from telemetry.page import page
8from telemetry.page import page_filter
9from telemetry.page import page_set
10
11
12class MockUrlFilterOptions(object):
13  def __init__(self, page_filter_include, page_filter_exclude):
14    self.page_filter = page_filter_include
15    self.page_filter_exclude = page_filter_exclude
16    self.page_label_filter = None
17    self.page_label_filter_exclude = None
18
19
20class MockLabelFilterOptions(object):
21  def __init__(self, page_label_filter, page_label_filter_exclude):
22    self.page_filter = None
23    self.page_filter_exclude = None
24    self.page_label_filter = page_label_filter
25    self.page_label_filter_exclude = page_label_filter_exclude
26
27
28class PageFilterTest(unittest.TestCase):
29  def setUp(self):
30    ps = page_set.PageSet()
31    self.p1 = page.Page(
32      'file://conformance/textures/tex-sub-image-2d.html', page_set=ps,
33      name='WebglConformance.conformance_textures_tex_sub_image_2d')
34    self.p2 = page.Page(
35      'file://othersuite/textures/tex-sub-image-3d.html', page_set=ps,
36      name='OtherSuite.textures_tex_sub_image_3d')
37    self.p3 = page.Page(
38      'file://othersuite/textures/tex-sub-image-3d.html', page_set=ps)
39
40  def testURLPattern(self):
41    options = MockUrlFilterOptions('conformance/textures', '')
42    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
43    self.assertTrue(page_filter.PageFilter.IsSelected(self.p1))
44    self.assertFalse(page_filter.PageFilter.IsSelected(self.p2))
45    options = MockUrlFilterOptions('textures', '')
46    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
47    self.assertTrue(page_filter.PageFilter.IsSelected(self.p1))
48    self.assertTrue(page_filter.PageFilter.IsSelected(self.p2))
49    options = MockUrlFilterOptions('somethingelse', '')
50    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
51    self.assertFalse(page_filter.PageFilter.IsSelected(self.p1))
52    self.assertFalse(page_filter.PageFilter.IsSelected(self.p2))
53
54  def testName(self):
55    options = MockUrlFilterOptions('somethingelse', '')
56    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
57    self.assertFalse(page_filter.PageFilter.IsSelected(self.p1))
58    self.assertFalse(page_filter.PageFilter.IsSelected(self.p2))
59    options = MockUrlFilterOptions('textures_tex_sub_image', '')
60    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
61    self.assertTrue(page_filter.PageFilter.IsSelected(self.p1))
62    self.assertTrue(page_filter.PageFilter.IsSelected(self.p2))
63    options = MockUrlFilterOptions('WebglConformance', '')
64    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
65    self.assertTrue(page_filter.PageFilter.IsSelected(self.p1))
66    self.assertFalse(page_filter.PageFilter.IsSelected(self.p2))
67    options = MockUrlFilterOptions('OtherSuite', '')
68    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
69    self.assertFalse(page_filter.PageFilter.IsSelected(self.p1))
70    self.assertTrue(page_filter.PageFilter.IsSelected(self.p2))
71
72  def testNameNone(self):
73    options = MockUrlFilterOptions('othersuite/textures', '')
74    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
75    self.assertTrue(page_filter.PageFilter.IsSelected(self.p3))
76    options = MockUrlFilterOptions('conformance/textures', '')
77    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
78    self.assertFalse(page_filter.PageFilter.IsSelected(self.p3))
79
80  def testLabelFilters(self):
81    self.p1.label1 = True
82    self.p2.label1 = True
83    self.p3.label1 = False
84    self.p1.label2 = True
85    self.p2.label2 = False
86    self.p3.label2 = True
87
88    # Include both labels
89    options = MockLabelFilterOptions('label1,label2', '')
90    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
91    self.assertTrue(page_filter.PageFilter.IsSelected(self.p1))
92    self.assertTrue(page_filter.PageFilter.IsSelected(self.p2))
93    self.assertTrue(page_filter.PageFilter.IsSelected(self.p3))
94    # Exclude takes priority
95    options = MockLabelFilterOptions('label1', 'label2')
96    page_filter.PageFilter.ProcessCommandLineArgs(None, options)
97    self.assertFalse(page_filter.PageFilter.IsSelected(self.p1))
98    self.assertTrue(page_filter.PageFilter.IsSelected(self.p2))
99    self.assertFalse(page_filter.PageFilter.IsSelected(self.p3))
100