| Index: tools/isolate/tests/isolate_test.py
|
| diff --git a/tools/isolate/tests/isolate_test.py b/tools/isolate/tests/isolate_test.py
|
| deleted file mode 100755
|
| index 79eb663ad527b7179b8227246dad7c2a3703bad0..0000000000000000000000000000000000000000
|
| --- a/tools/isolate/tests/isolate_test.py
|
| +++ /dev/null
|
| @@ -1,836 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium 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 cStringIO
|
| -import logging
|
| -import os
|
| -import sys
|
| -import tempfile
|
| -import unittest
|
| -
|
| -ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| -sys.path.insert(0, ROOT_DIR)
|
| -
|
| -import isolate
|
| -# Create shortcuts.
|
| -from isolate import KEY_TOUCHED, KEY_TRACKED, KEY_UNTRACKED
|
| -
|
| -
|
| -class Isolate(unittest.TestCase):
|
| - def setUp(self):
|
| - # Everything should work even from another directory.
|
| - os.chdir(os.path.dirname(ROOT_DIR))
|
| -
|
| - def test_load_isolate_for_flavor_empty(self):
|
| - content = "{}"
|
| - command, infiles, touched, read_only = isolate.load_isolate_for_flavor(
|
| - content, isolate.get_flavor())
|
| - self.assertEquals([], command)
|
| - self.assertEquals([], infiles)
|
| - self.assertEquals([], touched)
|
| - self.assertEquals(None, read_only)
|
| -
|
| - def test_result_load_empty(self):
|
| - values = {
|
| - }
|
| - expected = {
|
| - 'command': [],
|
| - 'files': {},
|
| - 'os': isolate.get_flavor(),
|
| - }
|
| - self.assertEquals(expected, isolate.Result.load(values).flatten())
|
| -
|
| - def test_result_load(self):
|
| - values = {
|
| - 'command': 'maybe',
|
| - 'files': {'foo': 42},
|
| - 'read_only': 2,
|
| - }
|
| - expected = {
|
| - 'command': 'maybe',
|
| - 'files': {'foo': 42},
|
| - 'os': isolate.get_flavor(),
|
| - 'read_only': 2,
|
| - }
|
| - self.assertEquals(expected, isolate.Result.load(values).flatten())
|
| -
|
| - def test_result_load_unexpected(self):
|
| - values = {
|
| - 'foo': 'bar',
|
| - }
|
| - expected = (
|
| - ("Found unexpected entry {'foo': 'bar'} while constructing an "
|
| - "object Result"),
|
| - {'foo': 'bar'},
|
| - 'Result')
|
| - try:
|
| - isolate.Result.load(values)
|
| - self.fail()
|
| - except ValueError, e:
|
| - self.assertEquals(expected, e.args)
|
| -
|
| - def test_savedstate_load_empty(self):
|
| - values = {
|
| - }
|
| - expected = {
|
| - 'variables': {},
|
| - }
|
| - self.assertEquals(expected, isolate.SavedState.load(values).flatten())
|
| -
|
| - def test_savedstate_load(self):
|
| - values = {
|
| - 'isolate_file': os.path.join(ROOT_DIR, 'maybe'),
|
| - 'variables': {'foo': 42},
|
| - }
|
| - expected = {
|
| - 'isolate_file': os.path.join(ROOT_DIR, 'maybe'),
|
| - 'variables': {'foo': 42},
|
| - }
|
| - self.assertEquals(expected, isolate.SavedState.load(values).flatten())
|
| -
|
| - def test_load_stale_result(self):
|
| - directory = tempfile.mkdtemp(prefix='isolate_')
|
| - try:
|
| - isolate_file = os.path.join(
|
| - ROOT_DIR, 'tests', 'isolate', 'touch_root.isolate')
|
| - class Options(object):
|
| - result = os.path.join(directory, 'result')
|
| - outdir = os.path.join(directory, '0utdir')
|
| - isolate = isolate_file
|
| - variables = {'foo': 'bar'}
|
| -
|
| - # Data to be loaded in the .result file. Do not create a .state file.
|
| - input_data = {
|
| - 'command': ['python'],
|
| - 'files': {
|
| - 'foo': {
|
| - "mode": 416,
|
| - "sha-1": "invalid",
|
| - "size": 538,
|
| - "timestamp": 1335146921,
|
| - },
|
| - os.path.join('tests', 'isolate', 'touch_root.py'): {
|
| - "mode": 488,
|
| - "sha-1": "invalid",
|
| - "size": 538,
|
| - "timestamp": 1335146921,
|
| - },
|
| - },
|
| - }
|
| - isolate.trace_inputs.write_json(Options.result, input_data, False)
|
| -
|
| - # A CompleteState object contains two parts:
|
| - # - Result instance stored in complete_state.result, corresponding to the
|
| - # .result file, is what is read by run_test_from_archive.py.
|
| - # - SavedState instance stored in compelte_state.saved_state,
|
| - # corresponding to the .state file, which is simply to aid the developer
|
| - # when re-running the same command multiple times and contain
|
| - # discardable information.
|
| - complete_state = isolate.load_complete_state(Options, isolate.STATS_ONLY)
|
| - actual_result = complete_state.result.flatten()
|
| - actual_saved_state = complete_state.saved_state.flatten()
|
| -
|
| - expected_result = {
|
| - 'command': ['python', 'touch_root.py'],
|
| - 'files': {
|
| - os.path.join(u'tests', 'isolate', 'touch_root.py'): {
|
| - 'mode': 488,
|
| - 'size': self._size('tests', 'isolate', 'touch_root.py'),
|
| - },
|
| - 'isolate.py': {
|
| - 'mode': 488,
|
| - 'size': self._size('isolate.py'),
|
| - },
|
| - },
|
| - 'os': isolate.get_flavor(),
|
| - 'relative_cwd': os.path.join('tests', 'isolate'),
|
| - }
|
| - if sys.platform == 'win32':
|
| - # 'mode' are not saved in windows.
|
| - for values in expected_result['files'].itervalues():
|
| - del values['mode']
|
| - for item in actual_result['files'].itervalues():
|
| - self.assertTrue(item.pop('timestamp'))
|
| - self.assertEquals(expected_result, actual_result)
|
| -
|
| - expected_saved_state = {
|
| - 'isolate_file': isolate_file,
|
| - 'variables': {'foo': 'bar'},
|
| - }
|
| - self.assertEquals(expected_saved_state, actual_saved_state)
|
| - finally:
|
| - isolate.run_test_from_archive.rmtree(directory)
|
| -
|
| - @staticmethod
|
| - def _size(*args):
|
| - return os.stat(os.path.join(ROOT_DIR, *args)).st_size
|
| -
|
| - def test_unknown_key(self):
|
| - try:
|
| - isolate.verify_variables({'foo': [],})
|
| - self.fail()
|
| - except AssertionError:
|
| - pass
|
| -
|
| - def test_unknown_var(self):
|
| - try:
|
| - isolate.verify_condition({'variables': {'foo': [],}})
|
| - self.fail()
|
| - except AssertionError:
|
| - pass
|
| -
|
| - def test_union(self):
|
| - value1 = {
|
| - 'a': set(['A']),
|
| - 'b': ['B', 'C'],
|
| - 'c': 'C',
|
| - }
|
| - value2 = {
|
| - 'a': set(['B', 'C']),
|
| - 'b': [],
|
| - 'd': set(),
|
| - }
|
| - expected = {
|
| - 'a': set(['A', 'B', 'C']),
|
| - 'b': ['B', 'C'],
|
| - 'c': 'C',
|
| - 'd': set(),
|
| - }
|
| - self.assertEquals(expected, isolate.union(value1, value2))
|
| -
|
| - def test_eval_content(self):
|
| - try:
|
| - # Intrinsics are not available.
|
| - isolate.eval_content('map(str, [1, 2])')
|
| - self.fail()
|
| - except NameError:
|
| - pass
|
| -
|
| - def test_load_isolate_as_config_empty(self):
|
| - self.assertEquals({}, isolate.load_isolate_as_config(
|
| - {}, None, []).flatten())
|
| -
|
| - def test_load_isolate_as_config(self):
|
| - value = {
|
| - 'variables': {
|
| - KEY_TRACKED: ['a'],
|
| - KEY_UNTRACKED: ['b'],
|
| - KEY_TOUCHED: ['touched'],
|
| - },
|
| - 'conditions': [
|
| - ['OS=="atari"', {
|
| - 'variables': {
|
| - KEY_TRACKED: ['c', 'x'],
|
| - KEY_UNTRACKED: ['d'],
|
| - KEY_TOUCHED: ['touched_a'],
|
| - 'command': ['echo', 'Hello World'],
|
| - 'read_only': True,
|
| - },
|
| - }, { # else
|
| - 'variables': {
|
| - KEY_TRACKED: ['e', 'x'],
|
| - KEY_UNTRACKED: ['f'],
|
| - KEY_TOUCHED: ['touched_e'],
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - },
|
| - }],
|
| - ['OS=="amiga"', {
|
| - 'variables': {
|
| - KEY_TRACKED: ['g'],
|
| - 'read_only': False,
|
| - },
|
| - }],
|
| - ['OS=="dendy"', {
|
| - }],
|
| - ['OS=="coleco"', {
|
| - }, { # else
|
| - 'variables': {
|
| - KEY_UNTRACKED: ['h'],
|
| - 'read_only': None,
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - expected = {
|
| - 'amiga': {
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - KEY_TOUCHED: ['touched', 'touched_e'],
|
| - KEY_TRACKED: ['a', 'e', 'g', 'x'],
|
| - KEY_UNTRACKED: ['b', 'f', 'h'],
|
| - 'read_only': False,
|
| - },
|
| - 'atari': {
|
| - 'command': ['echo', 'Hello World'],
|
| - KEY_TOUCHED: ['touched', 'touched_a'],
|
| - KEY_TRACKED: ['a', 'c', 'x'],
|
| - KEY_UNTRACKED: ['b', 'd', 'h'],
|
| - 'read_only': True,
|
| - },
|
| - 'coleco': {
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - KEY_TOUCHED: ['touched', 'touched_e'],
|
| - KEY_TRACKED: ['a', 'e', 'x'],
|
| - KEY_UNTRACKED: ['b', 'f'],
|
| - },
|
| - 'dendy': {
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - KEY_TOUCHED: ['touched', 'touched_e'],
|
| - KEY_TRACKED: ['a', 'e', 'x'],
|
| - KEY_UNTRACKED: ['b', 'f', 'h'],
|
| - },
|
| - }
|
| - self.assertEquals(
|
| - expected, isolate.load_isolate_as_config(value, None, []).flatten())
|
| -
|
| - def test_load_isolate_as_config_duplicate_command(self):
|
| - value = {
|
| - 'variables': {
|
| - 'command': ['rm', '-rf', '/'],
|
| - },
|
| - 'conditions': [
|
| - ['OS=="atari"', {
|
| - 'variables': {
|
| - 'command': ['echo', 'Hello World'],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - try:
|
| - isolate.load_isolate_as_config(value, None, [])
|
| - self.fail()
|
| - except AssertionError:
|
| - pass
|
| -
|
| - def test_load_isolate_as_config_no_condition(self):
|
| - value = {
|
| - 'variables': {
|
| - KEY_TRACKED: ['a'],
|
| - KEY_UNTRACKED: ['b'],
|
| - },
|
| - }
|
| - expected = {
|
| - KEY_TRACKED: ['a'],
|
| - KEY_UNTRACKED: ['b'],
|
| - }
|
| - actual = isolate.load_isolate_as_config(value, None, [])
|
| - # Flattening the whole config will discard 'None'.
|
| - self.assertEquals({}, actual.flatten())
|
| - self.assertEquals([None], actual.per_os.keys())
|
| - # But the 'None' value is still available as a backup.
|
| - self.assertEquals(expected, actual.per_os[None].flatten())
|
| -
|
| - def test_invert_map(self):
|
| - value = {
|
| - 'amiga': {
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - KEY_TOUCHED: ['touched', 'touched_e'],
|
| - KEY_TRACKED: ['a', 'e', 'g', 'x'],
|
| - KEY_UNTRACKED: ['b', 'f', 'h'],
|
| - 'read_only': False,
|
| - },
|
| - 'atari': {
|
| - 'command': ['echo', 'Hello World'],
|
| - KEY_TOUCHED: ['touched', 'touched_a'],
|
| - KEY_TRACKED: ['a', 'c', 'x'],
|
| - KEY_UNTRACKED: ['b', 'd', 'h'],
|
| - 'read_only': True,
|
| - },
|
| - 'coleco': {
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - KEY_TOUCHED: ['touched', 'touched_e'],
|
| - KEY_TRACKED: ['a', 'e', 'x'],
|
| - KEY_UNTRACKED: ['b', 'f'],
|
| - },
|
| - 'dendy': {
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - KEY_TOUCHED: ['touched', 'touched_e'],
|
| - KEY_TRACKED: ['a', 'e', 'x'],
|
| - KEY_UNTRACKED: ['b', 'f', 'h'],
|
| - },
|
| - }
|
| - expected_values = {
|
| - 'command': {
|
| - ('echo', 'Hello World'): set(['atari']),
|
| - ('echo', 'You should get an Atari'): set(['amiga', 'coleco', 'dendy']),
|
| - },
|
| - KEY_TRACKED: {
|
| - 'a': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'c': set(['atari']),
|
| - 'e': set(['amiga', 'coleco', 'dendy']),
|
| - 'g': set(['amiga']),
|
| - 'x': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - },
|
| - KEY_UNTRACKED: {
|
| - 'b': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'd': set(['atari']),
|
| - 'f': set(['amiga', 'coleco', 'dendy']),
|
| - 'h': set(['amiga', 'atari', 'dendy']),
|
| - },
|
| - KEY_TOUCHED: {
|
| - 'touched': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'touched_a': set(['atari']),
|
| - 'touched_e': set(['amiga', 'coleco', 'dendy']),
|
| - },
|
| - 'read_only': {
|
| - None: set(['coleco', 'dendy']),
|
| - False: set(['amiga']),
|
| - True: set(['atari']),
|
| - },
|
| - }
|
| - expected_oses = set(['amiga', 'atari', 'coleco', 'dendy'])
|
| - actual_values, actual_oses = isolate.invert_map(value)
|
| - self.assertEquals(expected_values, actual_values)
|
| - self.assertEquals(expected_oses, actual_oses)
|
| -
|
| - def test_reduce_inputs(self):
|
| - values = {
|
| - 'command': {
|
| - ('echo', 'Hello World'): set(['atari']),
|
| - ('echo', 'You should get an Atari'): set(['amiga', 'coleco', 'dendy']),
|
| - },
|
| - KEY_TRACKED: {
|
| - 'a': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'c': set(['atari']),
|
| - 'e': set(['amiga', 'coleco', 'dendy']),
|
| - 'g': set(['amiga']),
|
| - 'x': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - },
|
| - KEY_UNTRACKED: {
|
| - 'b': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'd': set(['atari']),
|
| - 'f': set(['amiga', 'coleco', 'dendy']),
|
| - 'h': set(['amiga', 'atari', 'dendy']),
|
| - },
|
| - KEY_TOUCHED: {
|
| - 'touched': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'touched_a': set(['atari']),
|
| - 'touched_e': set(['amiga', 'coleco', 'dendy']),
|
| - },
|
| - 'read_only': {
|
| - None: set(['coleco', 'dendy']),
|
| - False: set(['amiga']),
|
| - True: set(['atari']),
|
| - },
|
| - }
|
| - oses = set(['amiga', 'atari', 'coleco', 'dendy'])
|
| - expected_values = {
|
| - 'command': {
|
| - ('echo', 'Hello World'): set(['atari']),
|
| - ('echo', 'You should get an Atari'): set(['!atari']),
|
| - },
|
| - KEY_TRACKED: {
|
| - 'a': set([None]),
|
| - 'c': set(['atari']),
|
| - 'e': set(['!atari']),
|
| - 'g': set(['amiga']),
|
| - 'x': set([None]),
|
| - },
|
| - KEY_UNTRACKED: {
|
| - 'b': set([None]),
|
| - 'd': set(['atari']),
|
| - 'f': set(['!atari']),
|
| - 'h': set(['!coleco']),
|
| - },
|
| - KEY_TOUCHED: {
|
| - 'touched': set([None]),
|
| - 'touched_a': set(['atari']),
|
| - 'touched_e': set(['!atari']),
|
| - },
|
| - 'read_only': {
|
| - None: set(['coleco', 'dendy']),
|
| - False: set(['amiga']),
|
| - True: set(['atari']),
|
| - },
|
| - }
|
| - actual_values, actual_oses = isolate.reduce_inputs(values, oses)
|
| - self.assertEquals(expected_values, actual_values)
|
| - self.assertEquals(oses, actual_oses)
|
| -
|
| - def test_reduce_inputs_take_strongest_dependency(self):
|
| - values = {
|
| - 'command': {
|
| - ('echo', 'Hello World'): set(['atari']),
|
| - ('echo', 'You should get an Atari'): set(['amiga', 'coleco', 'dendy']),
|
| - },
|
| - KEY_TRACKED: {
|
| - 'a': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'b': set(['amiga', 'atari', 'coleco']),
|
| - },
|
| - KEY_UNTRACKED: {
|
| - 'c': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'd': set(['amiga', 'coleco', 'dendy']),
|
| - },
|
| - KEY_TOUCHED: {
|
| - 'a': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'b': set(['atari', 'coleco', 'dendy']),
|
| - 'c': set(['amiga', 'atari', 'coleco', 'dendy']),
|
| - 'd': set(['atari', 'coleco', 'dendy']),
|
| - },
|
| - }
|
| - oses = set(['amiga', 'atari', 'coleco', 'dendy'])
|
| - expected_values = {
|
| - 'command': {
|
| - ('echo', 'Hello World'): set(['atari']),
|
| - ('echo', 'You should get an Atari'): set(['!atari']),
|
| - },
|
| - KEY_TRACKED: {
|
| - 'a': set([None]),
|
| - 'b': set(['!dendy']),
|
| - },
|
| - KEY_UNTRACKED: {
|
| - 'c': set([None]),
|
| - 'd': set(['!atari']),
|
| - },
|
| - KEY_TOUCHED: {
|
| - 'b': set(['dendy']),
|
| - 'd': set(['atari']),
|
| - },
|
| - 'read_only': {},
|
| - }
|
| - actual_values, actual_oses = isolate.reduce_inputs(values, oses)
|
| - self.assertEquals(expected_values, actual_values)
|
| - self.assertEquals(oses, actual_oses)
|
| -
|
| - def test_convert_map_to_isolate_dict(self):
|
| - values = {
|
| - 'command': {
|
| - ('echo', 'Hello World'): set(['atari']),
|
| - ('echo', 'You should get an Atari'): set(['!atari']),
|
| - },
|
| - KEY_TRACKED: {
|
| - 'a': set([None]),
|
| - 'c': set(['atari']),
|
| - 'e': set(['!atari']),
|
| - 'g': set(['amiga']),
|
| - 'x': set([None]),
|
| - },
|
| - KEY_UNTRACKED: {
|
| - 'b': set([None]),
|
| - 'd': set(['atari']),
|
| - 'f': set(['!atari']),
|
| - 'h': set(['!coleco']),
|
| - },
|
| - KEY_TOUCHED: {
|
| - 'touched': set([None]),
|
| - 'touched_a': set(['atari']),
|
| - 'touched_e': set(['!atari']),
|
| - },
|
| - 'read_only': {
|
| - None: set(['coleco', 'dendy']),
|
| - False: set(['amiga']),
|
| - True: set(['atari']),
|
| - },
|
| - }
|
| - oses = set(['amiga', 'atari', 'coleco', 'dendy'])
|
| - expected = {
|
| - 'variables': {
|
| - KEY_TRACKED: ['a', 'x'],
|
| - KEY_UNTRACKED: ['b'],
|
| - KEY_TOUCHED: ['touched'],
|
| - },
|
| - 'conditions': [
|
| - ['OS=="amiga"', {
|
| - 'variables': {
|
| - KEY_TRACKED: ['g'],
|
| - 'read_only': False,
|
| - },
|
| - }],
|
| - ['OS=="atari"', {
|
| - 'variables': {
|
| - 'command': ['echo', 'Hello World'],
|
| - KEY_TRACKED: ['c'],
|
| - KEY_UNTRACKED: ['d'],
|
| - KEY_TOUCHED: ['touched_a'],
|
| - 'read_only': True,
|
| - },
|
| - }, {
|
| - 'variables': {
|
| - 'command': ['echo', 'You should get an Atari'],
|
| - KEY_TRACKED: ['e'],
|
| - KEY_UNTRACKED: ['f'],
|
| - KEY_TOUCHED: ['touched_e'],
|
| - },
|
| - }],
|
| - ['OS=="coleco"', {
|
| - }, {
|
| - 'variables': {
|
| - KEY_UNTRACKED: ['h'],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - self.assertEquals(
|
| - expected, isolate.convert_map_to_isolate_dict(values, oses))
|
| -
|
| - def test_merge_two_empty(self):
|
| - # Flat stay flat. Pylint is confused about union() return type.
|
| - # pylint: disable=E1103
|
| - actual = isolate.union(
|
| - isolate.union(
|
| - isolate.Configs([], None),
|
| - isolate.load_isolate_as_config({}, None, [])),
|
| - isolate.load_isolate_as_config({}, None, [])).flatten()
|
| - self.assertEquals({}, actual)
|
| -
|
| - def test_merge_empty(self):
|
| - actual = isolate.convert_map_to_isolate_dict(
|
| - *isolate.reduce_inputs(*isolate.invert_map({})))
|
| - self.assertEquals({}, actual)
|
| -
|
| - def test_load_two_conditions(self):
|
| - linux = {
|
| - 'conditions': [
|
| - ['OS=="linux"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_linux',
|
| - 'file_common',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - mac = {
|
| - 'conditions': [
|
| - ['OS=="mac"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_mac',
|
| - 'file_common',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - expected = {
|
| - 'linux': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_linux'],
|
| - },
|
| - 'mac': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_mac'],
|
| - },
|
| - }
|
| - # Pylint is confused about union() return type.
|
| - # pylint: disable=E1103
|
| - configs = isolate.union(
|
| - isolate.union(
|
| - isolate.Configs([], None),
|
| - isolate.load_isolate_as_config(linux, None, [])),
|
| - isolate.load_isolate_as_config(mac, None, [])).flatten()
|
| - self.assertEquals(expected, configs)
|
| -
|
| - def test_load_three_conditions(self):
|
| - linux = {
|
| - 'conditions': [
|
| - ['OS=="linux"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_linux',
|
| - 'file_common',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - mac = {
|
| - 'conditions': [
|
| - ['OS=="mac"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_mac',
|
| - 'file_common',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - win = {
|
| - 'conditions': [
|
| - ['OS=="win"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_win',
|
| - 'file_common',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - expected = {
|
| - 'linux': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_linux'],
|
| - },
|
| - 'mac': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_mac'],
|
| - },
|
| - 'win': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_win'],
|
| - },
|
| - }
|
| - # Pylint is confused about union() return type.
|
| - # pylint: disable=E1103
|
| - configs = isolate.union(
|
| - isolate.union(
|
| - isolate.union(
|
| - isolate.Configs([], None),
|
| - isolate.load_isolate_as_config(linux, None, [])),
|
| - isolate.load_isolate_as_config(mac, None, [])),
|
| - isolate.load_isolate_as_config(win, None, [])).flatten()
|
| - self.assertEquals(expected, configs)
|
| -
|
| - def test_merge_three_conditions(self):
|
| - values = {
|
| - 'linux': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_linux'],
|
| - },
|
| - 'mac': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_mac'],
|
| - },
|
| - 'win': {
|
| - 'isolate_dependency_tracked': ['file_common', 'file_win'],
|
| - },
|
| - }
|
| - expected = {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_common',
|
| - ],
|
| - },
|
| - 'conditions': [
|
| - ['OS=="linux"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_linux',
|
| - ],
|
| - },
|
| - }],
|
| - ['OS=="mac"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_mac',
|
| - ],
|
| - },
|
| - }],
|
| - ['OS=="win"', {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - 'file_win',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - actual = isolate.convert_map_to_isolate_dict(
|
| - *isolate.reduce_inputs(*isolate.invert_map(values)))
|
| - self.assertEquals(expected, actual)
|
| -
|
| - def test_configs_comment(self):
|
| - # Pylint is confused with isolate.union() return type.
|
| - # pylint: disable=E1103
|
| - configs = isolate.union(
|
| - isolate.load_isolate_as_config({}, '# Yo dawg!\n# Chill out.\n', []),
|
| - isolate.load_isolate_as_config({}, None, []))
|
| - self.assertEquals('# Yo dawg!\n# Chill out.\n', configs.file_comment)
|
| -
|
| - configs = isolate.union(
|
| - isolate.load_isolate_as_config({}, None, []),
|
| - isolate.load_isolate_as_config({}, '# Yo dawg!\n# Chill out.\n', []))
|
| - self.assertEquals('# Yo dawg!\n# Chill out.\n', configs.file_comment)
|
| -
|
| - # Only keep the first one.
|
| - configs = isolate.union(
|
| - isolate.load_isolate_as_config({}, '# Yo dawg!\n', []),
|
| - isolate.load_isolate_as_config({}, '# Chill out.\n', []))
|
| - self.assertEquals('# Yo dawg!\n', configs.file_comment)
|
| -
|
| - def test_extract_comment(self):
|
| - self.assertEquals(
|
| - '# Foo\n# Bar\n', isolate.extract_comment('# Foo\n# Bar\n{}'))
|
| - self.assertEquals('', isolate.extract_comment('{}'))
|
| -
|
| - def _test_pretty_print_impl(self, value, expected):
|
| - actual = cStringIO.StringIO()
|
| - isolate.pretty_print(value, actual)
|
| - self.assertEquals(expected, actual.getvalue())
|
| -
|
| - def test_pretty_print_empty(self):
|
| - self._test_pretty_print_impl({}, '{\n}\n')
|
| -
|
| - def test_pretty_print_mid_size(self):
|
| - value = {
|
| - 'variables': {
|
| - 'bar': [
|
| - 'file1',
|
| - 'file2',
|
| - ],
|
| - },
|
| - 'conditions': [
|
| - ['OS=\"foo\"', {
|
| - 'variables': {
|
| - isolate.KEY_UNTRACKED: [
|
| - 'dir1',
|
| - 'dir2',
|
| - ],
|
| - isolate.KEY_TRACKED: [
|
| - 'file4',
|
| - 'file3',
|
| - ],
|
| - 'command': ['python', '-c', 'print "H\\i\'"'],
|
| - 'read_only': True,
|
| - 'relative_cwd': 'isol\'at\\e',
|
| - },
|
| - }],
|
| - ['OS=\"bar\"', {
|
| - 'variables': {},
|
| - }, {
|
| - 'variables': {},
|
| - }],
|
| - ],
|
| - }
|
| - expected = (
|
| - "{\n"
|
| - " 'variables': {\n"
|
| - " 'bar': [\n"
|
| - " 'file1',\n"
|
| - " 'file2',\n"
|
| - " ],\n"
|
| - " },\n"
|
| - " 'conditions': [\n"
|
| - " ['OS=\"foo\"', {\n"
|
| - " 'variables': {\n"
|
| - " 'command': [\n"
|
| - " 'python',\n"
|
| - " '-c',\n"
|
| - " 'print \"H\\i\'\"',\n"
|
| - " ],\n"
|
| - " 'relative_cwd': 'isol\\'at\\\\e',\n"
|
| - " 'read_only': True\n"
|
| - " 'isolate_dependency_tracked': [\n"
|
| - " 'file4',\n"
|
| - " 'file3',\n"
|
| - " ],\n"
|
| - " 'isolate_dependency_untracked': [\n"
|
| - " 'dir1',\n"
|
| - " 'dir2',\n"
|
| - " ],\n"
|
| - " },\n"
|
| - " }],\n"
|
| - " ['OS=\"bar\"', {\n"
|
| - " 'variables': {\n"
|
| - " },\n"
|
| - " }, {\n"
|
| - " 'variables': {\n"
|
| - " },\n"
|
| - " }],\n"
|
| - " ],\n"
|
| - "}\n")
|
| - self._test_pretty_print_impl(value, expected)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - logging.basicConfig(
|
| - level=logging.DEBUG if '-v' in sys.argv else logging.ERROR,
|
| - format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s')
|
| - unittest.main()
|
|
|