1# Copyright 2016 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 copy
6import sets
7
8
9_global_test_context = None
10
11
12def GetCopy():
13  return copy.deepcopy(_global_test_context)
14
15
16class TypTestContext(object):
17  """ The TestContext that is used for passing data from the main test process
18  to typ's subprocesses. Those includes:
19     _ client_configs: list of client configs that contain infos about binaries
20        to use.
21     _ finder_options: the commandline options object. This is an instance of
22        telemetry.internal.browser.browser_options.BrowserFinderOptions.
23     _ test_class: the name of the test class to be run.
24     _ test_case_ids_to_run: the ids of the test cases to be run. e.g:
25        foo.bar.Test1, foo.bar.Test2,..
26
27
28  This object is designed to be pickle-able so that it can be easily pass from
29  the main process to test subprocesses. It also supports immutable mode to
30  ensure its data won't be changed by the subprocesses.
31  """
32  def __init__(self):
33    self._client_configs = []
34    self._finder_options = None
35    self._test_class = None
36    self._test_cases_ids_to_run = set()
37    self._frozen = False
38
39  def Freeze(self):
40    """ Makes the |self| object immutable.
41
42    Calling setter on |self|'s property will throw exception.
43    """
44    assert self._finder_options
45    assert self._test_class
46    self._frozen = True
47    self._test_cases_ids_to_run = sets.ImmutableSet(self._test_cases_ids_to_run)
48    self._client_configs = tuple(self._client_configs)
49
50  @property
51  def finder_options(self):
52    return self._finder_options
53
54  @property
55  def client_configs(self):
56    return self._client_configs
57
58  @property
59  def test_class(self):
60    return self._test_class
61
62  @property
63  def test_case_ids_to_run(self):
64    return self._test_cases_ids_to_run
65
66  @finder_options.setter
67  def finder_options(self, value):
68    assert not self._frozen
69    self._finder_options = value
70
71  @test_class.setter
72  def test_class(self, value):
73    assert not self._test_class
74    self._test_class = value
75