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