Skip to content

Commit 1bcb86a

Browse files
committed
OrExpression (without description) to make every assertion expression based
1 parent 0b60d6b commit 1bcb86a

File tree

6 files changed

+174
-0
lines changed

6 files changed

+174
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.itarray.automotion.internal.properties;
2+
3+
import net.itarray.automotion.internal.geometry.ExtendGiving;
4+
import net.itarray.automotion.internal.geometry.MetricSpace;
5+
import net.itarray.automotion.validation.properties.Expression;
6+
7+
public class OrExpression implements Expression<Boolean> {
8+
private final Expression<Boolean> left;
9+
private final Expression<Boolean> right;
10+
11+
public OrExpression(Expression<Boolean> left, Expression<Boolean> right) {
12+
this.left = left;
13+
this.right = right;
14+
}
15+
16+
@Override
17+
public <V extends MetricSpace<V>> Boolean evaluateIn(Context context, ExtendGiving<V> direction) {
18+
return left.evaluateIn(context, direction) || right.evaluateIn(context, direction);
19+
}
20+
21+
@Override
22+
public <V extends MetricSpace<V>> String getDescription(Context context, ExtendGiving<V> direction) {
23+
return null;
24+
}
25+
}

src/main/java/net/itarray/automotion/validation/properties/Expression.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.itarray.automotion.internal.properties.BinaryExpression;
99
import net.itarray.automotion.internal.properties.ConstantExpression;
1010
import net.itarray.automotion.internal.properties.Context;
11+
import net.itarray.automotion.internal.properties.OrExpression;
1112
import net.itarray.automotion.internal.properties.PagePercentage;
1213
import net.itarray.automotion.internal.properties.PagePercentageOrPixels;
1314
import net.itarray.automotion.internal.properties.PercentReference;
@@ -65,4 +66,8 @@ default <V extends MetricSpace<V>> String getRepeatedDescription(Context context
6566
static Expression<Boolean> and(Expression<Boolean> left, Expression<Boolean> right) {
6667
return new AndExpression(left, right);
6768
}
69+
70+
static Expression<Boolean> or(Expression<Boolean> left, Expression<Boolean> right) {
71+
return new OrExpression(left, right);
72+
}
6873
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.itarray.automotion.tests.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.properties.ConstantExpression;
5+
import net.itarray.automotion.validation.properties.Expression;
6+
import org.junit.Before;
7+
import org.junit.Test;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
public class FalseOrFalseExpressionTest {
12+
13+
private Expression<Boolean> leftOrRight;
14+
15+
@Before
16+
public void setUp() {
17+
Expression<Boolean> left = new ConstantExpression<>(false);
18+
Expression<Boolean> right = new ConstantExpression<Boolean>(false);
19+
leftOrRight = Expression.or(left, right);
20+
}
21+
22+
@Test
23+
public void evaluatesToFalse() {
24+
TestContext testContext = new TestContext();
25+
Boolean result = leftOrRight.evaluateIn(testContext, Direction.RIGHT);
26+
assertThat(result).isFalse();
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.itarray.automotion.tests.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.properties.ConstantExpression;
5+
import net.itarray.automotion.validation.properties.Expression;
6+
import org.junit.Before;
7+
import org.junit.Test;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
public class FalseOrTrueExpressionTest {
12+
13+
private Expression<Boolean> leftOrRight;
14+
15+
@Before
16+
public void setUp() {
17+
Expression<Boolean> left = new ConstantExpression<>(false);
18+
Expression<Boolean> right = new ConstantExpression<Boolean>(true);
19+
leftOrRight = Expression.or(left, right);
20+
}
21+
22+
@Test
23+
public void evaluatesToTrue() {
24+
TestContext testContext = new TestContext();
25+
Boolean result = leftOrRight.evaluateIn(testContext, Direction.RIGHT);
26+
assertThat(result).isTrue();
27+
}
28+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package net.itarray.automotion.tests.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.geometry.ExtendGiving;
5+
import net.itarray.automotion.internal.geometry.MetricSpace;
6+
import net.itarray.automotion.internal.properties.ConstantExpression;
7+
import net.itarray.automotion.internal.properties.Context;
8+
import net.itarray.automotion.validation.properties.Expression;
9+
import org.junit.Before;
10+
import org.junit.Test;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
public class TrueOrFalseExpressionTest {
15+
16+
private Expression<Boolean> leftOrRight;
17+
private Boolean rightEvaluated;
18+
19+
@Before
20+
public void setUp() {
21+
rightEvaluated = false;
22+
Expression<Boolean> left = new ConstantExpression<>(true);
23+
Expression<Boolean> right = new ConstantExpression<Boolean>(false) {
24+
@Override
25+
public <V extends MetricSpace<V>> Boolean evaluateIn(Context context, ExtendGiving<V> direction) {
26+
rightEvaluated = true;
27+
return super.evaluateIn(context, direction);
28+
}
29+
};
30+
leftOrRight = Expression.or(left, right);
31+
}
32+
33+
@Test
34+
public void evaluatesToTrue() {
35+
TestContext testContext = new TestContext();
36+
Boolean result = leftOrRight.evaluateIn(testContext, Direction.RIGHT);
37+
assertThat(result).isTrue();
38+
}
39+
40+
@Test
41+
public void doesNotEvaluateTheRightExpression() {
42+
assertThat(rightEvaluated).isFalse();
43+
}
44+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package net.itarray.automotion.tests.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.geometry.ExtendGiving;
5+
import net.itarray.automotion.internal.geometry.MetricSpace;
6+
import net.itarray.automotion.internal.properties.ConstantExpression;
7+
import net.itarray.automotion.internal.properties.Context;
8+
import net.itarray.automotion.validation.properties.Expression;
9+
import org.junit.Before;
10+
import org.junit.Test;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
public class TrueOrTrueExpressionTest {
15+
16+
private Expression<Boolean> leftOrRight;
17+
private Boolean rightEvaluated;
18+
19+
@Before
20+
public void setUp() {
21+
rightEvaluated = false;
22+
Expression<Boolean> left = new ConstantExpression<>(true);
23+
Expression<Boolean> right = new ConstantExpression<Boolean>(true) {
24+
@Override
25+
public <V extends MetricSpace<V>> Boolean evaluateIn(Context context, ExtendGiving<V> direction) {
26+
rightEvaluated = true;
27+
return super.evaluateIn(context, direction);
28+
}
29+
};
30+
leftOrRight = Expression.or(left, right);
31+
}
32+
33+
@Test
34+
public void evaluatesToTrue() {
35+
TestContext testContext = new TestContext();
36+
Boolean result = leftOrRight.evaluateIn(testContext, Direction.RIGHT);
37+
assertThat(result).isTrue();
38+
}
39+
40+
@Test
41+
public void doesNotEvaluateTheRightExpression() {
42+
assertThat(rightEvaluated).isFalse();
43+
}
44+
}

0 commit comments

Comments
 (0)