Skip to content

Commit 0a70d88

Browse files
committed
AndExpression (without description) to make every assertion expression based
1 parent d9584c7 commit 0a70d88

File tree

6 files changed

+177
-0
lines changed

6 files changed

+177
-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 AndExpression implements Expression<Boolean> {
8+
private final Expression<Boolean> left;
9+
private final Expression<Boolean> right;
10+
11+
public AndExpression(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
@@ -4,7 +4,9 @@
44
import net.itarray.automotion.internal.geometry.ExtendGiving;
55
import net.itarray.automotion.internal.geometry.MetricSpace;
66
import net.itarray.automotion.internal.geometry.Scalar;
7+
import net.itarray.automotion.internal.properties.AndExpression;
78
import net.itarray.automotion.internal.properties.BinaryExpression;
9+
import net.itarray.automotion.internal.properties.ConstantExpression;
810
import net.itarray.automotion.internal.properties.Context;
911
import net.itarray.automotion.internal.properties.PagePercentage;
1012
import net.itarray.automotion.internal.properties.PagePercentageOrPixels;
@@ -60,4 +62,7 @@ default <V extends MetricSpace<V>> String getRepeatedDescription(Context context
6062
return getDescription(context, direction);
6163
}
6264

65+
static Expression<Boolean> and(Expression<Boolean> left, Expression<Boolean> right) {
66+
return new AndExpression(left, right);
67+
}
6368
}
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 FalseAndFalseExpressionTest {
15+
16+
private Expression<Boolean> leftAndRight;
17+
private boolean rightEvaluated;
18+
19+
@Before
20+
public void setUp() {
21+
rightEvaluated = false;
22+
Expression<Boolean> left = new ConstantExpression<>(false);
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+
leftAndRight = Expression.and(left, right);
31+
}
32+
33+
@Test
34+
public void evaluatesToFalse() {
35+
TestContext testContext = new TestContext();
36+
Boolean result = leftAndRight.evaluateIn(testContext, Direction.RIGHT);
37+
assertThat(result).isFalse();
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 FalseAndTrueExpressionTest {
15+
16+
private Expression<Boolean> leftAndRight;
17+
private boolean rightEvaluated;
18+
19+
@Before
20+
public void setUp() {
21+
rightEvaluated = false;
22+
Expression<Boolean> left = new ConstantExpression<>(false);
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+
leftAndRight = Expression.and(left, right);
31+
}
32+
33+
@Test
34+
public void evaluatesToFalse() {
35+
TestContext testContext = new TestContext();
36+
Boolean result = leftAndRight.evaluateIn(testContext, Direction.RIGHT);
37+
assertThat(result).isFalse();
38+
}
39+
40+
@Test
41+
public void doesNotEvaluateTheRightExpression() {
42+
assertThat(rightEvaluated).isFalse();
43+
}
44+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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 TrueAndFalseExpressionTest {
15+
16+
private Expression<Boolean> leftAndRight;
17+
18+
@Before
19+
public void setUp() {
20+
Expression<Boolean> left = new ConstantExpression<>(true);
21+
Expression<Boolean> right = new ConstantExpression<Boolean>(false);
22+
leftAndRight = Expression.and(left, right);
23+
}
24+
25+
@Test
26+
public void evaluatesToFalse() {
27+
TestContext testContext = new TestContext();
28+
Boolean result = leftAndRight.evaluateIn(testContext, Direction.RIGHT);
29+
assertThat(result).isFalse();
30+
}
31+
}
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 TrueAndTrueExpressionTest {
12+
13+
private Expression<Boolean> leftAndRight;
14+
15+
@Before
16+
public void setUp() {
17+
Expression<Boolean> left = new ConstantExpression<>(true);
18+
Expression<Boolean> right = new ConstantExpression<Boolean>(true);
19+
leftAndRight = Expression.and(left, right);
20+
}
21+
22+
@Test
23+
public void evaluatesToFalse() {
24+
TestContext testContext = new TestContext();
25+
Boolean result = leftAndRight.evaluateIn(testContext, Direction.RIGHT);
26+
assertThat(result).isTrue();
27+
}
28+
}

0 commit comments

Comments
 (0)