Home | History | Annotate | Download | only in atest
      1 # Copyright 2018, The Android Open Source Project
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #     http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 
     15 """
     16 Classes for test mapping related objects
     17 """
     18 
     19 
     20 import copy
     21 
     22 
     23 class TestDetail(object):
     24     """Stores the test details set in a TEST_MAPPING file."""
     25 
     26     def __init__(self, details):
     27         """TestDetail constructor
     28 
     29         Parse test detail from a dictionary, e.g.,
     30         {
     31           "name": "SettingsUnitTests",
     32           "options": [
     33             {
     34               "instrumentation-arg":
     35                   "annotation=android.platform.test.annotations.Presubmit"
     36             }
     37           ]
     38         }
     39 
     40         Args:
     41             details: A dictionary of test detail.
     42         """
     43         self.name = details['name']
     44         self.options = []
     45         options = details.get('options', [])
     46         for option in options:
     47             assert len(option) == 1, 'Each option can only have one key.'
     48             self.options.append(copy.deepcopy(option).popitem())
     49         self.options.sort(key=lambda o: o[0])
     50 
     51     def __str__(self):
     52         """String value of the TestDetail object."""
     53         if not self.options:
     54             return self.name
     55         options = ''
     56         for option in self.options:
     57             options += '%s: %s, ' % option
     58 
     59         return '%s (%s)' % (self.name, options.strip(', '))
     60 
     61     def __hash__(self):
     62         """Get the hash of TestDetail based on the details"""
     63         return hash(str(self))
     64 
     65     def __eq__(self, other):
     66         return str(self) == str(other)
     67