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

Commit c0fc9dd9 authored by Khaled Abdelmohsen's avatar Khaled Abdelmohsen Committed by Android (Google) Code Review
Browse files

Merge "Represent OpenFormula as list of formulas"

parents 6594be12 a4477fa5
Loading
Loading
Loading
Loading
+14 −25
Original line number Diff line number Diff line
@@ -16,9 +16,11 @@

package com.android.server.integrity.model;

import static com.android.internal.util.Preconditions.checkArgument;
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.
@@ -34,46 +36,33 @@ public final class OpenFormula extends Formula {
    }

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

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

    public Connector getConnector() {
        return mConnector;
    }

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

    public Formula getAuxiliaryFormula() {
        return mAuxiliaryFormula;
    }

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

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

@RunWith(JUnit4.class)
public class OpenFormulaTest {

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

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

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

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

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