|  | #!/usr/bin/env python | 
|  | # Copyright 2016 the V8 project authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  |  | 
|  | import unittest | 
|  |  | 
|  | import statusfile | 
|  | from utils import Freeze | 
|  |  | 
|  |  | 
|  | TEST_VARIABLES = { | 
|  | 'system': 'linux', | 
|  | 'mode': 'release', | 
|  | } | 
|  |  | 
|  |  | 
|  | TEST_STATUS_FILE = """ | 
|  | [ | 
|  | [ALWAYS, { | 
|  | 'foo/bar': [PASS, SKIP], | 
|  | 'baz/bar': [PASS, FAIL], | 
|  | 'foo/*': [PASS, SLOW], | 
|  | }],  # ALWAYS | 
|  |  | 
|  | ['%s', { | 
|  | 'baz/bar': [PASS, SLOW], | 
|  | 'foo/*': [FAIL], | 
|  | }], | 
|  | ] | 
|  | """ | 
|  |  | 
|  |  | 
|  | def make_variables(): | 
|  | variables = {} | 
|  | variables.update(TEST_VARIABLES) | 
|  | return variables | 
|  |  | 
|  |  | 
|  | class UtilsTest(unittest.TestCase): | 
|  | def test_freeze(self): | 
|  | self.assertEqual(2, Freeze({1: [2]})[1][0]) | 
|  | self.assertEqual(set([3]), Freeze({1: [2], 2: set([3])})[2]) | 
|  |  | 
|  | with self.assertRaises(Exception): | 
|  | Freeze({1: [], 2: set([3])})[2] = 4 | 
|  | with self.assertRaises(Exception): | 
|  | Freeze({1: [], 2: set([3])}).update({3: 4}) | 
|  | with self.assertRaises(Exception): | 
|  | Freeze({1: [], 2: set([3])})[1].append(2) | 
|  | with self.assertRaises(Exception): | 
|  | Freeze({1: [], 2: set([3])})[2] |= set([3]) | 
|  |  | 
|  | # Sanity check that we can do the same calls on a non-frozen object. | 
|  | {1: [], 2: set([3])}[2] = 4 | 
|  | {1: [], 2: set([3])}.update({3: 4}) | 
|  | {1: [], 2: set([3])}[1].append(2) | 
|  | {1: [], 2: set([3])}[2] |= set([3]) | 
|  |  | 
|  |  | 
|  | class StatusFileTest(unittest.TestCase): | 
|  | def test_eval_expression(self): | 
|  | variables = make_variables() | 
|  | variables.update(statusfile.VARIABLES) | 
|  |  | 
|  | self.assertTrue( | 
|  | statusfile._EvalExpression( | 
|  | 'system==linux and mode==release', variables)) | 
|  | self.assertTrue( | 
|  | statusfile._EvalExpression( | 
|  | 'system==linux or variant==default', variables)) | 
|  | self.assertFalse( | 
|  | statusfile._EvalExpression( | 
|  | 'system==linux and mode==debug', variables)) | 
|  | self.assertRaises( | 
|  | AssertionError, | 
|  | lambda: statusfile._EvalExpression( | 
|  | 'system==linux and mode==foo', variables)) | 
|  | self.assertRaises( | 
|  | SyntaxError, | 
|  | lambda: statusfile._EvalExpression( | 
|  | 'system==linux and mode=release', variables)) | 
|  | self.assertEquals( | 
|  | statusfile.VARIANT_EXPRESSION, | 
|  | statusfile._EvalExpression( | 
|  | 'system==linux and variant==default', variables) | 
|  | ) | 
|  |  | 
|  | def test_read_statusfile_section_true(self): | 
|  | rules, prefix_rules = statusfile.ReadStatusFile( | 
|  | TEST_STATUS_FILE % 'system==linux', make_variables()) | 
|  |  | 
|  | self.assertEquals( | 
|  | { | 
|  | 'foo/bar': set(['PASS', 'SKIP']), | 
|  | 'baz/bar': set(['PASS', 'FAIL', 'SLOW']), | 
|  | }, | 
|  | rules[''], | 
|  | ) | 
|  | self.assertEquals( | 
|  | { | 
|  | 'foo/': set(['SLOW', 'FAIL']), | 
|  | }, | 
|  | prefix_rules[''], | 
|  | ) | 
|  | self.assertEquals({}, rules['default']) | 
|  | self.assertEquals({}, prefix_rules['default']) | 
|  |  | 
|  | def test_read_statusfile_section_false(self): | 
|  | rules, prefix_rules = statusfile.ReadStatusFile( | 
|  | TEST_STATUS_FILE % 'system==windows', make_variables()) | 
|  |  | 
|  | self.assertEquals( | 
|  | { | 
|  | 'foo/bar': set(['PASS', 'SKIP']), | 
|  | 'baz/bar': set(['PASS', 'FAIL']), | 
|  | }, | 
|  | rules[''], | 
|  | ) | 
|  | self.assertEquals( | 
|  | { | 
|  | 'foo/': set(['PASS', 'SLOW']), | 
|  | }, | 
|  | prefix_rules[''], | 
|  | ) | 
|  | self.assertEquals({}, rules['default']) | 
|  | self.assertEquals({}, prefix_rules['default']) | 
|  |  | 
|  | def test_read_statusfile_section_variant(self): | 
|  | rules, prefix_rules = statusfile.ReadStatusFile( | 
|  | TEST_STATUS_FILE % 'system==linux and variant==default', | 
|  | make_variables(), | 
|  | ) | 
|  |  | 
|  | self.assertEquals( | 
|  | { | 
|  | 'foo/bar': set(['PASS', 'SKIP']), | 
|  | 'baz/bar': set(['PASS', 'FAIL']), | 
|  | }, | 
|  | rules[''], | 
|  | ) | 
|  | self.assertEquals( | 
|  | { | 
|  | 'foo/': set(['PASS', 'SLOW']), | 
|  | }, | 
|  | prefix_rules[''], | 
|  | ) | 
|  | self.assertEquals( | 
|  | { | 
|  | 'baz/bar': set(['PASS', 'SLOW']), | 
|  | }, | 
|  | rules['default'], | 
|  | ) | 
|  | self.assertEquals( | 
|  | { | 
|  | 'foo/': set(['FAIL']), | 
|  | }, | 
|  | prefix_rules['default'], | 
|  | ) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | unittest.main() |