. + 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