def test_program_config_local_config_raise(pack1_config0, merge, raise_on_error):
    pack1 = __import__("pack1")
    reload(pack1)
    program_config = ProgramConfig()
    program_config.parse(pack1)
    assert pack1.get_beta() == 5
    assert pack1.mod0.get_opt1() == 10
    program_config.configure(pack1_config0)
    assert pack1.get_beta() == 100
    assert pack1.mod0.get_opt1() == 666
    pack1_config1 = pack1_config0.copy()
    pack1_config1['pack1']['mod0']['opt0'] = 123
    if raise_on_error:
        with pytest.raises(InvalidTypeError) as exc_info:
            with program_config.local_config(pack1_config1, merge=merge, raise_on_error=raise_on_error) as (local_config, validation_result):
                pass
    else:
        with program_config.local_config(pack1_config1, merge=merge, raise_on_error=raise_on_error) as (local_config, validation_result):
            assert isinstance(local_config, Config)
            assert isinstance(validation_result, Validation)
            assert validation_result
            assert 'pack1' in validation_result
            assert 'mod0' in validation_result['pack1']
            assert 'opt0' in validation_result['pack1']['mod0']

    assert pack1.get_beta() == 100
    assert pack1.mod0.get_opt1() == 666
def test_program_config_local_config(pack1_config0, merge):
    pack1 = __import__("pack1")
    reload(pack1)
    program_config = ProgramConfig()
    program_config.parse(pack1)
    assert pack1.get_beta() == 5
    assert pack1.mod0.get_opt0() == "abracadabra"
    assert pack1.mod0.get_opt1() == 10
    assert pack1.mod1.get_opt0() == 3.5
    program_config.configure(pack1_config0)
    pack1_config1 = pack1_config0.copy()
    assert pack1.get_beta() == 100
    assert pack1.mod0.get_opt0() == "xyz"
    assert pack1.mod0.get_opt1() == 666
    assert pack1.mod1.get_opt0() == 6.66
    # [pack1]
    #     alpha = False
    #     beta = 100
    #     [mod0]
    #         opt0 = "xyz"
    #         opt1 = 666
    #     [mod1]
    #         opt0 = 6.66
    pack1_config1 = Config.from_string("""\
[pack1]
    [mod0]
        opt0 = "1xyz"
        opt1 = 1666
    [mod1]
        opt0 = 16.66
""", fmt="zirkon")

    with program_config.local_config(pack1_config1, merge=merge) as (local_config, validation_result):
        assert isinstance(local_config, Config)
        assert isinstance(validation_result, Validation)
        assert not validation_result
        print("=== local_config:")
        local_config.dump()
        if merge:
            beta_value = 100
        else:
            beta_value = 5
        assert pack1.get_beta() == beta_value
        assert pack1.mod0.get_opt0() == "1xyz"
        assert pack1.mod0.get_opt1() == 1666
        assert pack1.mod1.get_opt0() == 16.66

    assert pack1.get_beta() == 100
    assert pack1.mod0.get_opt0() == "xyz"
    assert pack1.mod0.get_opt1() == 666
    assert pack1.mod1.get_opt0() == 6.66
def test_program_config_local_config_None(pack1_config0, merge):
    pack1 = __import__("pack1")
    reload(pack1)
    program_config = ProgramConfig()
    program_config.parse(pack1)
    assert pack1.get_beta() == 5
    assert pack1.mod0.get_opt1() == 10
    program_config.configure(pack1_config0)
    assert pack1.get_beta() == 100
    assert pack1.mod0.get_opt1() == 666
    with program_config.local_config(None, merge=merge) as (local_config, validation_result):
        if merge:
            assert pack1.get_beta() == 100
            assert pack1.mod0.get_opt1() == 666
        else:
            assert pack1.get_beta() == 5
            assert pack1.mod0.get_opt1() == 10
    assert pack1.get_beta() == 100
    assert pack1.mod0.get_opt1() == 666