Skip to content

Commit

Permalink
Added 'findAll' function in page spec
Browse files Browse the repository at this point in the history
  • Loading branch information
ishubin committed Mar 14, 2015
1 parent e1b4051 commit 934f8af
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 23 deletions.
5 changes: 4 additions & 1 deletion src/main/java/net/mindengine/galen/parser/JsPageElement.java
Expand Up @@ -24,7 +24,10 @@
public class JsPageElement {
private PageElement pageElement;

public JsPageElement(PageElement pageElement) {
public String name;

public JsPageElement(String name, PageElement pageElement) {
this.name = name;
this.pageElement = pageElement;
}

Expand Down
Expand Up @@ -31,4 +31,12 @@ public interface VarsParserJsFunctions {
* @return
*/
JsPageElement find(String name);


/**
* Finds all page elements matching given regex
* @param regex - simple galen regex
* @return
*/
JsPageElement[] findAll(String regex);
}
Expand Up @@ -73,10 +73,24 @@ public Object call(org.mozilla.javascript.Context cx, Scriptable scope, Scriptab
scope.defineProperty("find", new BaseFunction() {
@Override
public Object call(org.mozilla.javascript.Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
if (args.length == 0 || !(args[0] instanceof String)) {
if (args.length == 0) {
throw new IllegalArgumentException("Should take string argument");
} else if (args[0] == null) {
throw new IllegalArgumentException("Pattern should not be null");
}
return jsFunctions.find(args[0].toString());
}
}, ScriptableObject.DONTENUM);

scope.defineProperty("findAll", new BaseFunction() {
@Override
public Object call(org.mozilla.javascript.Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
if (args.length == 0) {
throw new IllegalArgumentException("Should take one string argument, got none");
} else if (args[0] == null) {
throw new IllegalArgumentException("Pattern should not be null");
}
return jsFunctions.find((String)args[0]);
return jsFunctions.findAll(args[0].toString());
}
}, ScriptableObject.DONTENUM);

Expand Down
Expand Up @@ -120,6 +120,7 @@ public PageSpec read(InputStream inputStream, String fileLocation, String contex
return lineProcessor.buildPageSpec();
}

@Override
public int count(String regex) {
Pattern pattern = GalenUtils.convertObjectNameRegex(regex);

Expand All @@ -144,38 +145,52 @@ public int count(String regex) {
return collectedNames.size();
}

@Override
public JsPageElement find(String objectName) {
JsPageElement pageElement = findJsPageElement(objectName);
if (pageElement != null) {
return pageElement;
JsPageElement[] allElements = findAll(objectName);
if (allElements != null && allElements.length > 0) {
return allElements[0];
}
else {
return null;
}

if (childReaders != null) {
for (PageSpecReader childReader : childReaders) {
pageElement = childReader.find(objectName);
if (pageElement != null) {
return pageElement;
}
@Override
public JsPageElement[] findAll(String regex) {
Pattern pattern = GalenUtils.convertObjectNameRegex(regex);

ArrayList<JsPageElement> list = new ArrayList<JsPageElement>();
list.addAll(findJsPageElements(pattern));

if (childReaders != null) {
for (PageSpecReader childReader : childReaders) {
JsPageElement[] childReaderPageElements = childReader.findAll(regex);
if (childReaderPageElements != null) {
list.addAll(Arrays.asList(childReaderPageElements));
}
}
}
return null;

return list.toArray(new JsPageElement[0]);
}

private JsPageElement findJsPageElement(String objectName) {
private List<JsPageElement> findJsPageElements(Pattern pattern) {
List<JsPageElement> list = new LinkedList<JsPageElement>();

if (pageSpec != null) {
if (pageSpec.getObjects().containsKey(objectName)) {
Locator locator = pageSpec.getObjectLocator(objectName);
if (locator != null && page != null) {
PageElement pageElement = page.getObject(objectName, locator);
if (pageElement != null) {
return new JsPageElement(pageElement);
for (Map.Entry<String, Locator> entry : pageSpec.getObjects().entrySet()) {
String objectName = entry.getKey();
if (pattern.matcher(objectName).matches()) {
Locator locator = pageSpec.getObjectLocator(objectName);
if (locator != null && page != null) {
PageElement pageElement = page.getObject(objectName, locator);
if (pageElement != null) {
list.add(new JsPageElement(objectName, pageElement));
}
}
}
}
}
return null;
return list;
}

public Properties getProperties() {
Expand Down
Expand Up @@ -30,7 +30,7 @@ public class JsPageElementTest {

@Test
public void shouldSupportMethods() {
JsPageElement pageElement = new JsPageElement(new MockedPageElement(10, 20, 400, 40));
JsPageElement pageElement = new JsPageElement("someobject", new MockedPageElement(10, 20, 400, 40));

assertThat(pageElement.top(), is(20));
assertThat(pageElement.bottom(), is(60));
Expand Down
Expand Up @@ -48,6 +48,11 @@ public int count(String regex) {
public JsPageElement find(String name) {
return null;
}

@Override
public JsPageElement[] findAll(String regex) {
return new JsPageElement[0];
}
};


Expand Down

0 comments on commit 934f8af

Please sign in to comment.