Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Basic translation tests for the File type project
Browse files Browse the repository at this point in the history
Tests OpenOffice, InDesign, html and plain text for upload,
parse and translation.
  • Loading branch information
djansen-redhat committed Jan 31, 2014
1 parent 6f9c5a3 commit fba85bd
Show file tree
Hide file tree
Showing 16 changed files with 880 additions and 8 deletions.
11 changes: 11 additions & 0 deletions functional-test/pom.xml
Expand Up @@ -545,6 +545,17 @@
<include>**/*.xml</include>
</includes>
</testResource>
<testResource>
<directory>src/test/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.odt</include>
<include>**/*.odg</include>
<include>**/*.ods</include>
<include>**/*.odp</include>
<include>**/*.idml</include>
</includes>
</testResource>
<testResource>
<directory>src/test/resources/zanata-user-config</directory>
<filtering>true</filtering>
Expand Down
Expand Up @@ -49,6 +49,10 @@ public class AbstractPage {
private final WebDriver driver;
private final FluentWait<WebDriver> ajaxWaitForTenSec;

public void reload() {
getDriver().navigate().refresh();
}

public void deleteCookiesAndRefresh() {
getDriver().manage().deleteAllCookies();
Set<Cookie> cookies = getDriver().manage().getCookies();
Expand Down
Expand Up @@ -29,6 +29,7 @@
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.zanata.page.BasePage;
import org.zanata.page.projects.CreateProjectPage;
import org.zanata.util.WebElementUtil;

public class DashboardPage extends BasePage {
Expand Down Expand Up @@ -83,4 +84,9 @@ public void clickMoreActivity() {
public WebElement getMoreActivityElement() {
return getDriver().findElement(By.id("moreActivity"));
}

public CreateProjectPage clickCreateYourOwn() {
getDriver().findElement(By.linkText("create your own")).click();
return new CreateProjectPage(getDriver());
}
}
114 changes: 107 additions & 7 deletions functional-test/src/main/java/org/zanata/page/webtrans/EditorPage.java
@@ -1,18 +1,38 @@
/*
* Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.zanata.page.webtrans;

import java.util.Collections;
import java.util.List;

import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.zanata.page.BasePage;
import org.zanata.util.WebElementUtil;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import lombok.extern.slf4j.Slf4j;

import java.util.Collections;
import java.util.List;

/**
* @author Patrick Huang <a
Expand Down Expand Up @@ -120,4 +140,84 @@ public String apply(WebDriver input) {
}
});
}

public EditorPage setSyntaxHighlighting(boolean option) {
openConfigurationPanel();
if (getDriver().findElement(By.id("gwt-uid-144")).isSelected() != option) {
getDriver().findElement(By.id("gwt-uid-144")).click();
}
return new EditorPage(getDriver());
}

private Boolean openConfigurationPanel() {
getDriver().findElement(By.className("icon-cog")).click();
return waitForTenSec().until(new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(WebDriver input) {
// code mirror will turn text into list of <pre>.
return input.findElement(By.className("gwt-TabLayoutPanelContentContainer")).isDisplayed();
}
});

}

public String getBasicTranslationTargetAtRowIndex(final int rowIndex) {
return getContentAtRowIndex(rowIndex, TARGET_ID_FMT, SINGULAR);
}

/**
* Get content from a target using the non-CodeMirror configuration
* @param rowIndex
* @return row target content
*/
private String getContentAtRowIndex(final long rowIndex,
final String idFormat,
final int pluralIndex) {
return waitForTenSec().until(new Function<WebDriver, String>() {
@Override
public String apply(WebDriver input) {
return input.findElement(By.id(String.format(idFormat, rowIndex, pluralIndex))).getAttribute("value");
}
});
}

/**
* Translate a target using the non-CodeMirror field
* @param rowIndex
* @param text
* @return updated EditorPage
*/
public EditorPage translateTargetAtRowIndex(final int rowIndex, String text) {
setTargetContent(rowIndex, text, TARGET_ID_FMT, SINGULAR);
return new EditorPage(getDriver());
}

private void setTargetContent(final long rowIndex, final String text,
final String idFormat, final int pluralIndex) {
WebElement we = waitForTenSec().until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver input) {
return input.findElement(
By.id(String.format(idFormat, rowIndex, pluralIndex)));
}
});
we.click();
we.sendKeys(text);
}

/**
* Press the Approve button for the currently selected translation row
* @return new Editor page object
*/
public EditorPage approveSelectedTranslation() {
WebElement approve = waitForTenSec().until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver input) {
return input.findElement(By.className("selected"))
.findElement(By.className("icon-install"));
}
});
approve.click();
return new EditorPage(getDriver());
}
}
Expand Up @@ -24,6 +24,7 @@

import java.io.*;
import java.nio.charset.Charset;
import java.util.zip.*;

/**
* Create and manipulate basic text files for testing.
Expand Down Expand Up @@ -87,7 +88,8 @@ private void setTestFileContent(File testFile, String testContent) {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
new FileOutputStream(testFile),
Charset.forName("UTF-8").newEncoder());
outputStreamWriter.write(testContent);
outputStreamWriter.write(testContent
.replaceAll("\n", System.getProperty("line.separator")));
outputStreamWriter.flush();
outputStreamWriter.close();
} catch (IOException ioException) {
Expand Down Expand Up @@ -154,4 +156,12 @@ public String getFirstFileNameInDirectory(String directory) {
+ " but none found.");
}
}

public File openTestFile(String filename) {
String relativePath = "functional-test/target/test-classes/"
.concat(filename);
File testFile = new File(relativePath);
assert testFile.exists();
return testFile;
}
}
@@ -0,0 +1,36 @@
/*
* Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.zanata.feature.editor;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

/**
* @author Damian Jansen
* <a href="mailto:djansen@redhat.com">djansen@redhat.com</a>
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({ TranslateHTMLTest.class, TranslateOdsTest.class,
TranslateOpenOfficeTest.class, TranslateIdmlTest.class,
TranslateTextTest.class })

public class EditorTestSuite {
}
@@ -0,0 +1,141 @@
/*
* Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.zanata.feature.editor;

import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Rule;
import org.junit.experimental.categories.Category;
import org.junit.experimental.theories.DataPoint;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
import org.zanata.feature.DetailedTest;
import org.zanata.page.projects.ProjectVersionPage;
import org.zanata.page.webtrans.EditorPage;
import org.zanata.util.CleanDocumentStorageRule;
import org.zanata.util.SampleProjectRule;
import org.zanata.util.TestFileGenerator;
import org.zanata.workflow.BasicWorkFlow;
import org.zanata.workflow.LoginWorkFlow;
import org.zanata.workflow.ProjectWorkFlow;

import java.io.File;
import java.util.HashMap;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.zanata.util.FunctionalTestHelper.assumeFalse;

/**
* @author Damian Jansen
* <a href="mailto:djansen@redhat.com">djansen@redhat.com</a>
*/
@RunWith(Theories.class)
@Category(DetailedTest.class)
public class TranslateHTMLTest {

@Rule
public SampleProjectRule sampleProjectRule = new SampleProjectRule();

@Rule
public CleanDocumentStorageRule documentStorageRule =
new CleanDocumentStorageRule();

private TestFileGenerator testFileGenerator = new TestFileGenerator();

@DataPoint
public static String TEST_htm = "htm";
@DataPoint
public static String TEST_html = "html";

@Before
public void before() {
new BasicWorkFlow().goToHome().deleteCookiesAndRefresh();
assumeFalse("", new File(CleanDocumentStorageRule
.getDocumentStoragePath()
.concat(File.separator).concat("documents")
.concat(File.separator)).exists());
new LoginWorkFlow().signIn("admin", "admin");
}

@Theory
public void translateBasicHTMLFile(String extension) {
File testfile = testFileGenerator
.generateTestFileWithContent("basichtml", "." + extension,
"<html><body>Line One<p>Line Two<p>"+
"Line Three</body></html>");

HashMap<String, String> projectSettings = ProjectWorkFlow.projectDefaults();
projectSettings.put("Project ID", extension + "-project");
projectSettings.put("Name", extension + "-project");
projectSettings.put("Project Type", "File");

EditorPage editorPage = new ProjectWorkFlow()
.createNewProject(projectSettings).clickCreateVersionLink()
.inputVersionId(extension).saveVersion()
.goToSourceDocuments().pressUploadFileButton()
.enterFilePath(testfile.getAbsolutePath()).submitUpload()
.clickBreadcrumb(extension, ProjectVersionPage.class)
.translate("fr").clickDocumentLink("", testfile.getName());

editorPage.setSyntaxHighlighting(false);

assertThat("Item 1 shows Line One",
editorPage.getTranslationSourceAtRowIndex(0),
Matchers.equalTo("Line One"));
assertThat("Item 2 shows Line Two",
editorPage.getTranslationSourceAtRowIndex(1),
Matchers.equalTo("Line Two"));
assertThat("Item 3 shows Line Three",
editorPage.getTranslationSourceAtRowIndex(2),
Matchers.equalTo("Line Three"));

editorPage = editorPage.translateTargetAtRowIndex(0, "Une Ligne")
.approveSelectedTranslation();
editorPage = editorPage.translateTargetAtRowIndex(1, "Deux Ligne")
.approveSelectedTranslation();
editorPage = editorPage.translateTargetAtRowIndex(2, "Ligne Trois")
.approveSelectedTranslation();

assertThat("Item 1 shows a translation of Line One",
editorPage.getBasicTranslationTargetAtRowIndex(0),
Matchers.equalTo("Une Ligne"));
assertThat("Item 1 shows a translation of Line One",
editorPage.getBasicTranslationTargetAtRowIndex(1),
Matchers.equalTo("Deux Ligne"));
assertThat("Item 1 shows a translation of Line One",
editorPage.getBasicTranslationTargetAtRowIndex(2),
Matchers.equalTo("Ligne Trois"));

// Close and reopen the editor to test save, switches to CodeMirror
editorPage.reload();

assertThat("Item 1 shows a translation of Line One",
editorPage.getTranslationTargetAtRowIndex(0),
Matchers.equalTo("Une Ligne"));
assertThat("Item 1 shows a translation of Line One",
editorPage.getTranslationTargetAtRowIndex(1),
Matchers.equalTo("Deux Ligne"));
assertThat("Item 1 shows a translation of Line One",
editorPage.getTranslationTargetAtRowIndex(2),
Matchers.equalTo("Ligne Trois"));
}
}

0 comments on commit fba85bd

Please sign in to comment.