Skip to content

Commit 120f038

Browse files
author
Denys Zaiats
committed
Merge remote-tracking branch 'origin/master'
2 parents 34ea0bc + acb4a71 commit 120f038

File tree

8 files changed

+100
-10
lines changed

8 files changed

+100
-10
lines changed

src/main/java/net/itarray/automotion/internal/HtmlReportBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ private void writeReport(String reportName) throws IOException, ParseException {
5858

5959
private Html buildHtml() throws IOException, ParseException {
6060
return new Html(null, new Style("background-color: rgb(255,250,250)")) {{
61+
super.setPrependDocType(true);
6162
new Head(this) {{
6263
new TitleTag(this) {{
6364
new NoTag(this, "Automotion report");

src/main/java/net/itarray/automotion/internal/UIElement.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.itarray.automotion.tools.helpers.TextFinder;
1212
import net.itarray.automotion.validation.properties.Condition;
1313
import net.itarray.automotion.internal.properties.ElementPropertyExpression;
14+
import net.itarray.automotion.validation.properties.Expression;
1415
import org.openqa.selenium.Dimension;
1516
import org.openqa.selenium.Point;
1617
import org.openqa.selenium.WebElement;
@@ -452,16 +453,12 @@ public void validateWidth(Condition<Scalar> condition, Context context, Errors e
452453
validateExtend(RIGHT, condition, context, errors);
453454
}
454455

455-
public void validateExtend(Direction direction, Condition condition, Context context, Errors errors) {
456+
public void validateExtend(Direction direction, Condition<Scalar> condition, Context context, Errors errors) {
456457
ElementPropertyExpression<Scalar> property = ElementPropertyExpression.extend(direction, this);
457-
Scalar value = property.evaluateIn(context, direction);
458-
if (!value.satisfies(condition, context, direction)) {
458+
Expression<Boolean> assertion = condition.applyTo(property);
459+
if (!assertion.evaluateIn(context, direction)) {
459460
errors.add(
460-
String.format("Expected %s to be %s. Actual %s is: %s",
461-
property.getDescription(context, direction),
462-
condition.getDescription(context, direction),
463-
property.getName(),
464-
value.toStringWithUnits(PIXELS)));
461+
assertion.getDescription(context, direction));
465462
}
466463
}
467464

src/main/java/net/itarray/automotion/internal/properties/BinaryScalarConditionWithFixedOperand.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.itarray.automotion.internal.properties;
22

3+
import com.webfirmframework.wffweb.tag.html.formatting.S;
34
import net.itarray.automotion.internal.geometry.Direction;
45
import net.itarray.automotion.internal.geometry.Scalar;
56
import net.itarray.automotion.validation.properties.Condition;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package net.itarray.automotion.internal.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.geometry.Group;
5+
import net.itarray.automotion.internal.geometry.Scalar;
6+
import net.itarray.automotion.validation.properties.Condition;
7+
import net.itarray.automotion.validation.properties.Expression;
8+
9+
public class ConditionedExpression<T> implements Expression<Boolean> {
10+
11+
private final Expression<T> toBeConditioned;
12+
private final Condition<T> toBeApplied;
13+
14+
public ConditionedExpression(Expression<T> toBeConditioned, Condition<T> toBeApplied) {
15+
this.toBeConditioned = toBeConditioned;
16+
this.toBeApplied = toBeApplied;
17+
}
18+
19+
@Override
20+
public Boolean evaluateIn(Context context, Direction direction) {
21+
return toBeApplied.isSatisfiedOn(toBeConditioned.evaluateIn(context, direction), context, direction);
22+
}
23+
24+
@Override
25+
public String getDescription(Context context, Direction direction) {
26+
T t = toBeConditioned.evaluateIn(context, direction);
27+
return String.format("Expected %s to be %s. Actual %s is: %s",
28+
toBeConditioned.getDescription(context, direction),
29+
toBeApplied.getDescription(context, direction),
30+
toBeConditioned.getRepeatedDescription(context, direction),
31+
(t instanceof Group) ? ((Group) t).toStringWithUnits("px") : t);
32+
}
33+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package net.itarray.automotion.internal.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.geometry.Scalar;
5+
import net.itarray.automotion.validation.properties.Expression;
6+
7+
public class ConstantExpression<T> implements Expression<T> {
8+
9+
private final T value;
10+
11+
public ConstantExpression(T value) {
12+
this.value = value;
13+
}
14+
15+
@Override
16+
public T evaluateIn(Context context, Direction direction) {
17+
return value;
18+
}
19+
20+
@Override
21+
public String getDescription(Context context, Direction direction) {
22+
return value.toString() + "px";
23+
}
24+
25+
@Override
26+
public String toString() {
27+
return value.toString();
28+
}
29+
30+
@Override
31+
public boolean equals(Object object) {
32+
if (!(object instanceof ConstantExpression)) {
33+
return false;
34+
}
35+
ConstantExpression other = (ConstantExpression) object;
36+
return value.equals(other.value);
37+
}
38+
39+
@Override
40+
public int hashCode() {
41+
return value.hashCode();
42+
}
43+
}

src/main/java/net/itarray/automotion/internal/properties/ElementPropertyExpression.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ public String getDescription(Context context, Direction direction) {
3333
return property.getDescriptionFor(element);
3434
}
3535

36-
public String getName() {
36+
@Override
37+
public String getRepeatedDescription(Context context, Direction direction) {
3738
return property.getName();
3839
}
40+
3941
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import net.itarray.automotion.internal.geometry.Scalar;
55
import net.itarray.automotion.internal.properties.Between;
66
import net.itarray.automotion.internal.properties.BinaryScalarConditionWithFixedOperand;
7+
import net.itarray.automotion.internal.properties.ConditionedExpression;
8+
import net.itarray.automotion.internal.properties.ConstantExpression;
79
import net.itarray.automotion.internal.properties.Context;
810
import net.itarray.automotion.internal.properties.PixelConstant;
911

@@ -110,7 +112,13 @@ public Condition<Scalar> and(Expression<Scalar> upperLimit) {
110112
}
111113
}
112114

113-
boolean isSatisfiedOn(T value, Context context, Direction direction);
115+
default boolean isSatisfiedOn(T value, Context context, Direction direction) {
116+
return applyTo(new ConstantExpression<T>(value)).evaluateIn(context, direction);
117+
}
118+
119+
default Expression<Boolean> applyTo(Expression<T> toBeConditioned) {
120+
return new ConditionedExpression<>(toBeConditioned, this);
121+
}
114122

115123
String getDescription(Context context, Direction direction);
116124
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,9 @@ static Expression<Scalar> percent(Scalar percentage, PercentReference reference)
3535
T evaluateIn(Context context, Direction direction);
3636

3737
String getDescription(Context context, Direction direction);
38+
39+
default String getRepeatedDescription(Context context, Direction direction) {
40+
return getDescription(context, direction);
41+
}
42+
3843
}

0 commit comments

Comments
 (0)