# coding: utf-8
import autopath
from tiramisu.option import IntOption, OptionDescription
from tiramisu.config import Config
from tiramisu.error import PropertiesOptionError


def make_description():
    u1 = IntOption('u1', '', properties=('frozen', 'mandatory', 'disabled', ))
    return OptionDescription('od1', '', [u1])


def test_permissive():
    descr = make_description()
    config = Config(descr)
    setting = config.cfgimpl_get_settings()
    config.read_write()
    props = []
    try:
        config.u1
    except PropertiesOptionError, err:
        props = err.proptype
    assert props == ['disabled']
    setting.set_permissive(('disabled',))
    props = []
    try:
        config.u1
    except PropertiesOptionError, err:
        props = err.proptype
    assert props == ['disabled']
    setting.append('permissive')
    config.u1
    setting.remove('permissive')
    props = []
    try:
        config.u1
    except PropertiesOptionError, err:
        props = err.proptype
    assert props == ['disabled']


def test_permissive_mandatory():
    descr = make_description()
    config = Config(descr)
    setting = config.cfgimpl_get_settings()
    config.read_only()
    props = []
    try:
        config.u1
    except PropertiesOptionError, err:
        props = err.proptype
    assert props == ['disabled', 'mandatory']
    setting.set_permissive(('mandatory', 'disabled',))
    setting.append('permissive')
    config.u1
    setting.remove('permissive')
    try:
        config.u1
    except PropertiesOptionError, err:
        props = err.proptype
    assert props == ['disabled', 'mandatory']


def test_permissive_frozen():
    descr = make_description()
    config = Config(descr)
    setting = config.cfgimpl_get_settings()
    config.read_write()
    setting.set_permissive(('frozen', 'disabled',))
    try:
        config.u1 = 1
    except PropertiesOptionError, err:
        props = err.proptype
    assert props == ['frozen', 'disabled']
    setting.append('permissive')
    config.u1 = 1
    assert config.u1 == 1
    setting.remove('permissive')
    try:
        config.u1 = 1
    except PropertiesOptionError, err:
        props = err.proptype
    assert props == ['frozen', 'disabled']