def test_option_choices(self): with self.assertRaises(InvalidOptionError) as e: Option('--option', nargs=3, choices=('a', 'b')) self.assertEquals(e.exception.message, 'Not enough `choices` for `nargs`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', nargs=1, choices=('a', 'b')) self.assertEquals(e.exception.message, 'A `default` must be given along with `choices`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', nargs='+', choices=('a', 'b')) self.assertEquals(e.exception.message, 'A `default` must be given along with `choices`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default='c', choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default=('a', 'c',), choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default=('c',), choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") option = Option('--with-option', nargs='+', choices=('a', 'b')) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=c') self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'") value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) option = Option('--without-option', nargs='*', default='a', choices=('a', 'b')) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=c') self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'") value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) # Test nargs inference from choices option = Option('--with-option', choices=('a', 'b')) self.assertEqual(option.nargs, 1)
def test_option_choices(self): with self.assertRaises(InvalidOptionError): Option('--option', nargs=3, choices=('a', 'b')) with self.assertRaises(InvalidOptionError): Option('--without-option', nargs=1, choices=('a', 'b')) with self.assertRaises(InvalidOptionError): Option('--without-option', nargs='+', choices=('a', 'b')) with self.assertRaises(InvalidOptionError): Option('--without-option', default='c', choices=('a', 'b')) with self.assertRaises(InvalidOptionError): Option('--without-option', default=('a', 'c',), choices=('a', 'b')) with self.assertRaises(InvalidOptionError): Option('--without-option', default=('c',), choices=('a', 'b')) option = Option('--with-option', nargs='+', choices=('a', 'b')) with self.assertRaises(InvalidOptionError): option.get_value('--with-option=c') value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) option = Option('--without-option', nargs='*', default='a', choices=('a', 'b')) with self.assertRaises(InvalidOptionError): option.get_value('--with-option=c') value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) # Test nargs inference from choices option = Option('--with-option', choices=('a', 'b')) self.assertEqual(option.nargs, 1)
def test_option_value(self, name='option', nargs=0, default=None): disabled = name.startswith(('disable-', 'without-')) if disabled: negOptionValue = PositiveOptionValue posOptionValue = NegativeOptionValue else: posOptionValue = PositiveOptionValue negOptionValue = NegativeOptionValue defaultValue = (PositiveOptionValue(default) if default else negOptionValue()) option = Option('--%s' % name, nargs=nargs, default=default) if nargs in (0, '?', '*') or disabled: value = option.get_value('--%s' % name, 'option') self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s' % name) if nargs == 1: self.assertEquals(e.exception.message, '--%s takes 1 value' % name) elif nargs == '+': self.assertEquals(e.exception.message, '--%s takes 1 or more values' % name) else: self.assertEquals(e.exception.message, '--%s takes 2 values' % name) value = option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') with self.assertRaises(AssertionError): value = option.get_value('MOZ_OPTION=', 'environment') with self.assertRaises(AssertionError): value = option.get_value('MOZ_OPTION=1', 'environment') with self.assertRaises(AssertionError): value = option.get_value('--foo') if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=' % name, 'option') self.assertEquals(value, PositiveOptionValue(('',))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=' % name) if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) else: self.assertEquals(e.exception.message, '--%s takes %d values' % (name, nargs)) if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=foo' % name, 'option') self.assertEquals(value, PositiveOptionValue(('foo',))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=foo' % name) if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) else: self.assertEquals(e.exception.message, '--%s takes %d values' % (name, nargs)) if nargs in (2, '*', '+') and not disabled: value = option.get_value('--%s=foo,bar' % name, 'option') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=foo,bar' % name, 'option') if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) elif nargs == '?': self.assertEquals(e.exception.message, '--%s takes 0 or 1 values' % name) else: self.assertEquals(e.exception.message, '--%s takes %d value%s' % (name, nargs, 's' if nargs != 1 else '')) option = Option('--%s' % name, env='MOZ_OPTION', nargs=nargs, default=default) if nargs in (0, '?', '*') or disabled: value = option.get_value('--%s' % name, 'option') self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s' % name) if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) elif nargs == '+': self.assertEquals(e.exception.message, '--%s takes 1 or more values' % name) else: self.assertEquals(e.exception.message, '--%s takes %d value%s' % (name, nargs, 's' if nargs != 1 else '')) value = option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value('MOZ_OPTION=', 'environment') self.assertEquals(value, NegativeOptionValue()) self.assertEquals(value.origin, 'environment') if nargs in (0, '?', '*'): value = option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue()) self.assertEquals(value.origin, 'environment') elif nargs in (1, '+'): value = option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue(('1',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes 2 values') if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=' % name, 'option') self.assertEquals(value, PositiveOptionValue(('',))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=' % name, 'option') if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) else: self.assertEquals(e.exception.message, '--%s takes %d values' % (name, nargs)) with self.assertRaises(AssertionError): value = option.get_value('--foo', 'option') if nargs in (1, '?', '*', '+'): value = option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(value, PositiveOptionValue(('foo',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes %d values' % nargs) if nargs in (2, '*', '+'): value = option.get_value('MOZ_OPTION=foo,bar', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('MOZ_OPTION=foo,bar', 'environment') if nargs == '?': self.assertEquals(e.exception.message, 'MOZ_OPTION takes 0 or 1 values') else: self.assertEquals(e.exception.message, 'MOZ_OPTION takes %d value%s' % (nargs, 's' if nargs != 1 else '')) if disabled: return option env_option = Option(env='MOZ_OPTION', nargs=nargs, default=default) with self.assertRaises(AssertionError): env_option.get_value('--%s' % name) value = env_option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = env_option.get_value('MOZ_OPTION=', 'environment') self.assertEquals(value, negOptionValue()) self.assertEquals(value.origin, 'environment') if nargs in (0, '?', '*'): value = env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, posOptionValue()) self.assertTrue(value) self.assertEquals(value.origin, 'environment') elif nargs in (1, '+'): value = env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue(('1',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes 2 values') with self.assertRaises(AssertionError) as e: env_option.get_value('--%s' % name) with self.assertRaises(AssertionError) as e: env_option.get_value('--foo') if nargs in (1, '?', '*', '+'): value = env_option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(value, PositiveOptionValue(('foo',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes %d values' % nargs) if nargs in (2, '*', '+'): value = env_option.get_value('MOZ_OPTION=foo,bar', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value('MOZ_OPTION=foo,bar', 'environment') if nargs == '?': self.assertEquals(e.exception.message, 'MOZ_OPTION takes 0 or 1 values') else: self.assertEquals(e.exception.message, 'MOZ_OPTION takes %d value%s' % (nargs, 's' if nargs != 1 else '')) return option
def test_option_choices(self): with self.assertRaises(InvalidOptionError) as e: Option('--option', nargs=3, choices=('a', 'b')) self.assertEquals(e.exception.message, 'Not enough `choices` for `nargs`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', nargs=1, choices=('a', 'b')) self.assertEquals(e.exception.message, 'A `default` must be given along with `choices`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', nargs='+', choices=('a', 'b')) self.assertEquals(e.exception.message, 'A `default` must be given along with `choices`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default='c', choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default=('a', 'c',), choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default=('c',), choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") option = Option('--with-option', nargs='+', choices=('a', 'b')) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=c') self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'") value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) option = Option('--without-option', nargs='*', default='a', choices=('a', 'b')) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=c') self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'") value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) # Test nargs inference from choices option = Option('--with-option', choices=('a', 'b')) self.assertEqual(option.nargs, 1) # Test "relative" values option = Option('--with-option', nargs='*', default=('b', 'c'), choices=('a', 'b', 'c', 'd')) value = option.get_value('--with-option=+d') self.assertEquals(PositiveOptionValue(('b', 'c', 'd')), value) value = option.get_value('--with-option=-b') self.assertEquals(PositiveOptionValue(('c',)), value) value = option.get_value('--with-option=-b,+d') self.assertEquals(PositiveOptionValue(('c','d')), value) # Adding something that is in the default is fine value = option.get_value('--with-option=+b') self.assertEquals(PositiveOptionValue(('b', 'c')), value) # Removing something that is not in the default is fine, as long as it # is one of the choices value = option.get_value('--with-option=-a') self.assertEquals(PositiveOptionValue(('b', 'c')), value) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=-e') self.assertEquals(e.exception.message, "'e' is not one of 'a', 'b', 'c', 'd'") # Other "not a choice" errors. with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=+e') self.assertEquals(e.exception.message, "'e' is not one of 'a', 'b', 'c', 'd'") with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=e') self.assertEquals(e.exception.message, "'e' is not one of 'a', 'b', 'c', 'd'")
def test_option_value(self, name='option', nargs=0, default=None): disabled = name.startswith(('disable-', 'without-')) if disabled: negOptionValue = PositiveOptionValue posOptionValue = NegativeOptionValue else: posOptionValue = PositiveOptionValue negOptionValue = NegativeOptionValue defaultValue = (PositiveOptionValue(default) if default else negOptionValue()) option = Option('--%s' % name, nargs=nargs, default=default) if nargs in (0, '?', '*') or disabled: value = option.get_value('--%s' % name, 'option') self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError): option.get_value('--%s' % name) value = option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') with self.assertRaises(AssertionError): value = option.get_value('MOZ_OPTION=', 'environment') with self.assertRaises(AssertionError): value = option.get_value('MOZ_OPTION=1', 'environment') with self.assertRaises(AssertionError): value = option.get_value('--foo') if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=' % name, 'option') self.assertEquals(value, PositiveOptionValue(('',))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError): option.get_value('--%s=' % name) if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=foo' % name, 'option') self.assertEquals(value, PositiveOptionValue(('foo',))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError): option.get_value('--%s=foo' % name) if nargs in (2, '*', '+') and not disabled: value = option.get_value('--%s=foo,bar' % name, 'option') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError): option.get_value('--%s=foo,bar' % name, 'option') option = Option('--%s' % name, env='MOZ_OPTION', nargs=nargs, default=default) if nargs in (0, '?', '*') or disabled: value = option.get_value('--%s' % name, 'option') self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError): option.get_value('--%s' % name) value = option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value('MOZ_OPTION=', 'environment') self.assertEquals(value, NegativeOptionValue()) self.assertEquals(value.origin, 'environment') if nargs in (0, '?', '*'): value = option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue()) self.assertEquals(value.origin, 'environment') elif nargs in (1, '+'): value = option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue(('1',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError): option.get_value('MOZ_OPTION=1', 'environment') if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=' % name, 'option') self.assertEquals(value, PositiveOptionValue(('',))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError): option.get_value('--%s=' % name, 'option') with self.assertRaises(AssertionError): value = option.get_value('--foo', 'option') if nargs in (1, '?', '*', '+'): value = option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(value, PositiveOptionValue(('foo',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError): option.get_value('MOZ_OPTION=foo', 'environment') if nargs in (2, '*', '+'): value = option.get_value('MOZ_OPTION=foo,bar', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError): option.get_value('MOZ_OPTION=foo,bar', 'environment') if disabled: return option env_option = Option(env='MOZ_OPTION', nargs=nargs, default=default) with self.assertRaises(AssertionError): env_option.get_value('--%s' % name) value = env_option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = env_option.get_value('MOZ_OPTION=', 'environment') self.assertEquals(value, negOptionValue()) self.assertEquals(value.origin, 'environment') if nargs in (0, '?', '*'): value = env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, posOptionValue()) self.assertTrue(value) self.assertEquals(value.origin, 'environment') elif nargs in (1, '+'): value = env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue(('1',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError): env_option.get_value('MOZ_OPTION=1', 'environment') with self.assertRaises(AssertionError): env_option.get_value('--%s' % name) with self.assertRaises(AssertionError): env_option.get_value('--foo') if nargs in (1, '?', '*', '+'): value = env_option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(value, PositiveOptionValue(('foo',))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError): env_option.get_value('MOZ_OPTION=foo', 'environment') if nargs in (2, '*', '+'): value = env_option.get_value('MOZ_OPTION=foo,bar', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError): env_option.get_value('MOZ_OPTION=foo,bar', 'environment') return option
def test_option_value(self, name='option', nargs=0, default=None): disabled = name.startswith(('disable-', 'without-')) if disabled: negOptionValue = PositiveOptionValue posOptionValue = NegativeOptionValue else: posOptionValue = PositiveOptionValue negOptionValue = NegativeOptionValue defaultValue = (PositiveOptionValue(default) if default else negOptionValue()) option = Option('--%s' % name, nargs=nargs, default=default) if nargs in (0, '?', '*') or disabled: value = option.get_value('--%s' % name, 'option') self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s' % name) if nargs == 1: self.assertEquals(e.exception.message, '--%s takes 1 value' % name) elif nargs == '+': self.assertEquals(e.exception.message, '--%s takes 1 or more values' % name) else: self.assertEquals(e.exception.message, '--%s takes 2 values' % name) value = option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') with self.assertRaises(AssertionError): value = option.get_value('MOZ_OPTION=', 'environment') with self.assertRaises(AssertionError): value = option.get_value('MOZ_OPTION=1', 'environment') with self.assertRaises(AssertionError): value = option.get_value('--foo') if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=' % name, 'option') self.assertEquals(value, PositiveOptionValue(('', ))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=' % name) if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) else: self.assertEquals(e.exception.message, '--%s takes %d values' % (name, nargs)) if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=foo' % name, 'option') self.assertEquals(value, PositiveOptionValue(('foo', ))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=foo' % name) if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) else: self.assertEquals(e.exception.message, '--%s takes %d values' % (name, nargs)) if nargs in (2, '*', '+') and not disabled: value = option.get_value('--%s=foo,bar' % name, 'option') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=foo,bar' % name, 'option') if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) elif nargs == '?': self.assertEquals(e.exception.message, '--%s takes 0 or 1 values' % name) else: self.assertEquals( e.exception.message, '--%s takes %d value%s' % (name, nargs, 's' if nargs != 1 else '')) option = Option('--%s' % name, env='MOZ_OPTION', nargs=nargs, default=default) if nargs in (0, '?', '*') or disabled: value = option.get_value('--%s' % name, 'option') self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s' % name) if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) elif nargs == '+': self.assertEquals(e.exception.message, '--%s takes 1 or more values' % name) else: self.assertEquals( e.exception.message, '--%s takes %d value%s' % (name, nargs, 's' if nargs != 1 else '')) value = option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = option.get_value('MOZ_OPTION=', 'environment') self.assertEquals(value, NegativeOptionValue()) self.assertEquals(value.origin, 'environment') if nargs in (0, '?', '*'): value = option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue()) self.assertEquals(value.origin, 'environment') elif nargs in (1, '+'): value = option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue(('1', ))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes 2 values') if nargs in (1, '?', '*', '+') and not disabled: value = option.get_value('--%s=' % name, 'option') self.assertEquals(value, PositiveOptionValue(('', ))) self.assertEquals(value.origin, 'option') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('--%s=' % name, 'option') if disabled: self.assertEquals(e.exception.message, 'Cannot pass a value to --%s' % name) else: self.assertEquals(e.exception.message, '--%s takes %d values' % (name, nargs)) with self.assertRaises(AssertionError): value = option.get_value('--foo', 'option') if nargs in (1, '?', '*', '+'): value = option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', ))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes %d values' % nargs) if nargs in (2, '*', '+'): value = option.get_value('MOZ_OPTION=foo,bar', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: option.get_value('MOZ_OPTION=foo,bar', 'environment') if nargs == '?': self.assertEquals(e.exception.message, 'MOZ_OPTION takes 0 or 1 values') else: self.assertEquals( e.exception.message, 'MOZ_OPTION takes %d value%s' % (nargs, 's' if nargs != 1 else '')) if disabled: return option env_option = Option(env='MOZ_OPTION', nargs=nargs, default=default) with self.assertRaises(AssertionError): env_option.get_value('--%s' % name) value = env_option.get_value('') self.assertEquals(value, defaultValue) self.assertEquals(value.origin, 'default') value = env_option.get_value('MOZ_OPTION=', 'environment') self.assertEquals(value, negOptionValue()) self.assertEquals(value.origin, 'environment') if nargs in (0, '?', '*'): value = env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, posOptionValue()) self.assertTrue(value) self.assertEquals(value.origin, 'environment') elif nargs in (1, '+'): value = env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(value, PositiveOptionValue(('1', ))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value('MOZ_OPTION=1', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes 2 values') with self.assertRaises(AssertionError) as e: env_option.get_value('--%s' % name) with self.assertRaises(AssertionError) as e: env_option.get_value('--foo') if nargs in (1, '?', '*', '+'): value = env_option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', ))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value('MOZ_OPTION=foo', 'environment') self.assertEquals(e.exception.message, 'MOZ_OPTION takes %d values' % nargs) if nargs in (2, '*', '+'): value = env_option.get_value('MOZ_OPTION=foo,bar', 'environment') self.assertEquals(value, PositiveOptionValue(('foo', 'bar'))) self.assertEquals(value.origin, 'environment') else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value('MOZ_OPTION=foo,bar', 'environment') if nargs == '?': self.assertEquals(e.exception.message, 'MOZ_OPTION takes 0 or 1 values') else: self.assertEquals( e.exception.message, 'MOZ_OPTION takes %d value%s' % (nargs, 's' if nargs != 1 else '')) return option
def test_option_choices(self): with self.assertRaises(InvalidOptionError) as e: Option('--option', nargs=3, choices=('a', 'b')) self.assertEquals(e.exception.message, 'Not enough `choices` for `nargs`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', nargs=1, choices=('a', 'b')) self.assertEquals(e.exception.message, 'A `default` must be given along with `choices`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', nargs='+', choices=('a', 'b')) self.assertEquals(e.exception.message, 'A `default` must be given along with `choices`') with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default='c', choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default=( 'a', 'c', ), choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") with self.assertRaises(InvalidOptionError) as e: Option('--without-option', default=('c', ), choices=('a', 'b')) self.assertEquals(e.exception.message, "The `default` value must be one of 'a', 'b'") option = Option('--with-option', nargs='+', choices=('a', 'b')) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=c') self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'") value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) option = Option('--without-option', nargs='*', default='a', choices=('a', 'b')) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=c') self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'") value = option.get_value('--with-option=b,a') self.assertTrue(value) self.assertEquals(PositiveOptionValue(('b', 'a')), value) # Test nargs inference from choices option = Option('--with-option', choices=('a', 'b')) self.assertEqual(option.nargs, 1) # Test "relative" values option = Option('--with-option', nargs='*', default=('b', 'c'), choices=('a', 'b', 'c', 'd')) value = option.get_value('--with-option=+d') self.assertEquals(PositiveOptionValue(('b', 'c', 'd')), value) value = option.get_value('--with-option=-b') self.assertEquals(PositiveOptionValue(('c', )), value) value = option.get_value('--with-option=-b,+d') self.assertEquals(PositiveOptionValue(('c', 'd')), value) # Adding something that is in the default is fine value = option.get_value('--with-option=+b') self.assertEquals(PositiveOptionValue(('b', 'c')), value) # Removing something that is not in the default is fine, as long as it # is one of the choices value = option.get_value('--with-option=-a') self.assertEquals(PositiveOptionValue(('b', 'c')), value) with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=-e') self.assertEquals(e.exception.message, "'e' is not one of 'a', 'b', 'c', 'd'") # Other "not a choice" errors. with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=+e') self.assertEquals(e.exception.message, "'e' is not one of 'a', 'b', 'c', 'd'") with self.assertRaises(InvalidOptionError) as e: option.get_value('--with-option=e') self.assertEquals(e.exception.message, "'e' is not one of 'a', 'b', 'c', 'd'")
def test_option_value(self, name="option", nargs=0, default=None): disabled = name.startswith(("disable-", "without-")) if disabled: negOptionValue = PositiveOptionValue posOptionValue = NegativeOptionValue else: posOptionValue = PositiveOptionValue negOptionValue = NegativeOptionValue defaultValue = PositiveOptionValue(default) if default else negOptionValue() option = Option("--%s" % name, nargs=nargs, default=default) if nargs in (0, "?", "*") or disabled: value = option.get_value("--%s" % name, "option") self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, "option") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("--%s" % name) if nargs == 1: self.assertEquals(str(e.exception), "--%s takes 1 value" % name) elif nargs == "+": self.assertEquals( str(e.exception), "--%s takes 1 or more values" % name ) else: self.assertEquals(str(e.exception), "--%s takes 2 values" % name) value = option.get_value("") self.assertEquals(value, defaultValue) self.assertEquals(value.origin, "default") value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, "default") with self.assertRaises(AssertionError): value = option.get_value("MOZ_OPTION=", "environment") with self.assertRaises(AssertionError): value = option.get_value("MOZ_OPTION=1", "environment") with self.assertRaises(AssertionError): value = option.get_value("--foo") if nargs in (1, "?", "*", "+") and not disabled: value = option.get_value("--%s=" % name, "option") self.assertEquals(value, PositiveOptionValue(("",))) self.assertEquals(value.origin, "option") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("--%s=" % name) if disabled: self.assertEquals( str(e.exception), "Cannot pass a value to --%s" % name ) else: self.assertEquals( str(e.exception), "--%s takes %d values" % (name, nargs) ) if nargs in (1, "?", "*", "+") and not disabled: value = option.get_value("--%s=foo" % name, "option") self.assertEquals(value, PositiveOptionValue(("foo",))) self.assertEquals(value.origin, "option") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("--%s=foo" % name) if disabled: self.assertEquals( str(e.exception), "Cannot pass a value to --%s" % name ) else: self.assertEquals( str(e.exception), "--%s takes %d values" % (name, nargs) ) if nargs in (2, "*", "+") and not disabled: value = option.get_value("--%s=foo,bar" % name, "option") self.assertEquals(value, PositiveOptionValue(("foo", "bar"))) self.assertEquals(value.origin, "option") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("--%s=foo,bar" % name, "option") if disabled: self.assertEquals( str(e.exception), "Cannot pass a value to --%s" % name ) elif nargs == "?": self.assertEquals(str(e.exception), "--%s takes 0 or 1 values" % name) else: self.assertEquals( str(e.exception), "--%s takes %d value%s" % (name, nargs, "s" if nargs != 1 else ""), ) option = Option("--%s" % name, env="MOZ_OPTION", nargs=nargs, default=default) if nargs in (0, "?", "*") or disabled: value = option.get_value("--%s" % name, "option") self.assertEquals(value, posOptionValue()) self.assertEquals(value.origin, "option") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("--%s" % name) if disabled: self.assertEquals( str(e.exception), "Cannot pass a value to --%s" % name ) elif nargs == "+": self.assertEquals( str(e.exception), "--%s takes 1 or more values" % name ) else: self.assertEquals( str(e.exception), "--%s takes %d value%s" % (name, nargs, "s" if nargs != 1 else ""), ) value = option.get_value("") self.assertEquals(value, defaultValue) self.assertEquals(value.origin, "default") value = option.get_value(None) self.assertEquals(value, defaultValue) self.assertEquals(value.origin, "default") value = option.get_value("MOZ_OPTION=", "environment") self.assertEquals(value, NegativeOptionValue()) self.assertEquals(value.origin, "environment") if nargs in (0, "?", "*"): value = option.get_value("MOZ_OPTION=1", "environment") self.assertEquals(value, PositiveOptionValue()) self.assertEquals(value.origin, "environment") elif nargs in (1, "+"): value = option.get_value("MOZ_OPTION=1", "environment") self.assertEquals(value, PositiveOptionValue(("1",))) self.assertEquals(value.origin, "environment") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("MOZ_OPTION=1", "environment") self.assertEquals(str(e.exception), "MOZ_OPTION takes 2 values") if nargs in (1, "?", "*", "+") and not disabled: value = option.get_value("--%s=" % name, "option") self.assertEquals(value, PositiveOptionValue(("",))) self.assertEquals(value.origin, "option") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("--%s=" % name, "option") if disabled: self.assertEquals( str(e.exception), "Cannot pass a value to --%s" % name ) else: self.assertEquals( str(e.exception), "--%s takes %d values" % (name, nargs) ) with self.assertRaises(AssertionError): value = option.get_value("--foo", "option") if nargs in (1, "?", "*", "+"): value = option.get_value("MOZ_OPTION=foo", "environment") self.assertEquals(value, PositiveOptionValue(("foo",))) self.assertEquals(value.origin, "environment") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("MOZ_OPTION=foo", "environment") self.assertEquals(str(e.exception), "MOZ_OPTION takes %d values" % nargs) if nargs in (2, "*", "+"): value = option.get_value("MOZ_OPTION=foo,bar", "environment") self.assertEquals(value, PositiveOptionValue(("foo", "bar"))) self.assertEquals(value.origin, "environment") else: with self.assertRaises(InvalidOptionError) as e: option.get_value("MOZ_OPTION=foo,bar", "environment") if nargs == "?": self.assertEquals(str(e.exception), "MOZ_OPTION takes 0 or 1 values") else: self.assertEquals( str(e.exception), "MOZ_OPTION takes %d value%s" % (nargs, "s" if nargs != 1 else ""), ) if disabled: return option env_option = Option(env="MOZ_OPTION", nargs=nargs, default=default) with self.assertRaises(AssertionError): env_option.get_value("--%s" % name) value = env_option.get_value("") self.assertEquals(value, defaultValue) self.assertEquals(value.origin, "default") value = env_option.get_value("MOZ_OPTION=", "environment") self.assertEquals(value, negOptionValue()) self.assertEquals(value.origin, "environment") if nargs in (0, "?", "*"): value = env_option.get_value("MOZ_OPTION=1", "environment") self.assertEquals(value, posOptionValue()) self.assertTrue(value) self.assertEquals(value.origin, "environment") elif nargs in (1, "+"): value = env_option.get_value("MOZ_OPTION=1", "environment") self.assertEquals(value, PositiveOptionValue(("1",))) self.assertEquals(value.origin, "environment") else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value("MOZ_OPTION=1", "environment") self.assertEquals(str(e.exception), "MOZ_OPTION takes 2 values") with self.assertRaises(AssertionError) as e: env_option.get_value("--%s" % name) with self.assertRaises(AssertionError) as e: env_option.get_value("--foo") if nargs in (1, "?", "*", "+"): value = env_option.get_value("MOZ_OPTION=foo", "environment") self.assertEquals(value, PositiveOptionValue(("foo",))) self.assertEquals(value.origin, "environment") else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value("MOZ_OPTION=foo", "environment") self.assertEquals(str(e.exception), "MOZ_OPTION takes %d values" % nargs) if nargs in (2, "*", "+"): value = env_option.get_value("MOZ_OPTION=foo,bar", "environment") self.assertEquals(value, PositiveOptionValue(("foo", "bar"))) self.assertEquals(value.origin, "environment") else: with self.assertRaises(InvalidOptionError) as e: env_option.get_value("MOZ_OPTION=foo,bar", "environment") if nargs == "?": self.assertEquals(str(e.exception), "MOZ_OPTION takes 0 or 1 values") else: self.assertEquals( str(e.exception), "MOZ_OPTION takes %d value%s" % (nargs, "s" if nargs != 1 else ""), ) return option
def test_option_choices(self): with self.assertRaises(InvalidOptionError) as e: Option("--option", nargs=3, choices=("a", "b")) self.assertEquals(str(e.exception), "Not enough `choices` for `nargs`") with self.assertRaises(InvalidOptionError) as e: Option("--without-option", nargs=1, choices=("a", "b")) self.assertEquals( str(e.exception), "A `default` must be given along with `choices`" ) with self.assertRaises(InvalidOptionError) as e: Option("--without-option", nargs="+", choices=("a", "b")) self.assertEquals( str(e.exception), "A `default` must be given along with `choices`" ) with self.assertRaises(InvalidOptionError) as e: Option("--without-option", default="c", choices=("a", "b")) self.assertEquals( str(e.exception), "The `default` value must be one of 'a', 'b'" ) with self.assertRaises(InvalidOptionError) as e: Option( "--without-option", default=( "a", "c", ), choices=("a", "b"), ) self.assertEquals( str(e.exception), "The `default` value must be one of 'a', 'b'" ) with self.assertRaises(InvalidOptionError) as e: Option("--without-option", default=("c",), choices=("a", "b")) self.assertEquals( str(e.exception), "The `default` value must be one of 'a', 'b'" ) option = Option("--with-option", nargs="+", choices=("a", "b")) with self.assertRaises(InvalidOptionError) as e: option.get_value("--with-option=c") self.assertEquals(str(e.exception), "'c' is not one of 'a', 'b'") value = option.get_value("--with-option=b,a") self.assertTrue(value) self.assertEquals(PositiveOptionValue(("b", "a")), value) option = Option("--without-option", nargs="*", default="a", choices=("a", "b")) with self.assertRaises(InvalidOptionError) as e: option.get_value("--with-option=c") self.assertEquals(str(e.exception), "'c' is not one of 'a', 'b'") value = option.get_value("--with-option=b,a") self.assertTrue(value) self.assertEquals(PositiveOptionValue(("b", "a")), value) # Test nargs inference from choices option = Option("--with-option", choices=("a", "b")) self.assertEqual(option.nargs, 1) # Test "relative" values option = Option( "--with-option", nargs="*", default=("b", "c"), choices=("a", "b", "c", "d") ) value = option.get_value("--with-option=+d") self.assertEquals(PositiveOptionValue(("b", "c", "d")), value) value = option.get_value("--with-option=-b") self.assertEquals(PositiveOptionValue(("c",)), value) value = option.get_value("--with-option=-b,+d") self.assertEquals(PositiveOptionValue(("c", "d")), value) # Adding something that is in the default is fine value = option.get_value("--with-option=+b") self.assertEquals(PositiveOptionValue(("b", "c")), value) # Removing something that is not in the default is fine, as long as it # is one of the choices value = option.get_value("--with-option=-a") self.assertEquals(PositiveOptionValue(("b", "c")), value) with self.assertRaises(InvalidOptionError) as e: option.get_value("--with-option=-e") self.assertEquals(str(e.exception), "'e' is not one of 'a', 'b', 'c', 'd'") # Other "not a choice" errors. with self.assertRaises(InvalidOptionError) as e: option.get_value("--with-option=+e") self.assertEquals(str(e.exception), "'e' is not one of 'a', 'b', 'c', 'd'") with self.assertRaises(InvalidOptionError) as e: option.get_value("--with-option=e") self.assertEquals(str(e.exception), "'e' is not one of 'a', 'b', 'c', 'd'")