Home | History | Annotate | Download | only in criterion
      1 # Copyright (c) 2014-2015, Intel Corporation
      2 # All rights reserved.
      3 #
      4 # Redistribution and use in source and binary forms, with or without modification,
      5 # are permitted provided that the following conditions are met:
      6 #
      7 # 1. Redistributions of source code must retain the above copyright notice, this
      8 # list of conditions and the following disclaimer.
      9 #
     10 # 2. Redistributions in binary form must reproduce the above copyright notice,
     11 # this list of conditions and the following disclaimer in the documentation and/or
     12 # other materials provided with the distribution.
     13 #
     14 # 3. Neither the name of the copyright holder nor the names of its contributors
     15 # may be used to endorse or promote products derived from this software without
     16 # specific prior written permission.
     17 #
     18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     19 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     21 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
     22 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     23 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     25 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     27 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 
     29 from clientsimulator.criterion.Criterion import Criterion
     30 from clientsimulator.criterion.Criterion import InvalidCriterionException
     31 
     32 
     33 class InclusiveCriterion(Criterion):
     34 
     35     """
     36     This file describe Inclusive Criterion Behavior
     37 
     38     This types of criterion can have several values at the same time
     39     """
     40 
     41     def __init__(self):
     42         super().__init__()
     43         self.__currentValues = set()
     44 
     45     @property
     46     def currentValue(self):
     47         return self.__currentValues
     48 
     49     @currentValue.setter
     50     def currentValue(self, stringNewVal):
     51         """
     52             Criterion current value setter
     53 
     54             :param stringNewVal: the string containing desired values
     55             separated by a space
     56             :type stringNewVal: string
     57         """
     58 
     59         # TODO: Avoid string splitting by using a list as parameter
     60         # Warning, we have chosen this solution for now because
     61         # it avoids TestVectorFactory to test criterions type before
     62         # to use this setter. Indeed, ExclusiveCriterion setter has
     63         # exactly the same prototype.
     64         valueList = stringNewVal.split()
     65 
     66         if self.noValue in valueList:
     67             # if we put default value, we empty the list first
     68             self.__currentValues = set()
     69             self.__currentValues.add(self.noValue)
     70         else:
     71             # We set a value, we have to remove default is it's set
     72             if self.noValue in self.__currentValues:
     73                 self.__currentValues.remove(self.noValue)
     74 
     75             for currentValue in valueList:
     76                 if currentValue in self._allowedValues \
     77                         and currentValue != self.noValue:
     78                     self.__currentValues.add(currentValue)
     79                 else:
     80                     raise InvalidCriterionException(
     81                         "Value {} is not allowed for {}.".format(
     82                             currentValue, self.__class__.__name__))
     83 
     84     def removeValue(self, currentValue):
     85         if currentValue in self.__currentValues:
     86             self.__currentValues.remove(currentValue)
     87         else:
     88             raise InvalidCriterionException(
     89                 "Value {} is not currently setted.".format(currentValue))
     90         # If there is no value, assume it's default
     91         if not self.__currentValues:
     92             self.__currentValues.append(self.noValue)
     93 
     94     def __str__(self):
     95         return self.__class__.__name__ + ' : ' + str(self.__currentValues)
     96