import static com.android.aconfig.test.Flags.FLAG_DISABLED_RO;
import static com.android.aconfig.test.Flags.FLAG_DISABLED_RW;
import static com.android.aconfig.test.Flags.FLAG_ENABLED_RO;
import static com.android.aconfig.test.Flags.FLAG_ENABLED_RW;
import static com.android.aconfig.test.Flags.disabledRo;
import static com.android.aconfig.test.Flags.disabledRw;
import static com.android.aconfig.test.Flags.enabledRo;
import static com.android.aconfig.test.Flags.enabledRw;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import com.android.aconfig.test.FakeFeatureFlagsImpl;
import com.android.aconfig.test.FeatureFlags;

@RunWith(JUnit4.class)
public final class AconfigTest {
    @Test
    public void testDisabledReadOnlyFlag() {
        assertEquals("com.android.aconfig.test.disabled_ro", FLAG_DISABLED_RO);
        assertFalse(disabledRo());
    }

    @Test
    public void testEnabledReadOnlyFlag() {
        assertEquals("com.android.aconfig.test.disabled_rw", FLAG_DISABLED_RW);
        // TODO: change to assertTrue(enabledRo()) when the build supports reading tests/*.values
        // (currently all flags are assigned the default READ_ONLY + DISABLED)
        assertFalse(enabledRo());
    }

    @Test
    public void testDisabledReadWriteFlag() {
        assertEquals("com.android.aconfig.test.enabled_ro", FLAG_ENABLED_RO);
        assertFalse(disabledRw());
    }

    @Test
    public void testEnabledReadWriteFlag() {
        assertEquals("com.android.aconfig.test.enabled_rw", FLAG_ENABLED_RW);
        // TODO: change to assertTrue(enabledRw()) when the build supports reading tests/*.values
        // (currently all flags are assigned the default READ_ONLY + DISABLED)
        assertFalse(enabledRw());
    }

    @Test
    public void testFakeFeatureFlagsImplNotImpl() {
        FeatureFlags featureFlags = new FakeFeatureFlagsImpl();
        assertThrows(UnsupportedOperationException.class, () -> featureFlags.enabledRw());
    }
}
