/* * Copyright 2016 SFB 632. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package annis.gui; import annis.service.objects.AnnisCorpus; import de.hu_berlin.german.korpling.annis.kickstarter.KickstartRunner; import java.util.concurrent.TimeUnit; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Set; import java.util.LinkedHashSet; import java.util.List; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebElement; /** * * @author thomas */ public class AcceptanceTest { private static final Logger log = LoggerFactory.getLogger(AcceptanceTest.class); private static KickstartRunner runner; private static WebDriver driver; private WebDriverWait wait; private final static int WEB_PORT = 8086; private final static int SERVICE_PORT = 5722; private static final Set<String> corpora = new LinkedHashSet<>(); @BeforeClass public static void runKickstarter() { try { runner = new KickstartRunner(WEB_PORT, SERVICE_PORT); runner.startService(); runner.startJetty(); // get all installed corpora for(AnnisCorpus c : runner.getCorpora()) { corpora.add(c.getName()); } driver = new FirefoxDriver(); } catch (Exception ex) { log.error(null, ex); runner = null; } } @Before public void setup() { Assume.assumeNotNull(driver); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); wait = new WebDriverWait(driver, 30); driver.get("http://localhost:" + WEB_PORT + "/annis-gui/"); wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("v-app"))); } @Test public void testAboutWindow() { driver.findElement(By.id("SearchView:MainToolbar:btAboutAnnis")).click(); Assert.assertTrue(driver.findElement(By.id("AboutWindow:VerticalLayout:btClose")).isDisplayed()); driver.findElement(By.id("AboutWindow:VerticalLayout:btClose")).click(); } @Test public void testOpenSourceWindow() { driver.findElement(By.id("SearchView:MainToolbar:btOpenSource")).click(); Assert.assertTrue(driver.findElement(By.id("HelpUsWindow:VerticalLayout:btClose")).isDisplayed()); driver.findElement(By.id("HelpUsWindow:VerticalLayout:btClose")).click(); } @Test public void testTokenSearchPcc2() { JavascriptExecutor js = (JavascriptExecutor) driver; // only execute this test if pcc2 corpus is imported Assume.assumeTrue(corpora.contains("pcc2")); // execute a "tok" search on pcc2 WebElement codeMirror = driver.findElement(By.xpath("//div[@id='SearchView:ControlPanel:QueryPanel']//div[contains(@class,'CodeMirror')]")); // activate the code mirror field (so we can leave it later) codeMirror.click(); // set text by javascript js.executeScript("arguments[0].CodeMirror.setValue('tok');", codeMirror); List<WebElement> corpusTableElements = driver.findElements(By.xpath("//div[@id='SearchView:ControlPanel:TabSheet:CorpusListPanel:tblCorpora']//table[contains(@class, 'v-table-table')]//tr")); WebElement tdPcc = null; for(WebElement elem : corpusTableElements) { // get div WebElement div = elem.findElement(By.tagName("div")); if(div != null && "pcc2".equals(div.getText())) { tdPcc = elem; } } Assert.assertNotNull(tdPcc); tdPcc.click(); driver.findElement(By.id("SearchView:ControlPanel:QueryPanel:btShowResult")).click(); // wait until the result is loaded By byGridTable = By.xpath("//div[@id='SearchView:TabSheet:ResultViewPanel:Panel:resultLayout:SingleResultPanel.1']/div[2]//table"); wait.until(ExpectedConditions.visibilityOfElementLocated(byGridTable)); WebElement gridTable = driver.findElement(byGridTable); List<WebElement> firstRow = gridTable.findElements(By.xpath(".//tr[1]/td")); Assert.assertEquals(7, firstRow.size()); Assert.assertEquals("Feigenblatt", firstRow.get(0).getText()); Assert.assertEquals("Die", firstRow.get(1).getText()); Assert.assertEquals("Jugendlichen", firstRow.get(2).getText()); Assert.assertEquals("in", firstRow.get(3).getText()); Assert.assertEquals("Zossen", firstRow.get(4).getText()); Assert.assertEquals("wollen", firstRow.get(5).getText()); Assert.assertEquals("ein", firstRow.get(6).getText()); } /** * Make sure the "Show in ANNIS search interface" link is shown in embedded visualizer. * Regression test for * https://github.com/korpling/ANNIS/issues/509 * (Link from embedded visualization to search UI is gone in 3.4.0) */ @Test public void testRegression509() { // only execute this test if pcc2 corpus is imported Assume.assumeTrue(corpora.contains("pcc2")); driver.get("http://localhost:" + WEB_PORT + "/annis-gui/embeddedvis/grid?embedded_ns=exmaralda&embedded_instance=&embedded_salt=http%3A%2F%2Flocalhost%3A" + SERVICE_PORT + "%2Fannis%2Fquery%2Fsearch%2Fsubgraph%3Fmatch%3Dsalt%3A%2Fpcc2%2F11299%2F%2523tok_1%26left%3D5%26right%3D5&embedded_interface=http://localhost:8084/annis-gui/%23_q%3DdG9r%26_c%3DcGNjMg%26cl%3D5%26cr%3D5%26s%3D0%26l%3D10%26m%3D0"); // wait until page was loaded wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("v-app"))); // wait until visualization is actually there wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className( "v-app-loading"))); WebElement link = driver.findElement(By.xpath("//div[@id='VerticalLayout:Link']/a/span[2]")); Assert.assertEquals("Show in ANNIS search interface", link.getText()); } @AfterClass public static void cleanup() { if(driver != null) { driver.quit(); } } }