// Path: src/test/java/com/statemachinesystems/envy/common/FeatureTest.java
// public abstract class FeatureTest {
// 
//     protected Envy envy() {
//         return envy(valueParserFactory(), configSource());
//     }
// 
//     protected Envy envy(ValueParserFactory valueParserFactory) {
//         return envy(valueParserFactory, configSource());
//     }
// 
//     protected Envy envy(ConfigSource configSource) {
//         return envy(valueParserFactory(), configSource);
//     }
// 
//     protected Envy envy(ValueParserFactory valueParserFactory, ConfigSource configSource) {
//         return new Envy(valueParserFactory, configSource);
//     }
// 
//     protected ValueParserFactory valueParserFactory() {
//         List<ValueParser<?>> valueParsers = new ArrayList<ValueParser<?>>(Envy.defaultValueParsers());
//         return new ValueParserFactory(valueParsers);
//     }
// 
//     protected StubConfigSource configSource() {
//         return new StubConfigSource();
//     }
// }
// 
// Path: src/test/java/com/statemachinesystems/envy/common/StubConfigSource.java
// public class StubConfigSource implements ConfigSource {
// 
//     private final Map<Parameter, String> params;
// 
//     public StubConfigSource() {
//         this.params = new HashMap<Parameter, String>();
//     }
// 
//     public StubConfigSource add(String parameter, String value) {
//         params.put(new Parameter(parameter), value);
//         return this;
//     }
// 
//     @Override
//     public String getValue(Parameter parameter) {
//         return params.get(parameter);
//     }
// }


import com.statemachinesystems.envy.Name;
import com.statemachinesystems.envy.Prefix;
import com.statemachinesystems.envy.common.FeatureTest;
import com.statemachinesystems.envy.common.StubConfigSource;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
package com.statemachinesystems.envy.features;



public class PrefixTest extends FeatureTest {

    @Prefix("xxx")
    @SuppressWarnings("unused")
    interface A {
        int inherited();

        @Name("custom.name.inherited")
        int inheritedWithCustomName();

        @Name("xxx")
        int customNameOverridden();

        @Name("xxx")
        int customNameRemoved();
    }

    @Prefix("custom.prefix")
    interface B extends A {

        int plain();

        @Name("custom.name")
        int withCustomName();

        @Name("overridden.custom.name")
        int customNameOverridden();

        int customNameRemoved();
    }

    @Override
// Path: src/test/java/com/statemachinesystems/envy/common/FeatureTest.java
// public abstract class FeatureTest {
// 
//     protected Envy envy() {
//         return envy(valueParserFactory(), configSource());
//     }
// 
//     protected Envy envy(ValueParserFactory valueParserFactory) {
//         return envy(valueParserFactory, configSource());
//     }
// 
//     protected Envy envy(ConfigSource configSource) {
//         return envy(valueParserFactory(), configSource);
//     }
// 
//     protected Envy envy(ValueParserFactory valueParserFactory, ConfigSource configSource) {
//         return new Envy(valueParserFactory, configSource);
//     }
// 
//     protected ValueParserFactory valueParserFactory() {
//         List<ValueParser<?>> valueParsers = new ArrayList<ValueParser<?>>(Envy.defaultValueParsers());
//         return new ValueParserFactory(valueParsers);
//     }
// 
//     protected StubConfigSource configSource() {
//         return new StubConfigSource();
//     }
// }
// 
// Path: src/test/java/com/statemachinesystems/envy/common/StubConfigSource.java
// public class StubConfigSource implements ConfigSource {
// 
//     private final Map<Parameter, String> params;
// 
//     public StubConfigSource() {
//         this.params = new HashMap<Parameter, String>();
//     }
// 
//     public StubConfigSource add(String parameter, String value) {
//         params.put(new Parameter(parameter), value);
//         return this;
//     }
// 
//     @Override
//     public String getValue(Parameter parameter) {
//         return params.get(parameter);
//     }
// }


// Path: src/test/java/com/statemachinesystems/envy/features/PrefixTest.java
import com.statemachinesystems.envy.Name;
import com.statemachinesystems.envy.Prefix;
import com.statemachinesystems.envy.common.FeatureTest;
import com.statemachinesystems.envy.common.StubConfigSource;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

package com.statemachinesystems.envy.features;



public class PrefixTest extends FeatureTest {

    @Prefix("xxx")
    @SuppressWarnings("unused")
    interface A {
        int inherited();

        @Name("custom.name.inherited")
        int inheritedWithCustomName();

        @Name("xxx")
        int customNameOverridden();

        @Name("xxx")
        int customNameRemoved();
    }

    @Prefix("custom.prefix")
    interface B extends A {

        int plain();

        @Name("custom.name")
        int withCustomName();

        @Name("overridden.custom.name")
        int customNameOverridden();

        int customNameRemoved();
    }

    @Override
    protected StubConfigSource configSource() {