def testRequired(self): opt = Parameter('year', required=True) self.assertEqual(opt.required, True) ret, err = opt.validate() self.assertEqual(ret, 1) self.assertIn("The parameter 'year' is marked as required, but no value is assigned.", err) with self.assertRaises(TypeError) as e: Parameter('year', required="wrong") self.assertIn( "The supplied 'required' argument must be a 'bool', but <class 'str'> was provided.", str(e.exception)) ret, err = opt.setValue(1980) self.assertEqual(ret, 0) self.assertEqual(err, None) ret, err = opt.validate() self.assertEqual(ret, 0) self.assertEqual(err, None) ret, err = opt.setValue(None) self.assertEqual(ret, 1) self.assertIn("'year' was defined as required", err) self.assertIn("a value of None may not be utilized.", err)
def testSetRequired(self): opt = Parameter('year') self.assertEqual(opt.required, False) retcode, msg = opt.setRequired(True) self.assertEqual(retcode, 0) self.assertEqual(msg, None) self.assertEqual(opt.required, True) retcode, msg = opt.validate() self.assertEqual(retcode, 1) self.assertEqual(msg, "The parameter 'year' is marked as required, but no value is assigned.") opt.setValue(1980) retcode, msg = opt.validate() self.assertEqual(retcode, 0) self.assertEqual(msg, None) retcode, msg = opt.setRequired(False) self.assertEqual(retcode, 1) self.assertEqual( msg, "The parameter 'year' has already been validated, the required state cannot be changed." ) retcode, msg = opt.setRequired('wrong') self.assertEqual(retcode, 1) self.assertEqual( msg, "For the parameters 'year', the supplied value for `setRequired` must be a `bool`, a <class 'str'> was provided." )
def testToString(self): opt = Parameter('year') s = str(opt) self.assertIn('Value: None', s) self.assertNotIn('Default', s) self.assertNotIn('Type', s) self.assertNotIn('Allow', s) opt = Parameter('year', default=1980, vtype=int, allow=(1949, 1954, 1977, 1980)) ret, err = opt.setValue(1954) self.assertEqual(ret, 0) self.assertEqual(err, None) s = str(opt) self.assertIn('Value: 1954', s) self.assertIn('Default: 1980', s) self.assertIn("Type(s): ('int',)", s) self.assertIn('Allow: (1949, 1954, 1977, 1980)', s) opt = Parameter('year', default=1980, doc="The best year.") s = str(opt) self.assertIn("best", s) opt = Parameter('date') sub = InputParameters() sub.add('year') opt.setValue(sub) s = str(opt) self.assertIn("date\n", s) self.assertIn("date_year\n", s)
def testNone(self): opt = Parameter('year') self.assertEqual(opt.value, None) ret, err = opt.setValue(1980) self.assertEqual(ret, 0) self.assertEqual(err, None) ret, err = opt.setValue(None) self.assertEqual(opt.value, None) self.assertEqual(ret, 0) self.assertEqual(err, None)
def testArray(self): opt = Parameter('foo', array=True) opt.setValue((1, 2, 3)) self.assertEqual(opt.value, (1, 2, 3)) self.assertTrue(opt.array) opt = Parameter('foo', default=(1, 2), array=True) self.assertEqual(opt._Parameter__array, True) self.assertEqual(opt.value, (1, 2)) ret, err = opt.setValue(4) self.assertEqual(ret, 1) self.assertIn( "'foo' was defined as an array, which require <class 'tuple'> for assignment, but a <class 'int'> was provided.", err) ret, err = opt.setValue((3, 4)) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, (3, 4)) ret, err = opt.setValue(('1', )) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, ('1', )) opt = Parameter('foo', vtype=int, array=True) self.assertEqual(opt._Parameter__array, True) self.assertIsNone(opt.value) ret, err = opt.setValue(4) self.assertEqual(ret, 1) self.assertIn( "'foo' was defined as an array, which require <class 'tuple'> for assignment, but a <class 'int'> was provided.", err) ret, err = opt.setValue(('x', )) self.assertEqual(ret, 1) self.assertIn( "The values within 'foo' must be of type (<class 'int'>,) but <class 'str'> provided.", err) self.assertIsNone(opt.value) ret, err = opt.setValue((1, )) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, (1, )) opt = Parameter('foo', vtype=int, array=True, allow=(1, 2, 3)) ret, err = opt.setValue((4, )) self.assertEqual(ret, 1) self.assertEqual( err, "Attempting to set 'foo' to a value of (4,) but only the following are allowed: (1, 2, 3)" ) self.assertEqual(opt.value, None)
def testVerify(self): opt = Parameter('year', verify=(lambda v: v > 1980, "The year must be greater than 1980.")) self.assertEqual(opt.value, None) ret, err = opt.setValue(1990) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, 1990) ret, err = opt.setValue(1949) self.assertEqual(ret, 1) self.assertIn( "Verify function failed with the given value of 1949\nThe year must be greater than 1980.", err) with self.assertRaises(TypeError) as e: Parameter('year', verify="wrong") self.assertIn( "The supplied 'verify' argument must be a 'tuple' with callable function and 'str' error message, but <class 'str'> was provided.", str(e.exception)) with self.assertRaises(TypeError) as e: Parameter('year', verify=("wrong", 1, 2)) self.assertIn( "The supplied 'verify' argument must be a 'tuple' with two items a callable function and 'str' error message, but <class 'tuple'> with 3 items was provided.", str(e.exception)) with self.assertRaises(TypeError) as e: Parameter('year', verify=("wrong", "message")) self.assertIn( "The first item in the 'verify' argument tuple must be a callable function with a single argument, but <class 'str'> was provided", str(e.exception)) with self.assertRaises(TypeError) as e: Parameter('year', verify=(lambda x, y: True, "message")) self.assertIn( "The first item in the 'verify' argument tuple must be a callable function with a single argument, but <class 'function'> was provided that has 2 arguments.", str(e.exception)) with self.assertRaises(TypeError) as e: Parameter('year', verify=(lambda v: True, 42)) self.assertIn( "The second item in the 'verify' argument tuple must be a string, but <class 'int'> was provided", str(e.exception))
def testDefault(self): opt = Parameter('foo', default=12345) self.assertEqual(opt.name, 'foo') self.assertEqual(opt.default, 12345) self.assertEqual(opt.value, 12345) opt.setValue('12345') self.assertEqual(opt.default, 12345) self.assertEqual(opt.value, '12345') opt = Parameter('bar', default=1980, vtype=int) ret, err = opt.setDefault('nope') self.assertEqual(ret, 1) self.assertIn("'bar' must be of type (<class 'int'>,) but <class 'str'> provided.", err) with self.assertRaises(TypeError) as e: p = Parameter('bar', default='wrong', vtype=int) self.assertIn("'bar' must be of type (<class 'int'>,) but <class 'str'> provided.", str(e.exception))
def testValue(self): opt = Parameter('foo') self.assertEqual(opt.name, 'foo') self.assertIsNone(opt.default) self.assertIsNone(opt.value) ret, err = opt.setValue(12345) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, 12345)
def testType(self): opt = Parameter('foo', vtype=int) self.assertEqual(opt.vtype, (int, )) self.assertIsNone(opt.default) self.assertIsNone(opt.value) ret, err = opt.setValue(1) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, 1) ret, err = opt.setValue('s') self.assertEqual(ret, 1) self.assertIn("'foo' must be of type (<class 'int'>,) but <class 'str'> provided.", err) with self.assertRaises(TypeError) as e: Parameter('foo', vtype='wrong') self.assertIn( "The supplied 'vtype' argument must be a 'type', but <class 'str'> was provided.", str(e.exception))
def testAllow(self): opt = Parameter('foo', allow=(1, 'two')) self.assertEqual(opt.allow, (1, 'two')) self.assertIsNone(opt.default) self.assertIsNone(opt.value) ret, err = opt.setValue(1) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, 1) ret, err = opt.setValue('two') self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, 'two') ret, err = opt.setValue(4) self.assertEqual(ret, 1) self.assertIn( "Attempting to set 'foo' to a value of 4 but only the following are allowed: (1, 'two')", err)
def testMutable(self): opt = Parameter('year', mutable=False) self.assertEqual(opt.mutable, False) with self.assertRaises(TypeError) as e: Parameter('year', mutable="wrong") self.assertIn( "The supplied 'mutable' argument must be a 'bool', but <class 'str'> was provided.", str(e.exception)) ret, err = opt.setValue(1980) self.assertEqual(ret, 0) self.assertEqual(err, None) ret, err = opt.validate() self.assertEqual(ret, 0) self.assertEqual(err, None) ret, err = opt.setValue(1980) self.assertEqual(ret, 1) self.assertIn("An attempt was made to change the value or default of 'year'", err)
def testTypeWithAllow(self): opt = Parameter('foo', vtype=int, allow=(1, 2)) self.assertIsNone(opt.default) self.assertIsNone(opt.value) ret, err = opt.setValue(2) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, 2) ret, err = opt.setValue(1) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.value, 1) ret, err = opt.setValue(4) self.assertEqual(ret, 1) self.assertIn( "Attempting to set 'foo' to a value of 4 but only the following are allowed: (1, 2)", err) self.assertEqual(opt.value, 1)
def testIsSetByUser(self): opt = Parameter('year') self.assertEqual(opt.is_set_by_user, False) ret, err = opt.setValue(1980) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.is_set_by_user, True) opt = Parameter('year') self.assertEqual(opt.is_set_by_user, False) ret, err = opt.setDefault(1980) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.is_set_by_user, True) opt = Parameter('year', default=1949) self.assertEqual(opt.is_set_by_user, False) ret, err = opt.setValue(1980) self.assertEqual(ret, 0) self.assertEqual(err, None) self.assertEqual(opt.is_set_by_user, True)
def testSize(self): opt = Parameter('foo', size=4) self.assertEqual(opt.size, 4) self.assertEqual(opt._Parameter__array, True) self.assertEqual(opt._Parameter__size, 4) ret, err = opt.setValue((1, 2, 3)) self.assertEqual(ret, 1) self.assertIn( "'foo' was defined as an array with length 4 but a value with length 3 was provided.", err) with self.assertRaises(TypeError) as e: Parameter('foo', size='wrong') self.assertIn( "The supplied 'size' argument must be a 'int', but <class 'str'> was provided.", str(e.exception))
def testIsInstance(self): opt = Parameter('year') self.assertFalse(opt.isInstance(float)) opt.setValue(1980) self.assertTrue(opt.isInstance(int))