blob: fa0718257b0683862d789dab5acec380c33edde8 [file] [log] [blame]
#!/usr/bin/env vpython3
# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import os
import sys
import tempfile
import unittest
from pylib.utils import test_filter
class ParseFilterFileTest(unittest.TestCase):
def testParseFilterFile_commentsAndBlankLines(self):
input_lines = [
'positive1',
'# comment',
'positive2 # Another comment',
''
'positive3'
]
actual = test_filter.ParseFilterFile(input_lines)
expected = ['positive1', 'positive2', 'positive3'], []
self.assertEqual(expected, actual)
def testParseFilterFile_onlyPositive(self):
input_lines = [
'positive1',
'positive2'
]
actual = test_filter.ParseFilterFile(input_lines)
expected = ['positive1', 'positive2'], []
self.assertEqual(expected, actual)
def testParseFilterFile_onlyNegative(self):
input_lines = [
'-negative1',
'-negative2'
]
actual = test_filter.ParseFilterFile(input_lines)
expected = [], ['negative1', 'negative2']
self.assertEqual(expected, actual)
def testParseFilterFile_positiveAndNegative(self):
input_lines = [
'positive1',
'positive2',
'-negative1',
'-negative2'
]
actual = test_filter.ParseFilterFile(input_lines)
expected = ['positive1', 'positive2'], ['negative1', 'negative2']
self.assertEqual(expected, actual)
class InitializeFilterFromArgsTest(unittest.TestCase):
def testInitializeBasicFilter(self):
parser = argparse.ArgumentParser()
test_filter.AddFilterOptions(parser)
args = parser.parse_args([
'--test-filter',
'FooTest.testFoo:BarTest.testBar'])
expected = ['FooTest.testFoo:BarTest.testBar']
actual = test_filter.InitializeFiltersFromArgs(args)
self.assertEqual(actual, expected)
def testInitializeJavaStyleFilter(self):
parser = argparse.ArgumentParser()
test_filter.AddFilterOptions(parser)
args = parser.parse_args([
'--test-filter',
'FooTest#testFoo:BarTest#testBar'])
expected = ['FooTest.testFoo:BarTest.testBar']
actual = test_filter.InitializeFiltersFromArgs(args)
self.assertEqual(actual, expected)
def testInitializeBasicIsolatedScript(self):
parser = argparse.ArgumentParser()
test_filter.AddFilterOptions(parser)
args = parser.parse_args([
'--isolated-script-test-filter',
'FooTest.testFoo::BarTest.testBar'])
expected = ['FooTest.testFoo:BarTest.testBar']
actual = test_filter.InitializeFiltersFromArgs(args)
self.assertEqual(actual, expected)
@unittest.skipIf(os.name == "nt", "Opening NamedTemporaryFile by name "
"doesn't work in Windows.")
def testFilterArgWithPositiveFilterInFilterFile(self):
parser = argparse.ArgumentParser()
test_filter.AddFilterOptions(parser)
with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
tmp_file.write('positive1\npositive2\n-negative2\n-negative3\n')
tmp_file.seek(0)
args = parser.parse_args([
'--test-filter=-negative1',
'--test-launcher-filter-file',
tmp_file.name])
expected = ['-negative1', 'positive1:positive2-negative2:negative3']
actual = test_filter.InitializeFiltersFromArgs(args)
self.assertEqual(actual, expected)
@unittest.skipIf(os.name == "nt", "Opening NamedTemporaryFile by name "
"doesn't work in Windows.")
def testFilterFileWithPositiveFilterInFilterArg(self):
parser = argparse.ArgumentParser()
test_filter.AddFilterOptions(parser)
with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
tmp_file.write('-negative2\n-negative3\n')
tmp_file.seek(0)
args = parser.parse_args([
'--test-filter',
'positive1:positive2-negative1',
'--test-launcher-filter-file',
tmp_file.name])
expected = ['positive1:positive2-negative1', '-negative2:negative3']
actual = test_filter.InitializeFiltersFromArgs(args)
self.assertEqual(actual, expected)
@unittest.skipIf(os.name == "nt", "Opening NamedTemporaryFile by name "
"doesn't work in Windows.")
def testPositiveFilterInBothFileAndArg(self):
parser = argparse.ArgumentParser()
test_filter.AddFilterOptions(parser)
with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
tmp_file.write('positive2-negative2\n')
tmp_file.seek(0)
args = parser.parse_args([
'--test-filter', 'positive1-negative1', '--test-launcher-filter-file',
tmp_file.name
])
expected = ['positive1-negative1', 'positive2-negative2']
actual = test_filter.InitializeFiltersFromArgs(args)
self.assertEqual(actual, expected)
@unittest.skipIf(os.name == "nt", "Opening NamedTemporaryFile by name "
"doesn't work in Windows.")
def testFilterArgWithFilterFileAllNegative(self):
parser = argparse.ArgumentParser()
test_filter.AddFilterOptions(parser)
with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
tmp_file.write('-negative3\n-negative4\n')
tmp_file.seek(0)
args = parser.parse_args([
'--test-filter=-negative1:negative2',
'--test-launcher-filter-file',
tmp_file.name])
expected = ['-negative1:negative2', '-negative3:negative4']
actual = test_filter.InitializeFiltersFromArgs(args)
self.assertEqual(actual, expected)
class AppendPatternsToFilter(unittest.TestCase):
def testAllEmpty(self):
expected = ''
actual = test_filter.AppendPatternsToFilter('', [], [])
self.assertEqual(actual, expected)
def testAppendOnlyPositiveToEmptyFilter(self):
expected = 'positive'
actual = test_filter.AppendPatternsToFilter('', ['positive'])
self.assertEqual(actual, expected)
def testAppendOnlyNegativeToEmptyFilter(self):
expected = '-negative'
actual = test_filter.AppendPatternsToFilter('',
negative_patterns=['negative'])
self.assertEqual(actual, expected)
def testAppendToEmptyFilter(self):
expected = 'positive-negative'
actual = test_filter.AppendPatternsToFilter('', ['positive'], ['negative'])
self.assertEqual(actual, expected)
def testAppendToPositiveOnlyFilter(self):
expected = 'positive1:positive2-negative'
actual = test_filter.AppendPatternsToFilter('positive1', ['positive2'],
['negative'])
self.assertEqual(actual, expected)
def testAppendToNegativeOnlyFilter(self):
expected = 'positive-negative1:negative2'
actual = test_filter.AppendPatternsToFilter('-negative1', ['positive'],
['negative2'])
self.assertEqual(actual, expected)
def testAppendPositiveToFilter(self):
expected = 'positive1:positive2-negative1'
actual = test_filter.AppendPatternsToFilter('positive1-negative1',
['positive2'])
self.assertEqual(actual, expected)
def testAppendNegativeToFilter(self):
expected = 'positive1-negative1:negative2'
actual = test_filter.AppendPatternsToFilter('positive1-negative1',
negative_patterns=['negative2'])
self.assertEqual(actual, expected)
def testAppendBothToFilter(self):
expected = 'positive1:positive2-negative1:negative2'
actual = test_filter.AppendPatternsToFilter('positive1-negative1',
positive_patterns=['positive2'],
negative_patterns=['negative2'])
self.assertEqual(actual, expected)
def testAppendMultipleToFilter(self):
expected = 'positive1:positive2:positive3-negative1:negative2:negative3'
actual = test_filter.AppendPatternsToFilter('positive1-negative1',
['positive2', 'positive3'],
['negative2', 'negative3'])
self.assertEqual(actual, expected)
def testRepeatedAppendToFilter(self):
expected = 'positive1:positive2:positive3-negative1:negative2:negative3'
filter_string = test_filter.AppendPatternsToFilter('positive1-negative1',
['positive2'],
['negative2'])
actual = test_filter.AppendPatternsToFilter(filter_string, ['positive3'],
['negative3'])
self.assertEqual(actual, expected)
def testAppendHashSeparatedPatternsToFilter(self):
expected = 'positive.test1:positive.test2-negative.test1:negative.test2'
actual = test_filter.AppendPatternsToFilter('positive#test1-negative#test1',
['positive#test2'],
['negative#test2'])
self.assertEqual(actual, expected)
class HasPositivePatterns(unittest.TestCase):
def testEmpty(self):
expected = False
actual = test_filter.HasPositivePatterns('')
self.assertEqual(actual, expected)
def testHasOnlyPositive(self):
expected = True
actual = test_filter.HasPositivePatterns('positive')
self.assertEqual(actual, expected)
def testHasOnlyNegative(self):
expected = False
actual = test_filter.HasPositivePatterns('-negative')
self.assertEqual(actual, expected)
def testHasBoth(self):
expected = True
actual = test_filter.HasPositivePatterns('positive-negative')
self.assertEqual(actual, expected)
if __name__ == '__main__':
sys.exit(unittest.main())