Skip to content

Commit a8ae908

Browse files
authored
Merge pull request #73 from ITArray/ExpressionLanguage
Expression language
2 parents 5f78ce1 + 41dab19 commit a8ae908

39 files changed

+624
-210
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@
153153
<artifactId>httpmime</artifactId>
154154
<version>4.5.3</version>
155155
</dependency>
156+
<dependency>
157+
<groupId>org.apache.commons</groupId>
158+
<artifactId>commons-math3</artifactId>
159+
<version>3.6.1</version>
160+
</dependency>
156161
<dependency>
157162
<groupId>com.googlecode.json-simple</groupId>
158163
<artifactId>json-simple</artifactId>

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ public void drawScreenshot(String rootElementReadableName, Errors errors) {
9090

9191
public void drawRootElement(UIElement rootElement) {
9292
drawingConfiguration.setRootElementStyle(graphics);
93-
int x = rootElement.getX();
94-
int y = rootElement.getY();
95-
graphics.drawRectByExtend(x, y, rootElement.getWidth(), rootElement.getHeight());
93+
int x = rootElement.getX().intValue();
94+
int y = rootElement.getY().intValue();
95+
graphics.drawRectByExtend(x, y, rootElement.getWidth().intValue(), rootElement.getHeight().intValue());
9696
}
9797
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ public void add(String message) {
3232
public void add(String message, UIElement element) {
3333
lastMessage = message;
3434
lastElement = element;
35-
float xContainer = element.getX();
36-
float yContainer = element.getY();
37-
float widthContainer = element.getWidth();
38-
float heightContainer = element.getHeight();
35+
float xContainer = element.getX().intValue();
36+
float yContainer = element.getY().intValue();
37+
float widthContainer = element.getWidth().intValue();
38+
float heightContainer = element.getHeight().intValue();
3939

4040
JSONObject details = new JSONObject();
4141
JSONObject elDetails = new JSONObject();

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ public void drawBottomOffsetLine() {
2727
public void draw(TransformedGraphics graphics, BufferedImage img, UIElement rootElement, DrawingConfiguration drawingConfiguration) {
2828
drawingConfiguration.setLinesStyle(graphics);
2929
if (drawLeftOffsetLine) {
30-
graphics.drawVerticalLine(rootElement.getX(), img.getHeight());
30+
graphics.drawVerticalLine(rootElement.getX().intValue(), img.getHeight());
3131
}
3232
if (drawRightOffsetLine) {
33-
graphics.drawVerticalLine(rootElement.getCornerX(), img.getHeight());
33+
graphics.drawVerticalLine(rootElement.getCorner().getX().intValue(), img.getHeight());
3434
}
3535
if (drawTopOffsetLine) {
36-
graphics.drawHorizontalLine(rootElement.getY(), img.getWidth());
36+
graphics.drawHorizontalLine(rootElement.getY().intValue(), img.getWidth());
3737
}
3838
if (drawBottomOffsetLine) {
39-
graphics.drawHorizontalLine(rootElement.getCornerY(), img.getWidth());
39+
graphics.drawHorizontalLine(rootElement.getCorner().getY().intValue(), img.getWidth());
4040
}
4141
}
4242

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

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

3+
import net.itarray.automotion.internal.geometry.Scalar;
34
import net.itarray.automotion.validation.ChunkUIElementValidator;
45
import net.itarray.automotion.validation.UISnapshot;
56
import net.itarray.automotion.validation.Units;
@@ -9,6 +10,8 @@
910

1011
import java.util.List;
1112
import java.util.Map;
13+
import java.util.SortedMap;
14+
import java.util.TreeMap;
1215
import java.util.concurrent.ConcurrentSkipListMap;
1316
import java.util.concurrent.atomic.AtomicLong;
1417

@@ -209,7 +212,7 @@ public ResponsiveUIChunkValidatorBase areBottomAligned() {
209212
*/
210213
@Override
211214
public ResponsiveUIChunkValidatorBase areCenteredOnPageVertically() {
212-
validateEqualLeftRightOffset(rootElements);
215+
validateCenteredOnPageVertically(rootElements);
213216
return this;
214217
}
215218

@@ -220,7 +223,7 @@ public ResponsiveUIChunkValidatorBase areCenteredOnPageVertically() {
220223
*/
221224
@Override
222225
public ResponsiveUIChunkValidatorBase areCenteredOnPageHorizontally() {
223-
validateEqualTopBottomOffset(rootElements);
226+
validateCenteredOnPageHorizontally(rootElements);
224227
return this;
225228
}
226229

@@ -251,12 +254,10 @@ private void validateElementsAreNotOverlapped(List<UIElement> elements) {
251254
}
252255

253256
private void validateGridAlignment(List<UIElement> elements, int columns, int rows) {
254-
ConcurrentSkipListMap<Integer, AtomicLong> map = new ConcurrentSkipListMap<>();
257+
SortedMap<Scalar, Integer> map = new TreeMap<>();
255258
for (UIElement element : elements) {
256-
Integer y = element.getY();
257-
258-
map.putIfAbsent(y, new AtomicLong(0));
259-
map.get(y).incrementAndGet();
259+
int oldCount = map.getOrDefault(element.getY(), 0);
260+
map.put(element.getY(), oldCount + 1);
260261
}
261262

262263
int mapSize = map.size();
@@ -269,12 +270,12 @@ private void validateGridAlignment(List<UIElement> elements, int columns, int ro
269270
if (columns > 0) {
270271
int errorLastLine = 0;
271272
int rowCount = 1;
272-
for (Map.Entry<Integer, AtomicLong> entry : map.entrySet()) {
273+
for (Map.Entry<Scalar, Integer> entry : map.entrySet()) {
273274
if (rowCount <= mapSize) {
274-
int actualInARow = entry.getValue().intValue();
275+
int actualInARow = entry.getValue();
275276
if (actualInARow != columns) {
276277
errorLastLine++;
277-
if (errorLastLine > 1) {
278+
if (errorLastLine > 1 || actualInARow > columns) {
278279
addError(String.format("Elements in a grid are not aligned properly in row #%d. Expected %d elements in a row. Actually it's %d", rowCount, columns, actualInARow));
279280
}
280281
}
@@ -321,8 +322,8 @@ private void validateSameWidth(List<UIElement> elements) {
321322
UIElement element = elements.get(i);
322323
UIElement elementToCompare = elements.get(i + 1);
323324
if (!element.hasSameWidthAs(elementToCompare)) {
324-
errors.add(String.format("Element #%d has different width. Element width is: [%d, %d]", (i + 1), element.getWidth(), element.getHeight()), element);
325-
errors.add(String.format("Element #%d has different width. Element width is: [%d, %d]", (i + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
325+
errors.add(String.format("Element #%d has different width. Element width is: [%s, %s]", (i + 1), element.getWidth(), element.getHeight()), element);
326+
errors.add(String.format("Element #%d has different width. Element width is: [%s, %s]", (i + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
326327
}
327328
}
328329
}
@@ -332,8 +333,8 @@ private void validateSameHeight(List<UIElement> elements) {
332333
UIElement element = elements.get(i);
333334
UIElement elementToCompare = elements.get(i + 1);
334335
if (!element.hasSameHeightAs(elementToCompare)) {
335-
errors.add(String.format("Element #%d has different height. Element height is: [%d, %d]", (i + 1), element.getWidth(), element.getHeight()), element);
336-
errors.add(String.format("Element #%d has different height. Element height is: [%d, %d]", (i + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
336+
errors.add(String.format("Element #%d has different height. Element height is: [%s, %s]", (i + 1), element.getWidth(), element.getHeight()), element);
337+
errors.add(String.format("Element #%d has different height. Element height is: [%s, %s]", (i + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
337338
}
338339
}
339340
}
@@ -343,8 +344,8 @@ private void validateSameSize(List<UIElement> elements) {
343344
UIElement element = elements.get(i);
344345
UIElement elementToCompare = elements.get(i + 1);
345346
if (!element.hasSameSizeAs(elementToCompare)) {
346-
errors.add(String.format("Element #%d has different size. Element size is: [%d, %d]", (i + 1), element.getWidth(), element.getHeight()), element);
347-
errors.add(String.format("Element #%d has different size. Element size is: [%d, %d]", (i + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
347+
errors.add(String.format("Element #%d has different size. Element size is: [%s, %s]", (i + 1), element.getWidth(), element.getHeight()), element);
348+
errors.add(String.format("Element #%d has different size. Element size is: [%s, %s]", (i + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
348349
}
349350

350351
}
@@ -356,8 +357,8 @@ private void validateHaveDifferentSizes(List<UIElement> elements) {
356357
for (int secondIndex = firstIndex+1; secondIndex < elements.size(); secondIndex++) {
357358
UIElement elementToCompare = elements.get(secondIndex);
358359
if (element.hasSameSizeAs(elementToCompare)) {
359-
errors.add(String.format("Element #%d has same size. Element size is: [%d, %d]", (firstIndex + 1), element.getWidth(), element.getHeight()), element);
360-
errors.add(String.format("Element #%d has same size. Element size is: [%d, %d]", (secondIndex + 1), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
360+
errors.add(String.format("Element #%d has same size. Element size is: [%s, %s]", (firstIndex + 1), element.getWidth(), element.getHeight()), element);
361+
errors.add(String.format("Element #%d has same size. Element size is: [%s, %s]", (secondIndex + 1), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
361362
}
362363
}
363364
}
@@ -369,8 +370,8 @@ private void validateHaveDifferentWidths(List<UIElement> elements) {
369370
for (int secondIndex = firstIndex+1; secondIndex < elements.size(); secondIndex++) {
370371
UIElement elementToCompare = elements.get(secondIndex);
371372
if (element.hasSameWidthAs(elementToCompare)) {
372-
errors.add(String.format("Element #%d has same width. Element width is: [%d, %d]", (firstIndex + 1), element.getWidth(), element.getHeight()), element);
373-
errors.add(String.format("Element #%d has same width. Element width is: [%d, %d]", (secondIndex + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
373+
errors.add(String.format("Element #%d has same width. Element width is: [%s, %s]", (firstIndex + 1), element.getWidth(), element.getHeight()), element);
374+
errors.add(String.format("Element #%d has same width. Element width is: [%s, %s]", (secondIndex + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
374375
}
375376
}
376377
}
@@ -382,22 +383,22 @@ private void validateNotSameHeight(List<UIElement> elements) {
382383
for (int secondIndex = firstIndex+1; secondIndex < elements.size(); secondIndex++) {
383384
UIElement elementToCompare = elements.get(secondIndex);
384385
if (element.hasSameHeightAs(elementToCompare)) {
385-
errors.add(String.format("Element #%d has same height. Element height is: [%d, %d]", (firstIndex + 1), element.getWidth(), element.getHeight()), element);
386-
errors.add(String.format("Element #%d has same height. Element height is: [%d, %d]", (secondIndex + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
386+
errors.add(String.format("Element #%d has same height. Element height is: [%s, %s]", (firstIndex + 1), element.getWidth(), element.getHeight()), element);
387+
errors.add(String.format("Element #%d has same height. Element height is: [%s, %s]", (secondIndex + 2), elementToCompare.getWidth(), elementToCompare.getHeight()), elementToCompare);
387388
}
388389
}
389390
}
390391
}
391392

392-
private void validateEqualLeftRightOffset(List<UIElement> elements) {
393-
for (UIElement element : elements) { // todo make naming consistant with other methods
394-
element.validateEqualLeftRightOffset(page, errors);
393+
private void validateCenteredOnPageVertically(List<UIElement> elements) {
394+
for (UIElement element : elements) {
395+
element.validateCenteredOnVertically(page, errors);
395396
}
396397
}
397398

398-
private void validateEqualTopBottomOffset(List<UIElement> elements) {
399-
for (UIElement element : elements) { // todo make naming consistant with other methods
400-
element.validateEqualTopBottomOffset(page, errors);
399+
private void validateCenteredOnPageHorizontally(List<UIElement> elements) {
400+
for (UIElement element : elements) {
401+
element.validateCenteredOnHorizontally(page, errors);
401402
}
402403
}
403404

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

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -132,23 +132,6 @@ private double getScaleFactor() {
132132
return factor;
133133
}
134134

135-
protected int toPixelsHorizontally(int coordinate) {
136-
return toPixels(Direction.RIGHT, coordinate);
137-
}
138-
139-
protected int toPixelsVertically(int coordinate) {
140-
return toPixels(Direction.DOWN, coordinate);
141-
}
142-
143-
private int toPixels(Direction direction, int coordinate) {
144-
if (getUnits().equals(Units.PX)) {
145-
return coordinate;
146-
} else {
147-
return (coordinate * page.getExtend(direction).getValue()) / 100;
148-
}
149-
}
150-
151-
152135
private int getYOffset() {
153136
if (isMobile() && getDriver().isAppiumWebContext() && getReport().isMobileTopBarOffset()) {
154137
if (isIOS() || isAndroid()) {

0 commit comments

Comments
 (0)