Skip to content

Commit

Permalink
#217 Added multi-objects parsing in speclang2
Browse files Browse the repository at this point in the history
  • Loading branch information
ishubin authored and hypery2k committed May 10, 2015
1 parent 7b294ec commit bab00a4
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 5 deletions.
Expand Up @@ -15,6 +15,7 @@
******************************************************************************/
package net.mindengine.galen.speclang2.reader.pagespec;

import net.mindengine.galen.page.Page;
import net.mindengine.galen.parser.ExpectWord;
import net.mindengine.galen.parser.Expectations;
import net.mindengine.galen.parser.StructNode;
Expand Down Expand Up @@ -66,8 +67,25 @@ private void parseObject(StructNode childNode) {

Locator locator = readLocatorFromString(childNode, objectName, locatorText.trim());
locator.setCorrections(corrections);
pageSpecProcessor.addObjectToSpec(objectName, locator);
addObjectsToSpec(objectName, locator);
}

private void addObjectsToSpec(String objectName, Locator locator) {
if (objectName.contains("*")) {
addMultiObjectsToSpec(objectName, locator);
} else {
pageSpecProcessor.addObjectToSpec(objectName, locator);
}
}

private void addMultiObjectsToSpec(String objectName, Locator locator) {
Page page = pageSpecProcessor.getBrowser().getPage();
int count = page.getObjectCount(locator);

for (int index = 1; index <= count; index++) {
pageSpecProcessor.addObjectToSpec(objectName.replace("*", Integer.toString(index)),
new Locator(locator.getLocatorType(), locator.getLocatorValue(), index));
}
}

private Locator readLocatorFromString(StructNode structNode, String objectName, String locatorText) {
Expand Down
Expand Up @@ -15,6 +15,7 @@
******************************************************************************/
package net.mindengine.galen.speclang2.reader.pagespec;

import net.mindengine.galen.browser.Browser;
import net.mindengine.galen.parser.StructNode;
import net.mindengine.galen.parser.SyntaxException;
import net.mindengine.galen.specs.page.Locator;
Expand All @@ -24,9 +25,11 @@

public class PageSpecProcessor {
private final PageSpec pageSpec;
private final Browser browser;

public PageSpecProcessor(PageSpec pageSpec) {
public PageSpecProcessor(PageSpec pageSpec, Browser browser) {
this.pageSpec = pageSpec;
this.browser = browser;
}

public PageSpec buildPageSpec() {
Expand All @@ -48,4 +51,8 @@ public void processSpecialInstruction(StructNode structNode) {
public void addObjectToSpec(String objectName, Locator locator) {
pageSpec.getObjects().put(objectName, locator);
}

public Browser getBrowser() {
return browser;
}
}
Expand Up @@ -15,6 +15,7 @@
******************************************************************************/
package net.mindengine.galen.speclang2.reader.pagespec;

import net.mindengine.galen.browser.Browser;
import net.mindengine.galen.parser.IndentationStructureParser;
import net.mindengine.galen.parser.StructNode;
import net.mindengine.galen.specs.reader.page.PageSpec;
Expand All @@ -25,13 +26,13 @@

public class PageSpecReaderV2 {

public PageSpec read(String path) throws IOException {
public PageSpec read(String path, Browser browser) throws IOException {
IndentationStructureParser structParser = new IndentationStructureParser();
List<StructNode> structs = structParser.parse(GalenUtils.findFileOrResourceAsStream(path), path);

PageSpec pageSpec = new PageSpec();

PageSpecProcessor pageSpecProcessor = new PageSpecProcessor(pageSpec);
PageSpecProcessor pageSpecProcessor = new PageSpecProcessor(pageSpec, browser);

for (StructNode structNode : structs) {
if (structNode.getName().startsWith("@")) {
Expand Down
Expand Up @@ -15,6 +15,9 @@
******************************************************************************/
package net.mindengine.galen.tests.speclang2.pagespec;

import net.mindengine.galen.browser.Browser;
import net.mindengine.galen.browser.SeleniumBrowser;
import net.mindengine.galen.components.mocks.driver.MockedDriver;
import net.mindengine.galen.speclang2.reader.pagespec.PageSpecReaderV2;
import net.mindengine.galen.specs.page.CorrectionsRect;
import net.mindengine.galen.specs.page.Locator;
Expand All @@ -30,6 +33,8 @@

public class PageSpecReaderV2Test {

private static final Browser NO_BROWSER = null;

@Test
public void shouldRead_objectDefinitions() throws IOException {
PageSpec pageSpec = readPageSpec("speclang2/object-definitions.gspec");
Expand All @@ -50,8 +55,26 @@ public void shouldRead_objectDefinitions() throws IOException {
}}));
}


@Test
public void shouldRead_objectDefinitions_withMultiObjects() throws IOException {
PageSpec pageSpec = readPageSpec("speclang2/object-definitions-multi-objects.gspec",
new SeleniumBrowser(new MockedDriver("/speclang2/mocks/menu-items.json")));

assertThat(pageSpec.getObjects(), is((Map<String, Locator>)new HashMap<String, Locator>(){{
put("menu-item-1", new Locator("css", "#menu li", 1));
put("menu-item-2", new Locator("css", "#menu li", 2));
put("menu-item-3", new Locator("css", "#menu li", 3));
put("menu-item-4", new Locator("css", "#menu li", 4));
}}));
}

private PageSpec readPageSpec(String resource) throws IOException {
return new PageSpecReaderV2().read(resource);
return readPageSpec(resource, NO_BROWSER);
}

private PageSpec readPageSpec(String resource, Browser browser) throws IOException {
return new PageSpecReaderV2().read(resource, browser);
}

}
15 changes: 15 additions & 0 deletions galen-core/src/test/resources/speclang2/mocks/menu-items.json
@@ -0,0 +1,15 @@
{
"items": [ {
"locator": "css: #menu li",
"area": [0,0,100,10]
}, {
"locator": "css: #menu li",
"area": [0,10,100,10]
}, {
"locator": "css: #menu li",
"area": [0,20,100,10]
}, {
"locator": "css: #menu li",
"area": [0,30,100,10]
} ]
}
@@ -0,0 +1,6 @@




@objects
menu-item-* #menu li

0 comments on commit bab00a4

Please sign in to comment.