Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4477fa5 authored by Khaled Abdelmohsen's avatar Khaled Abdelmohsen
Browse files

Represent OpenFormula as list of formulas

Use list of formulas inside OpenFormula, rather than using an exact 2
formulas. The list of formulas would help in representing multiple
formulas with the same connector, which would create less nesting.

Bug: 141979167
Test: atest FrameworksServicesTests:OpenFormulaTest
Change-Id: I8938c842dfe22c21bb8b4dd48e7ce2f639f33854
parent b71657a6
Loading
Loading
Loading
Loading
+14 −25
Original line number Original line Diff line number Diff line
@@ -16,9 +16,11 @@


package com.android.server.integrity.model;
package com.android.server.integrity.model;


import static com.android.internal.util.Preconditions.checkArgument;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.internal.util.Preconditions.checkNotNull;


import android.annotation.Nullable;
import java.util.Collections;
import java.util.List;


/**
/**
 * Represents a complex formula consisting of other simple and complex formulas.
 * Represents a complex formula consisting of other simple and complex formulas.
@@ -34,46 +36,33 @@ public final class OpenFormula extends Formula {
    }
    }


    private final Connector mConnector;
    private final Connector mConnector;
    private final Formula mMainFormula;
    private final List<Formula> mFormulas;
    private final Formula mAuxiliaryFormula;


    public OpenFormula(Connector connector, Formula mainFormula,
    public OpenFormula(Connector connector, List<Formula> formulas) {
            @Nullable Formula auxiliaryFormula) {
        validateFormulas(connector, formulas);
        validateAuxiliaryFormula(connector, auxiliaryFormula);
        this.mConnector = checkNotNull(connector);
        this.mConnector = checkNotNull(connector);
        this.mMainFormula = checkNotNull(mainFormula);
        this.mFormulas = Collections.unmodifiableList(checkNotNull(formulas));
        // TODO: Add validators on auxiliary formula
        this.mAuxiliaryFormula = auxiliaryFormula;
    }
    }


    public Connector getConnector() {
    public Connector getConnector() {
        return mConnector;
        return mConnector;
    }
    }


    public Formula getMainFormula() {
    public List<Formula> getFormulas() {
        return mMainFormula;
        return mFormulas;
    }
    }


    public Formula getAuxiliaryFormula() {
    private void validateFormulas(Connector connector, List<Formula> formulas) {
        return mAuxiliaryFormula;
    }

    private void validateAuxiliaryFormula(Connector connector, Formula auxiliaryFormula) {
        boolean validAuxiliaryFormula;
        switch (connector) {
        switch (connector) {
            case AND:
            case AND:
            case OR:
            case OR:
                validAuxiliaryFormula = (auxiliaryFormula != null);
                checkArgument(formulas.size() >= 2,
                        String.format("Connector %s must have at least 2 formulas", connector));
                break;
                break;
            case NOT:
            case NOT:
                validAuxiliaryFormula = (auxiliaryFormula == null);
                checkArgument(formulas.size() == 1,
                        String.format("Connector %s must have 1 formula only", connector));
                break;
                break;
            default:
                validAuxiliaryFormula = false;
        }
        if (!validAuxiliaryFormula) {
            throw new IllegalArgumentException(
                    String.format("Invalid formulas used for connector %s", connector));
        }
        }
    }
    }
}
}
+13 −10
Original line number Original line Diff line number Diff line
@@ -24,6 +24,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.runners.JUnit4;


import java.util.Arrays;
import java.util.Collections;

@RunWith(JUnit4.class)
@RunWith(JUnit4.class)
public class OpenFormulaTest {
public class OpenFormulaTest {


@@ -34,12 +37,11 @@ public class OpenFormulaTest {


    @Test
    @Test
    public void testValidOpenFormula() {
    public void testValidOpenFormula() {
        OpenFormula openFormula = new OpenFormula(OpenFormula.Connector.AND, ATOMIC_FORMULA_1,
        OpenFormula openFormula = new OpenFormula(OpenFormula.Connector.AND,
                ATOMIC_FORMULA_2);
                Arrays.asList(ATOMIC_FORMULA_1, ATOMIC_FORMULA_2));


        assertEquals(OpenFormula.Connector.AND, openFormula.getConnector());
        assertEquals(OpenFormula.Connector.AND, openFormula.getConnector());
        assertEquals(ATOMIC_FORMULA_1, openFormula.getMainFormula());
        assertEquals(Arrays.asList(ATOMIC_FORMULA_1, ATOMIC_FORMULA_2), openFormula.getFormulas());
        assertEquals(ATOMIC_FORMULA_2, openFormula.getAuxiliaryFormula());
    }
    }


    @Test
    @Test
@@ -47,9 +49,10 @@ public class OpenFormulaTest {
        assertExpectException(
        assertExpectException(
                IllegalArgumentException.class,
                IllegalArgumentException.class,
                /* expectedExceptionMessageRegex */
                /* expectedExceptionMessageRegex */
                String.format("Invalid formulas used for connector %s", OpenFormula.Connector.AND),
                String.format("Connector %s must have at least 2 formulas",
                () -> new OpenFormula(OpenFormula.Connector.AND, ATOMIC_FORMULA_1,
                        OpenFormula.Connector.AND),
                        null));
                () -> new OpenFormula(OpenFormula.Connector.AND,
                        Collections.singletonList(ATOMIC_FORMULA_1)));
    }
    }


    @Test
    @Test
@@ -57,8 +60,8 @@ public class OpenFormulaTest {
        assertExpectException(
        assertExpectException(
                IllegalArgumentException.class,
                IllegalArgumentException.class,
                /* expectedExceptionMessageRegex */
                /* expectedExceptionMessageRegex */
                String.format("Invalid formulas used for connector %s", OpenFormula.Connector.NOT),
                String.format("Connector %s must have 1 formula only", OpenFormula.Connector.NOT),
                () -> new OpenFormula(OpenFormula.Connector.NOT, ATOMIC_FORMULA_1,
                () -> new OpenFormula(OpenFormula.Connector.NOT,
                        ATOMIC_FORMULA_2));
                        Arrays.asList(ATOMIC_FORMULA_1, ATOMIC_FORMULA_2)));
    }
    }
}
}