Merge "Represent OpenFormula as list of formulas"

This commit is contained in:
Khaled Abdelmohsen
2019-10-09 18:10:00 +00:00
committed by Android (Google) Code Review
2 changed files with 27 additions and 35 deletions

View File

@@ -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));
}
}
}

View File

@@ -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)));
}
}