1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 /**
23  *
24  */
25 package bvt.gui;
26 
27 import static org.junit.Assert.*;
28 import static org.openoffice.test.common.Testspace.*;
29 import static org.openoffice.test.vcl.Tester.*;
30 import static testlib.gui.AppTool.*;
31 import static testlib.gui.UIMap.*;
32 
33 import java.awt.Rectangle;
34 import java.io.File;
35 
36 import org.junit.AfterClass;
37 import org.junit.Before;
38 import org.junit.BeforeClass;
39 import org.junit.Rule;
40 import org.junit.Test;
41 import org.openoffice.test.common.FileUtil;
42 import org.openoffice.test.common.GraphicsUtil;
43 import org.openoffice.test.common.Logger;
44 
45 import testlib.gui.SCTool;
46 
47 /**
48  *
49  */
50 public class BasicFunctionTest {
51 
52 	@Rule
53 	public Logger log = Logger.getLogger(this);
54 
55 	@BeforeClass
56 	public static void beforeClass() {
57 		app.clean();
58 	}
59 
60 	@AfterClass
61 	public static void afterClass() {
62 		app.stop();
63 	}
64 
65 	@Before
66 	public void before() {
67 		app.stop();
68 		app.start();
69 	}
70 
71 
72 	@Test
73 	public void smokeTest() {
74 		File smoketestOutput = new File(aoo.getUserInstallation(), "user/temp");
75 		File testDir = getFile().getParentFile();
76 		File smokeTestDir = new File(testDir, "smoketestdoc");
77 		File smokeTestTargetDir = new File(smokeTestDir, "target");
78 		prepareData(new File(smokeTestTargetDir, "TestExtension.oxt").getAbsolutePath());
79 		// Open sample file smoketestdoc.sxw
80 		open(prepareData(new File(smokeTestTargetDir, "smoketestdoc.odt").getAbsolutePath()));
81 		writer.waitForEnabled(10, 2);
82 		// Run test cases
83 		app.dispatch("vnd.sun.star.script:Standard.Global.StartTestWithDefaultOptions?language=Basic&location=document", 120);
84 		String smoketestlog = FileUtil.readFileAsString(new File(smoketestOutput, "smoketest.log"));
85 		String testclosurelog = FileUtil.readFileAsString(new File(smoketestOutput, "testclosure.log"));
86 		log.info(smoketestlog + "\n" + testclosurelog);
87 		assertTrue("No Error", !smoketestlog.contains("error") && !testclosurelog.contains("error"));
88 
89 	}
90 
91 	@Test
92 	public void testExportAsPDF() throws Exception {
93 		String file = prepareData("bvt/pdf.odt");
94 		String exportTo1 = getPath("temp/1.pdf");
95 		String exportTo2 = getPath("temp/2.pdf");
96 		deleteFile(exportTo1);
97 		deleteFile(exportTo2);
98 		open(file);
99 		writer.waitForExistence(10, 1);
100 		app.dispatch(".uno:ExportToPDF");
101 		pdfGeneralPage.ok();
102 		submitSaveDlg(exportTo1);
103 		sleep(1);
104 		String magic = FileUtil.readFileAsString(exportTo1).substring(0, 4);
105 		assertEquals("PDF is exported?", "%PDF", magic);
106 
107 		button(".uno:ExportDirectToPDF").click();//Click via toolbar
108 		submitSaveDlg(exportTo2);
109 		sleep(1);
110 		magic = FileUtil.readFileAsString(exportTo2).substring(0, 4);
111 		assertEquals("PDF is exported directly?", "%PDF", magic);
112 	}
113 
114 	/**
115 	 * Test the File -- Print Dialog show
116 	 *
117 	 */
118 	@Test
119 	public void testPrinter() {
120 		// Create a new text document
121 		newTextDocument();
122 		app.dispatch(".uno:PrinterSetup");
123 		if (activeMsgBox.exists(2))
124 			activeMsgBox.ok();
125 
126 //		PrintService[] ps = PrintServiceLookup.lookupPrintServices(null, null);
127 //		String[] names = new String[ps.length];
128 //		for (int i = 0; i < ps.length; i++) {
129 //			names[i] = ps[i].getName();
130 //		}
131 //
132 //		assertArrayEquals("Printers Names", names, printerSetUpDlgPrinterNames.getItemsText());
133 		assertTrue("Printer Setup dialog appears", printerSetUpDlg.exists(3));
134 		printerSetUpDlg.cancel();
135 	}
136 
137 	/**
138 	 * Test the File -- Java Dialog show
139 	 *
140 	 */
141 //	@Test
142 //	public void testJavaDialog() {
143 //
144 //		// Create a new text document and launch a Wizards dialog which need JVM
145 //		// work correctly.
146 //		app.dispatch("private:factory/swriter");
147 //		File tempfile = new File(oo.getUserInstallation(), "user/template/myAgendaTemplate.ott");
148 //		FileUtil.deleteFile(tempfile);
149 //		sleep(3);
150 //		app.dispatch("service:com.sun.star.wizards.agenda.CallWizard?start");
151 //		sleep(5);
152 //		assertTrue(Wizards_AgendaDialog.exists(10));
153 //		Wizards_AgendaDialog_FinishButton.click();
154 //		sleep(10);
155 //		writer.focus();
156 //		sleep(1);
157 //		app.dispatch(".uno:SelectAll");
158 //		typeKeys("<$copy>");
159 //		// System.out.println("now txt:"+app.getClipboard());
160 //		// assertTrue(app.getClipboard().startsWith("<Name>"));
161 //		assertNotNull(app.getClipboard());
162 //	}
163 
164 	/**
165 	 * Test the Tools / Macros / Organize Dialogs" show
166 	 *
167 	 */
168 	@Test
169 	public void testRunMacro() {
170 		open(prepareData("bvt/macro.ods"));
171 		calc.waitForExistence(10, 2);
172 		app.dispatch(".uno:RunMacro");
173 		runMacroDlgCategories.expand("macro.ods");
174 		runMacroDlgCategories.expand("Standard");
175 		runMacroDlgCategories.select("Module1");
176 		runMacroDlgCommands.select(0);
177 		runMacroDlg.ok();
178 		sleep(1);
179 		assertEquals("A3 should be =1+3", "4", SCTool.getCellText("A3"));
180 		discard();
181 	}
182 
183 	/**
184 	 * Test the About Dialog show
185 	 *
186 	 */
187 	@Test
188 	public void testHelp() {
189 		app.dispatch(".uno:About");
190 		assertTrue(aboutDialog.exists(5));
191 		aboutDialog.ok();
192 		sleep(1);
193 		typeKeys("<F1>");
194 		assertTrue(helpWindow.exists(5));
195 		helpWindow.close();
196 	}
197 
198 	/**
199 	 * Test inserting a picture in text document
200 	 *
201 	 * @throws Exception
202 	 */
203 
204 	@Test
205 	public void testInsertPictureInDocument() throws Exception {
206 		String bmp_green = prepareData("image/green_256x256.bmp");
207 		String bmp_red = prepareData("image/red_256x256.bmp");
208 
209 		// Create a new text document
210 		newTextDocument();
211 		// Insert a picture fully filled with green
212 		app.dispatch(".uno:InsertGraphic");
213 		submitOpenDlg(bmp_green);
214 		writer.click(5,200);
215 		sleep(1);
216 
217 		// Verify if the picture is inserted successfully
218 		Rectangle rectangle = GraphicsUtil.findRectangle(writer.getScreenRectangle(), 0xFF00FF00);
219 		assertTrue("Green Picture is inserted?" + rectangle, rectangle != null && rectangle.getWidth() > 10);
220 		// insert another picture
221 		app.dispatch(".uno:InsertGraphic");
222 		submitOpenDlg(bmp_red);
223 		writer.click(5, 200);
224 		sleep(1);
225 		// Verify if the picture is inserted successfully
226 		rectangle = GraphicsUtil.findRectangle(writer.getScreenRectangle(), 0xFFFF0000);
227 		assertTrue("Green Picture is inserted? " + rectangle, rectangle != null && rectangle.getWidth() > 10);
228 		discard();
229 	}
230 
231 	@Test
232 	public void testInsertPictureInSpreadsheet() throws Exception {
233 		String bmp_green = prepareData("image/green_64x64.png");
234 		String bmp_red = prepareData("image/red_64x64.png");
235 		newSpreadsheet();
236 		// Insert a picture fully filled with green
237 		app.dispatch(".uno:InsertGraphic");
238 		submitOpenDlg(bmp_green);
239 		calc.click(5, 150);
240 		sleep(1);
241 
242 		// Verify if the picture is inserted successfully
243 		Rectangle rectangle = GraphicsUtil.findRectangle(calc.getScreenRectangle(), 0xFF00FF00);
244 		assertTrue("Green Picture is inserted?" + rectangle, rectangle != null && rectangle.getWidth() > 10);
245 
246 		SCTool.selectRange("C1");
247 		// insert another picture
248 		app.dispatch(".uno:InsertGraphic");
249 		submitOpenDlg(bmp_red);
250 		calc.click(5, 150);
251 		sleep(1);
252 		// Verify if the picture is inserted successfully
253 		rectangle = GraphicsUtil.findRectangle(calc.getScreenRectangle(), 0xFFFF0000);
254 		assertTrue("Red Picture is inserted? " + rectangle, rectangle != null && rectangle.getWidth() > 10);
255 		discard();
256 	}
257 
258 	@Test
259 	public void testInsertPictureInPresentation() throws Exception {
260 		String bmp_green = prepareData("image/green_256x256.bmp");
261 		String bmp_red = prepareData("image/red_256x256.bmp");
262 		newPresentation();
263 		// Insert a picture fully filled with green
264 		app.dispatch(".uno:InsertGraphic");
265 		submitOpenDlg(bmp_green);
266 		impress.click(5, 5);
267 		sleep(1);
268 
269 		// Verify if the picture is inserted successfully
270 		Rectangle rectangle = GraphicsUtil.findRectangle(impress.getScreenRectangle(), 0xFF00FF00);
271 		assertTrue("Green Picture is inserted?" + rectangle, rectangle != null && rectangle.getWidth() > 10);
272 		// insert another picture
273 		app.dispatch(".uno:InsertGraphic");
274 		submitOpenDlg(bmp_red);
275 		impress.click(1, 1);
276 		sleep(1);
277 		// Verify if the picture is inserted successfully
278 		rectangle = GraphicsUtil.findRectangle(impress.getScreenRectangle(), 0xFFFF0000);
279 		assertTrue("Red Picture is inserted? " + rectangle, rectangle != null && rectangle.getWidth() > 10);
280 		discard();
281 	}
282 
283 	@Test
284 	public void testSlideShow() throws Exception {
285 		open(prepareData("bvt/slideshow.odp"));
286 		impress.waitForExistence(10, 2);
287 		sleep(1);
288 		impress.typeKeys("<F5>");
289 		sleep(3);
290 		Rectangle rectangle = GraphicsUtil.findRectangle(slideShow.getScreenRectangle(), 0xFFFF0000);
291 		assertNotNull("1st slide appears", rectangle);
292 		slideShow.click(0.5, 0.5);
293 		sleep(2);
294 		rectangle = GraphicsUtil.findRectangle(slideShow.getScreenRectangle(), 0xFF00FF00);
295 		assertNotNull("2nd slide appears", rectangle);
296 		typeKeys("<enter>");
297 		sleep(2);
298 		rectangle = GraphicsUtil.findRectangle(slideShow.getScreenRectangle(), 0xFF0000FF);
299 		assertNotNull("3rd slide appears", rectangle);
300 		slideShow.click(0.5, 0.5);
301 		sleep(2);
302 		rectangle = GraphicsUtil.findRectangle(slideShow.getScreenRectangle(), 0xFF0000FF);
303 		assertNull("The end", rectangle);
304 		slideShow.click(0.5, 0.5);
305 		sleep(3);
306 		assertFalse("Quit", slideShow.exists());
307 	}
308 
309 	@Test
310 	public void testFind() {
311 		open(prepareData("bvt/find.odt"));
312 		writer.waitForExistence(10, 2);
313 		app.dispatch(".uno:SearchDialog");
314 		findDlgFor.setText("OpenOffice");
315 		findDlgFind.click();
316 		sleep(1);
317 		writer.typeKeys("<$copy>");
318 		assertEquals("OpenOffice", app.getClipboard());
319 		findDlgFindAll.click();
320 		sleep(1);
321 		writer.typeKeys("<$copy>");
322 		assertEquals("OpenOfficeOpenOfficeOpenOffice", app.getClipboard());
323 		findDlgReplaceWith.setText("Awesome OpenOffice");
324 		findDlgReplaceAll.click();
325 		sleep(1);
326 		msgbox("Search key replaced 3 times.").ok();
327 		findDlg.close();
328 		sleep(1);
329 		assertEquals(
330 				"Apache Awesome OpenOffice is comprised of six personal productivity applications: a word processor (and its web-authoring component), spreadsheet, presentation graphics, drawing, equation editor, and database. Awesome OpenOffice is released on Windows, Solaris, Linux and Macintosh operation systems, with more communities joining, including a mature FreeBSD port. Awesome OpenOffice is localized, supporting over 110 languages worldwide. ",
331 				copyAll());
332 		discard();
333 	}
334 
335 	@Test
336 	public void testFindFormulasAndValues() {
337 	    open(prepareData("bvt/searchFormulasValues.ods"));
338 	    calc.waitForExistence(10, 2);
339 
340 	    // Searching for 2003 by formula finds A2
341 	    SCTool.selectRange("A1");
342 	    app.dispatch(".uno:SearchDialog");
343         findDlgFor.setText("2003");
344         findDlgMore.click();
345         findDlgCalcSearchIn.select("Formulas");
346         findDlgFind.click();
347         sleep(1);
348 	    assertEquals("wrong cell found for formulas search", "A2", scInputBarPosition.getText());
349 	    findDlg.close();
350 
351 	    // Searching for October by value finds A2
352 	    SCTool.selectRange("A1");
353 	    app.dispatch(".uno:SearchDialog");
354 	    findDlgFor.setText("October");
355 	    findDlgMore.click();
356 	    findDlgCalcSearchIn.select("Values");
357 	    findDlgFind.click();
358 	    sleep(1);
359 	    assertEquals("wrong cell found for values search", "A2", scInputBarPosition.getText());
360 	    findDlg.close();
361 
362 	    discard();
363 	}
364 
365 	@Test
366 	public void testFillInSpreadsheet() {
367 		String[][] expected1 = new String[][] { { "1" }, { "1" }, { "1" }, { "1" }, { "1" }, { "1" }, };
368 		String[][] expected2 = new String[][] { { "2" }, { "2" }, { "2" }, { "2" }, { "2" }, { "2" }, };
369 		String[][] expected3 = new String[][] { { "Hi friends", "Hi friends", "Hi friends", "Hi friends" } };
370 		String[][] expected4 = new String[][] { { "99999.999", "99999.999", "99999.999", "99999.999" } };
371 		String[][] expected5 = new String[][] {
372 		{ "99999.999", "-10" }, { "100000.999", "-9" }, { "100001.999", "-8" }, { "100002.999", "-7" }, { "100003.999", "-6" }
373 		};
374 		newSpreadsheet();
375 		SCTool.selectRange("C5");
376 		typeKeys("1<enter>");
377 		SCTool.selectRange("C5:C10");
378 		app.dispatch(".uno:FillDown");
379 		assertArrayEquals("Fill Down:", expected1, SCTool.getCellTexts("C5:C10"));
380 
381 		SCTool.selectRange("D10");
382 		typeKeys("2<enter>");
383 		SCTool.selectRange("D5:D10");
384 		app.dispatch(".uno:FillUp");
385 		assertArrayEquals("Fill Up:", expected2, SCTool.getCellTexts("D5:D10"));
386 
387 		SCTool.selectRange("A1");
388 		typeKeys("Hi friends<enter>");
389 		SCTool.selectRange("A1:D1");
390 		app.dispatch(".uno:FillRight");
391 		assertArrayEquals("Fill Right:", expected3, SCTool.getCellTexts("A1:D1"));
392 
393 		SCTool.selectRange("D2");
394 		typeKeys("99999.999<enter>");
395 		SCTool.selectRange("A2:D2");
396 		app.dispatch(".uno:FillLeft");
397 		assertArrayEquals("Fill left:", expected4, SCTool.getCellTexts("A2:D2"));
398 
399 		SCTool.selectRange("E1");
400 		typeKeys("99999.999<tab>-10<enter>");
401 
402 		SCTool.selectRange("E1:F5");
403 		app.dispatch(".uno:FillSeries");
404 		fillSeriesDlg.ok();
405 		sleep(1);
406 		assertArrayEquals("Fill series..", expected5, SCTool.getCellTexts("E1:F5"));
407 		discard();
408 	}
409 
410 	@Test
411 	public void testSort() {
412 		String[][] expected1 = new String[][] { { "-9999999" }, { "-1.1" }, { "-1.1" }, { "0" }, { "0" }, { "0.1" }, { "10" }, { "12" }, { "9999999" }, { "9999999" },
413 
414 		};
415 		String[][] expected2 = new String[][] { { "TRUE", "Oracle" }, { "TRUE", "OpenOffice" }, { "FALSE", "OpenOffice" }, { "TRUE", "IBM" }, { "FALSE", "IBM" },
416 				{ "TRUE", "Google" }, { "FALSE", "facebook " }, { "TRUE", "Apache" }, { "TRUE", "!yahoo" }, { "TRUE", "" },
417 
418 		};
419 
420 		String[][] expected3 = new String[][] { { "Sunday" }, { "Monday" }, { "Tuesday" }, { "Wednesday" }, { "Thursday" }, { "Friday" }, { "Saturday" },
421 
422 		};
423 
424 		String[][] expected4 = new String[][] { { "-$10.00" }, { "$0.00" }, { "$0.00" }, { "$1.00" }, { "$3.00" }, { "$9.00" }, { "$123.00" }, { "$200.00" }, { "$400.00" },
425 				{ "$10,000.00" },
426 
427 		};
428 		open(prepareData("bvt/sort.ods"));
429 		calc.waitForExistence(10, 2);
430 		SCTool.selectRange("A1:A10");
431 		app.dispatch(".uno:DataSort");
432 		sortWarningDlgCurrent.click();
433 		assertEquals(1, sortPageBy1.getSelIndex());
434 		sortPage.ok();
435 		sleep(1);
436 		assertArrayEquals("Sorted Data", expected1, SCTool.getCellTexts("A1:A10"));
437 		SCTool.selectRange("B1:C10");
438 		app.dispatch(".uno:DataSort");
439 
440 		sortPageBy1.select(2);
441 		sortPageDescending1.check();
442 		assertFalse(sortPageBy3.isEnabled());
443 		assertFalse(sortPageAscending3.isEnabled());
444 		assertFalse(sortPageDescending3.isEnabled());
445 		sortPageBy2.select(1);
446 		assertTrue(sortPageBy3.isEnabled());
447 		assertTrue(sortPageAscending3.isEnabled());
448 		assertTrue(sortPageDescending3.isEnabled());
449 		sortPageDescending2.check();
450 		sortPageBy2.select(0);
451 		assertFalse(sortPageBy3.isEnabled());
452 		assertFalse(sortPageAscending3.isEnabled());
453 		assertFalse(sortPageDescending3.isEnabled());
454 		sortPageBy2.select(1);
455 		sortPage.ok();
456 		sleep(1);
457 
458 		assertArrayEquals("Sorted Data", expected2, SCTool.getCellTexts("B1:C10"));
459 		SCTool.selectRange("D1:D7");
460 		app.dispatch(".uno:DataSort");
461 		sortWarningDlgCurrent.click();
462 		sortOptionsPage.select();
463 		sortOptionsPageRangeContainsColumnLabels.uncheck();
464 		sortOptionsPageCustomSortOrder.check();
465 		sortOptionsPageCustomSortOrderList.select("Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday");
466 		sortOptionsPage.ok();
467 		sleep(1);
468 		assertArrayEquals("Sorted Data", expected3, SCTool.getCellTexts("D1:D7"));
469 
470 		SCTool.selectRange("E1:E10");
471 		app.dispatch(".uno:DataSort");
472 		sortWarningDlgCurrent.click();
473 		sortPage.ok();
474 		sleep(1);
475 		assertArrayEquals("Sorted Data", expected4, SCTool.getCellTexts("E1:E10"));
476 		discard();
477 	}
478 
479 	/**
480 	 * Test insert a chart in a draw document 1. New a draw document 2. Insert a
481 	 * chart 3. Check if the chart is inserted successfully
482 	 *
483 	 * @throws Exception
484 	 */
485 	@Test
486 	public void testInsertChartInDraw() throws Exception {
487 		// Create a new drawing document
488 		newDrawing();
489 		// Insert a chart
490 		app.dispatch(".uno:InsertObjectChart");
491 		sleep(3);
492 
493 		// Verify if the chart is inserted successfully
494 		assertTrue("Chart Editor appears", chart.exists(3));
495 		// Focus on edit pane
496 		draw.click(5, 5);
497 		sleep(1);
498 		assertFalse("Chart Editor appears", chart.exists());
499 		discard();
500 	}
501 
502 	/**
503 	 * Test insert a chart in a text document 1. New a text document 2. Insert a
504 	 * chart 3. Check if the chart is inserted successfully
505 	 *
506 	 * @throws Exception
507 	 */
508 	@Test
509 	public void testInsertChartInDocument() throws Exception {
510 		// Create a new text document
511 		newTextDocument();
512 		// Insert a chart
513 		app.dispatch(".uno:InsertObjectChart");
514 		sleep(3);
515 
516 		// Verify if the chart is inserted successfully
517 		assertTrue("Chart Editor appears", chart.exists(3));
518 		// Focus on edit pane
519 		writer.click(5, 5);
520 		sleep(1);
521 		assertFalse("Chart Editor appears", chart.exists());
522 		discard();
523 	}
524 
525 	/**
526 	 * Test insert a chart in a spreadsheet document 1. New a spreadsheet
527 	 * document 2. Insert a chart 3. Check if the chart is inserted successfully
528 	 *
529 	 * @throws Exception
530 	 */
531 	@Test
532 	public void testInsertChartInSpreadsheet() throws Exception {
533 		// Create a new spreadsheet document
534 		newSpreadsheet();
535 		// Insert a chart
536 		app.dispatch(".uno:InsertObjectChart");
537 		sleep(3);
538 		chartWizard.ok();
539 
540 		// Verify if the chart is inserted successfully
541 		assertTrue("Chart Editor appears", chart.exists(3));
542 		// Focus on edit pane
543 		calc.click(5, 5);
544 		sleep(1);
545 		assertFalse("Chart Editor appears", chart.exists());
546 		discard();
547 	}
548 
549 	/**
550 	 * Test insert a chart in a presentation document 1. New a presentation
551 	 * document 2. Insert a chart 3. Check if the chart is inserted successfully
552 	 *
553 	 * @throws Exception
554 	 */
555 	@Test
556 	public void testInsertChartInPresentation() throws Exception {
557 		// Create a new presentation document
558 		newPresentation();
559 		// Insert a chart
560 		app.dispatch(".uno:InsertObjectChart");
561 		sleep(3);
562 		// Verify if the chart is inserted successfully
563 		assertTrue("Chart Editor appears", chart.exists(3));
564 		// Focus on edit pane
565 		impress.click(5, 5);
566 		sleep(1);
567 		assertFalse("Chart Editor appears", chart.exists());
568 		discard();
569 	}
570 
571 	/**
572 	 * Test insert a table in a draw document 1. New a draw document 2. Insert a
573 	 * default table 3. Check if the table is inserted successfully
574 	 *
575 	 * @throws Exception
576 	 */
577 	@Test
578 	public void testInsertTableInDraw() throws Exception {
579 		// Create a new drawing document
580 		newDrawing();
581 		// Insert a table
582 		app.dispatch(".uno:InsertTable");
583 		insertTable.ok();
584 		sleep(1);
585 		draw.typeKeys("3");
586 		assertTrue("Table Toolbar appears", tableToolbar.exists(3));
587 //		assertEquals("The cell content", "3", copyAll());
588 		discard();
589 	}
590 
591 	/**
592 	 * Test insert a table in a text document 1. New a text document 2. Insert a
593 	 * default table 3. Check if the table is inserted successfully
594 	 *
595 	 * @throws Exception
596 	 */
597 	@Test
598 	public void testInsertTableInDocument() throws Exception {
599 		// Create a new text document
600 		newTextDocument();
601 		// Insert a table
602 		app.dispatch(".uno:InsertTable");
603 		writerInsertTable.ok();
604 		sleep(1);
605 		writer.typeKeys("3");
606 		// Verify if the table toolbar is active
607 		assertTrue("Table Toolbar appears", tableToolbar.exists(3));
608 //		assertEquals("The cell content", "3", copyAll());
609 		discard();
610 	}
611 
612 	/**
613 	 * Test insert a table in a presentation document 1. New a presentation
614 	 * document 2. Insert a default table 3. Check if the table is inserted
615 	 * successfully
616 	 *
617 	 * @throws Exception
618 	 */
619 	@Test
620 	public void testInsertTableInPresentation() throws Exception {
621 		// Create a new presentation document
622 		newPresentation();
623 
624 		// Insert a table
625 		app.dispatch(".uno:InsertTable");
626 		insertTable.ok();
627 		sleep(1);
628 		impress.typeKeys("3");
629 		assertTrue("Table Toolbar appears", tableToolbar.exists(3));
630 //		assertEquals("The cell content", "3", copyAll());
631 		discard();
632 	}
633 
634 	/**
635 	 * Test insert a function in a spreadsheet document via Sum button 1. New a
636 	 * spreadsheet document 2. Insert a function via Sum button 3. Check if the
637 	 * result is correct
638 	 *
639 	 * @throws Exception
640 	 */
641 	@Test
642 	public void testSumInFormulaBar() throws Exception {
643 		// Create a new spreadsheet document
644 		newSpreadsheet();
645 		// Insert source numbers
646 		String sourceNumber1 = "5";
647 		String sourceNumber2 = "3";
648 		String expectedResult = "8";
649 		SCTool.selectRange("A1");
650 		typeKeys(sourceNumber1);
651 		SCTool.selectRange("B1");
652 		typeKeys(sourceNumber2);
653 		// Insert a function via Sum button
654 		SCTool.selectRange("C1");
655 		scInputBarSum.click();
656 		typeKeys("<enter>");
657 		// Verify if the calculated result is equal to the expected result
658 		assertEquals("The calculated result", expectedResult, SCTool.getCellText("C1"));
659 		discard();
660 	}
661 
662 	/**
663 	 * Test insert a function in a spreadsheet document via inputbar 1. New a
664 	 * spreadsheet document 2. Insert a function via inputbar: COS 3. Check if
665 	 * the result is correct
666 	 *
667 	 * @throws Exception
668 	 */
669 	@Test
670 	public void testInsertFunctionViaFormulaBar() throws Exception {
671 		// Create a new spreadsheet document
672 		newSpreadsheet();
673 		// Insert source numbers and expected result
674 		String sourceData = "0";
675 		String expectedResult = "1";
676 		SCTool.selectRange("A1");
677 		typeKeys(sourceData);
678 
679 		// Insert a function via inputbar: COS
680 		SCTool.selectRange("D1");
681 		scInputBarInput.inputKeys("=COS(A1)");
682 		typeKeys("<enter>");
683         sleep(1);
684 		// Verify if the calculated result is equal to the expected result
685         String result = SCTool.getCellText("D1");
686 		sleep(1);
687         assertEquals("The calculated result", expectedResult, result);
688 		discard();
689 	}
690 
691 	/**
692 	 * Test insert a function in a spreadsheet document via Function Wizard
693 	 * Dialog 1. New a spreadsheet document 2. Insert a function via Function
694 	 * Wizard Dialog: ABS 3. Check if the result is correct
695 	 *
696 	 * @throws Exception
697 	 */
698 	@Test
699 	public void testFunctionWizardInFormulaBar() throws Exception {
700 		// Create a new spreadsheet document
701 		newSpreadsheet();
702 		// Insert source number
703 		String sourceNumber = "-5";
704 		String expectedResult = "5";
705 		SCTool.selectRange("A1");
706 		typeKeys(sourceNumber);
707 		typeKeys("<enter>");
708 		// Insert a function via Function Wizard Dialog: ABS
709 		SCTool.selectRange("B1");
710 		app.dispatch(".uno:FunctionDialog");
711 		// SC_FunctionWizardDlg_FunctionList.doubleClick(5, 5);
712 		scFunctionWizardDlgFunctionList.select("ABS");
713 		scFunctionWizardDlgNext.click(); // Use "Next" button
714 		scFunctionWizardDlgEdit1.typeKeys("A1");
715 		sleep(1);
716 		scFunctionWizardDlg.ok();
717 		sleep(1);
718 		// Verify if the calculated result is equal to the expected result
719         String result = SCTool.getCellText("B1");
720 		sleep(1);
721         assertEquals("The calculated result", expectedResult, result);
722 		discard();
723 	}
724 
725 	/**
726 	 * Test open a non-http(s) type hyperlink (with host only) in a text document.
727 	 * (coverage included in fvt.gui.sw.hyperlink.WarningDialog
728 	 * testHyperlinkDisplaysWarning() and included here for build verification)
729 	 * 1. New a text document
730 	 * 2. Insert a dav type hyperlink
731 	 * 3. Open hyperlink
732 	 * 4. Verify security warning dialog is displayed
733 	 *
734 	 * @throws Exception
735 	 */
736 	@Test
737 	public void testNonHttpHyperlinkWithHostOnly() throws Exception {
738 		// Create a new text document
739 		newTextDocument();
740 		writer.waitForExistence(10, 2);
741 		// open the hyperlink dialog
742 		writer.typeKeys("<alt i>"); // insert menu
743 		writer.typeKeys("h"); // hyperlink
744 		hyperlinkInetPathComboBox.setText("dav://nonexistant.url.com"); //target
745 		hyperlinkInetText.setText("dav://nonexistant.url.com"); // displayed text
746 		hyperlinkDialogOkBtn.click(); // apply
747 		hyperlinkDialogCancelBtn.click(); // close
748 		sleep(1); // give the dialog time to close
749 		typeKeys("<shift F10>"); // context menu
750 		typeKeys("o"); // open hyperlink
751 		// we can't be sure of the language so just check for the dialog
752 		boolean msgExists = activeMsgBox.exists(1); // wait 1 second for the dialog
753 		if (msgExists) {
754 			activeMsgBox.no(); // close dialog
755 		}
756 		assertTrue("security warning not displayed", msgExists);
757 		discard();
758 	}
759 
760 }