diff --git a/functional-test/pom.xml b/functional-test/pom.xml index 5d8ac9d21c..e6d52a16fd 100644 --- a/functional-test/pom.xml +++ b/functional-test/pom.xml @@ -545,6 +545,17 @@ **/*.xml + + src/test/resources + false + + **/*.odt + **/*.odg + **/*.ods + **/*.odp + **/*.idml + + src/test/resources/zanata-user-config true diff --git a/functional-test/src/main/java/org/zanata/page/AbstractPage.java b/functional-test/src/main/java/org/zanata/page/AbstractPage.java index cc06774efc..3489d1476d 100644 --- a/functional-test/src/main/java/org/zanata/page/AbstractPage.java +++ b/functional-test/src/main/java/org/zanata/page/AbstractPage.java @@ -49,6 +49,10 @@ public class AbstractPage { private final WebDriver driver; private final FluentWait ajaxWaitForTenSec; + public void reload() { + getDriver().navigate().refresh(); + } + public void deleteCookiesAndRefresh() { getDriver().manage().deleteAllCookies(); Set cookies = getDriver().manage().getCookies(); diff --git a/functional-test/src/main/java/org/zanata/page/utility/DashboardPage.java b/functional-test/src/main/java/org/zanata/page/utility/DashboardPage.java index e9dca052d0..1801ccc4a9 100644 --- a/functional-test/src/main/java/org/zanata/page/utility/DashboardPage.java +++ b/functional-test/src/main/java/org/zanata/page/utility/DashboardPage.java @@ -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 { @@ -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()); + } } diff --git a/functional-test/src/main/java/org/zanata/page/webtrans/EditorPage.java b/functional-test/src/main/java/org/zanata/page/webtrans/EditorPage.java index dbee1e5d53..7ca1184a1f 100644 --- a/functional-test/src/main/java/org/zanata/page/webtrans/EditorPage.java +++ b/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 () { + @Override + public Boolean apply(WebDriver input) { + // code mirror will turn text into list of
.
+                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() {
+            @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() {
+            @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() {
+            @Override
+            public WebElement apply(WebDriver input) {
+                return input.findElement(By.className("selected"))
+                        .findElement(By.className("icon-install"));
+            }
+        });
+        approve.click();
+        return new EditorPage(getDriver());
+    }
 }
diff --git a/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java b/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java
index 3f611eacbe..12c879319a 100644
--- a/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java
+++ b/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java
@@ -24,6 +24,7 @@
 
 import java.io.*;
 import java.nio.charset.Charset;
+import java.util.zip.*;
 
 /**
  * Create and manipulate basic text files for testing.
@@ -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) {
@@ -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;
+    }
 }
diff --git a/functional-test/src/test/java/org/zanata/feature/editor/EditorTestSuite.java b/functional-test/src/test/java/org/zanata/feature/editor/EditorTestSuite.java
new file mode 100644
index 0000000000..86699be61b
--- /dev/null
+++ b/functional-test/src/test/java/org/zanata/feature/editor/EditorTestSuite.java
@@ -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
+ * djansen@redhat.com
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({ TranslateHTMLTest.class, TranslateOdsTest.class,
+        TranslateOpenOfficeTest.class, TranslateIdmlTest.class,
+        TranslateTextTest.class })
+
+public class EditorTestSuite {
+}
diff --git a/functional-test/src/test/java/org/zanata/feature/editor/TranslateHTMLTest.java b/functional-test/src/test/java/org/zanata/feature/editor/TranslateHTMLTest.java
new file mode 100644
index 0000000000..ae04e879d6
--- /dev/null
+++ b/functional-test/src/test/java/org/zanata/feature/editor/TranslateHTMLTest.java
@@ -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
+ * djansen@redhat.com
+ */
+@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,
+                        "Line One

Line Two

"+ + "Line Three"); + + HashMap 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")); + } +} diff --git a/functional-test/src/test/java/org/zanata/feature/editor/TranslateIdmlTest.java b/functional-test/src/test/java/org/zanata/feature/editor/TranslateIdmlTest.java new file mode 100644 index 0000000000..9ade3cb60c --- /dev/null +++ b/functional-test/src/test/java/org/zanata/feature/editor/TranslateIdmlTest.java @@ -0,0 +1,133 @@ +/* + * 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.Test; +import org.junit.experimental.categories.Category; +import org.zanata.feature.DetailedTest; +import org.zanata.page.projects.ProjectSourceDocumentsPage; +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 + * djansen@redhat.com + */ +@Category(DetailedTest.class) +public class TranslateIdmlTest { + + @Rule + public SampleProjectRule sampleProjectRule = new SampleProjectRule(); + + @Rule + public CleanDocumentStorageRule documentStorageRule = + new CleanDocumentStorageRule(); + + private TestFileGenerator testFileGenerator = new TestFileGenerator(); + + @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"); + } + + @Test + public void translateBasicIdmlFile() { + File testfile = testFileGenerator.openTestFile("test-idml.idml"); + + HashMap projectSettings = ProjectWorkFlow.projectDefaults(); + projectSettings.put("Project ID", "idml-project"); + projectSettings.put("Name", "idml-project"); + projectSettings.put("Project Type", "File"); + + ProjectSourceDocumentsPage projectSourceDocumentsPage = new + ProjectWorkFlow() + .createNewProject(projectSettings).clickCreateVersionLink() + .inputVersionId("idml").saveVersion() + .goToSourceDocuments().pressUploadFileButton() + .enterFilePath(testfile.getAbsolutePath()).submitUpload(); + + EditorPage editorPage = projectSourceDocumentsPage + .clickBreadcrumb("idml", 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")); + } +} diff --git a/functional-test/src/test/java/org/zanata/feature/editor/TranslateOdsTest.java b/functional-test/src/test/java/org/zanata/feature/editor/TranslateOdsTest.java new file mode 100644 index 0000000000..7149d9ac64 --- /dev/null +++ b/functional-test/src/test/java/org/zanata/feature/editor/TranslateOdsTest.java @@ -0,0 +1,155 @@ +/* + * 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.Test; +import org.junit.experimental.categories.Category; +import org.zanata.feature.DetailedTest; +import org.zanata.page.projects.ProjectSourceDocumentsPage; +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 + * djansen@redhat.com + */ +@Category(DetailedTest.class) +public class TranslateOdsTest { + + @Rule + public SampleProjectRule sampleProjectRule = new SampleProjectRule(); + + @Rule + public CleanDocumentStorageRule documentStorageRule = + new CleanDocumentStorageRule(); + + private TestFileGenerator testFileGenerator = new TestFileGenerator(); + + @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"); + } + + @Test + public void translateBasicOdsFile() { + File testfile = testFileGenerator.openTestFile("test-ods.ods"); + + HashMap projectSettings = ProjectWorkFlow.projectDefaults(); + projectSettings.put("Project ID", "ods-project"); + projectSettings.put("Name", "ods-project"); + projectSettings.put("Project Type", "File"); + + ProjectSourceDocumentsPage projectSourceDocumentsPage = new + ProjectWorkFlow() + .createNewProject(projectSettings).clickCreateVersionLink() + .inputVersionId("ods").saveVersion() + .goToSourceDocuments().pressUploadFileButton() + .enterFilePath(testfile.getAbsolutePath()).submitUpload(); + + EditorPage editorPage = projectSourceDocumentsPage + .clickBreadcrumb("ods", ProjectVersionPage.class) + .translate("fr").clickDocumentLink("", testfile.getName()); + + editorPage.setSyntaxHighlighting(false); + + assertThat("Item 1 shows TestODS (the sheet name)", + editorPage.getTranslationSourceAtRowIndex(0), + Matchers.equalTo("TestODS")); + assertThat("Item 2 shows First (the page name)", + editorPage.getTranslationSourceAtRowIndex(1), + Matchers.equalTo("First")); + assertThat("Item 3 shows Line One", + editorPage.getTranslationSourceAtRowIndex(2), + Matchers.equalTo("Line One")); + assertThat("Item 4 shows Line Two", + editorPage.getTranslationSourceAtRowIndex(3), + Matchers.equalTo("Line Two")); + assertThat("Item 5 shows Line Three", + editorPage.getTranslationSourceAtRowIndex(4), + Matchers.equalTo("Line Three")); + + editorPage = editorPage.translateTargetAtRowIndex(0, "TestODS") + .approveSelectedTranslation(); + editorPage = editorPage.translateTargetAtRowIndex(1, "Début") + .approveSelectedTranslation(); + editorPage = editorPage.translateTargetAtRowIndex(2, "Une Ligne") + .approveSelectedTranslation(); + editorPage = editorPage.translateTargetAtRowIndex(3, "Deux Ligne") + .approveSelectedTranslation(); + editorPage = editorPage.translateTargetAtRowIndex(4, "Ligne Trois") + .approveSelectedTranslation(); + + assertThat("Item 1 shows a translation of the sheet name", + editorPage.getBasicTranslationTargetAtRowIndex(0), + Matchers.equalTo("TestODS")); + assertThat("Item 1 shows a translation of page name", + editorPage.getBasicTranslationTargetAtRowIndex(1), + Matchers.equalTo("Début")); + assertThat("Item 1 shows a translation of Line One", + editorPage.getBasicTranslationTargetAtRowIndex(2), + Matchers.equalTo("Une Ligne")); + assertThat("Item 1 shows a translation of Line One", + editorPage.getBasicTranslationTargetAtRowIndex(3), + Matchers.equalTo("Deux Ligne")); + assertThat("Item 1 shows a translation of Line One", + editorPage.getBasicTranslationTargetAtRowIndex(4), + Matchers.equalTo("Ligne Trois")); + + // Close and reopen the editor to test save, switches to CodeMirror + editorPage.reload(); + + assertThat("Item 1 shows a translation of the sheet name", + editorPage.getTranslationTargetAtRowIndex(0), + Matchers.equalTo("TestODS")); + assertThat("Item 1 shows a translation of page name", + editorPage.getTranslationTargetAtRowIndex(1), + Matchers.equalTo("Début")); + assertThat("Item 1 shows a translation of Line One", + editorPage.getTranslationTargetAtRowIndex(2), + Matchers.equalTo("Une Ligne")); + assertThat("Item 1 shows a translation of Line One", + editorPage.getTranslationTargetAtRowIndex(3), + Matchers.equalTo("Deux Ligne")); + assertThat("Item 1 shows a translation of Line One", + editorPage.getTranslationTargetAtRowIndex(4), + Matchers.equalTo("Ligne Trois")); + } +} diff --git a/functional-test/src/test/java/org/zanata/feature/editor/TranslateOpenOfficeTest.java b/functional-test/src/test/java/org/zanata/feature/editor/TranslateOpenOfficeTest.java new file mode 100644 index 0000000000..e1e15d5ef8 --- /dev/null +++ b/functional-test/src/test/java/org/zanata/feature/editor/TranslateOpenOfficeTest.java @@ -0,0 +1,145 @@ +/* + * 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.ProjectSourceDocumentsPage; +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 + * djansen@redhat.com + */ +@RunWith(Theories.class) +@Category(DetailedTest.class) +public class TranslateOpenOfficeTest { + + @Rule + public SampleProjectRule sampleProjectRule = new SampleProjectRule(); + + @Rule + public CleanDocumentStorageRule documentStorageRule = + new CleanDocumentStorageRule(); + + private TestFileGenerator testFileGenerator = new TestFileGenerator(); + + @DataPoint + public static String TEST_ODT = "odt"; + @DataPoint + public static String TEST_ODG = "odg"; + @DataPoint + public static String TEST_ODP = "odp"; + + @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 translateBasicOpenOfficeFile(String extension) { + File testfile = testFileGenerator.openTestFile( + "test-" + extension + "." + extension); + + HashMap projectSettings = ProjectWorkFlow.projectDefaults(); + projectSettings.put("Project ID", extension + "-project"); + projectSettings.put("Name", extension + "-project"); + projectSettings.put("Project Type", "File"); + + ProjectSourceDocumentsPage projectSourceDocumentsPage = new + ProjectWorkFlow() + .createNewProject(projectSettings).clickCreateVersionLink() + .inputVersionId(extension).saveVersion() + .goToSourceDocuments().pressUploadFileButton() + .enterFilePath(testfile.getAbsolutePath()).submitUpload(); + + EditorPage editorPage = projectSourceDocumentsPage + .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")); + } +} diff --git a/functional-test/src/test/java/org/zanata/feature/editor/TranslateTextTest.java b/functional-test/src/test/java/org/zanata/feature/editor/TranslateTextTest.java new file mode 100644 index 0000000000..11c64c48d4 --- /dev/null +++ b/functional-test/src/test/java/org/zanata/feature/editor/TranslateTextTest.java @@ -0,0 +1,131 @@ +/* + * 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.Test; +import org.junit.experimental.categories.Category; +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 + * djansen@redhat.com + */ +@Category(DetailedTest.class) +public class TranslateTextTest { + + @Rule + public SampleProjectRule sampleProjectRule = new SampleProjectRule(); + + @Rule + public CleanDocumentStorageRule documentStorageRule = + new CleanDocumentStorageRule(); + + private TestFileGenerator testFileGenerator = new TestFileGenerator(); + + @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"); + } + + @Test + public void translateBasicTextFile() { + File testfile = testFileGenerator + .generateTestFileWithContent("basictext", ".txt", + "Line One\nLine Two\nLine Three"); + + HashMap projectSettings = ProjectWorkFlow.projectDefaults(); + projectSettings.put("Project ID", "text-project"); + projectSettings.put("Name", "text-project"); + projectSettings.put("Project Type", "File"); + + EditorPage editorPage = new ProjectWorkFlow() + .createNewProject(projectSettings).clickCreateVersionLink() + .inputVersionId("text").saveVersion() + .goToSourceDocuments().pressUploadFileButton() + .enterFilePath(testfile.getAbsolutePath()).submitUpload() + .clickBreadcrumb("text", 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")); + } +} diff --git a/functional-test/src/test/resources/test-idml.idml b/functional-test/src/test/resources/test-idml.idml new file mode 100644 index 0000000000..ccd7b1548e Binary files /dev/null and b/functional-test/src/test/resources/test-idml.idml differ diff --git a/functional-test/src/test/resources/test-odg.odg b/functional-test/src/test/resources/test-odg.odg new file mode 100644 index 0000000000..2c079932a3 Binary files /dev/null and b/functional-test/src/test/resources/test-odg.odg differ diff --git a/functional-test/src/test/resources/test-odp.odp b/functional-test/src/test/resources/test-odp.odp new file mode 100644 index 0000000000..ad86325e3a Binary files /dev/null and b/functional-test/src/test/resources/test-odp.odp differ diff --git a/functional-test/src/test/resources/test-ods.ods b/functional-test/src/test/resources/test-ods.ods new file mode 100644 index 0000000000..b268205e90 Binary files /dev/null and b/functional-test/src/test/resources/test-ods.ods differ diff --git a/functional-test/src/test/resources/test-odt.odt b/functional-test/src/test/resources/test-odt.odt new file mode 100644 index 0000000000..ba7e10ec42 Binary files /dev/null and b/functional-test/src/test/resources/test-odt.odt differ