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 package fvt.gui.sw.table;
23 
24 import static org.junit.Assert.*;
25 import static org.openoffice.test.vcl.Tester.*;
26 import static testlib.gui.AppTool.*;
27 import static testlib.gui.UIMap.*;
28 
29 import org.junit.After;
30 import org.junit.Before;
31 import org.junit.Ignore;
32 import org.junit.Rule;
33 import org.junit.Test;
34 import org.openoffice.test.common.Logger;
35 import org.openoffice.test.common.SystemUtil;
36 
37 import testlib.gui.AppTool;
38 
39 public class TableGeneral {
40 
41 	@Rule
42 	public Logger log = Logger.getLogger(this);
43 
44 	@Before
45 	public void setUp() throws Exception {
46 		// Start OpenOffice
47 		app.start();
48 
49 		AppTool.newTextDocument();
50 		// Insert a table
51 		app.dispatch(".uno:InsertTable");
52 	}
53 
54 	@After
55 	public void tearDown() throws Exception {
56 		app.stop();
57 	}
58 
59 	/**
60 	 * Test setting table size in text document
61 	 *
62 	 * @throws Exception
63 	 */
64 	@Test
65 	public void testTableSize() throws Exception {
66 
67 		swTableSizeColBox.focus();
68 		typeKeys("<delete>");
69 		typeKeys("3");
70 		swTableSizeRowBox.focus();
71 		typeKeys("<delete>");
72 		typeKeys("4");
73 		writerInsertTable.ok();
74 
75 		writer.focus();
76 		// verify the rows in the table
77 		assertNotNull(statusBar.getItemTextById(8));
78 		for (int i = 0; i < 3; i++) {
79 			typeKeys("<down>");
80 			assertNotNull(statusBar.getItemTextById(8));
81 		}
82 		typeKeys("<down>");
83 		sleep(1);
84 		assertFalse(tableToolbar.exists());
85 	}
86 
87 	/**
88 	 * Test setting table cell background in text document
89 	 *
90 	 * @throws Exception
91 	 */
92 	@Test
93 	@Ignore("Bug #120378- the table cell fill color change when copy one table cell in word processor to presentation")
94 	public void testTableBackground() throws Exception {
95 		writerInsertTable.ok();
96 		assertNotNull(statusBar.getItemTextById(8));
97 		writer.focus();
98 		// set table cell background
99 		app.dispatch(".uno:TableDialog");
100 		swTableBackground.select();
101 		assertTrue("Table background property dialog pop up",
102 				swTableBackground.exists());
103 		swTableBackgroundColor.focus();
104 		swTableBackgroundColor.click(50, 50);
105 		swTableBackground.ok();
106 		// verify table cell background color
107 		writer.focus();
108 		// select the cell which is filled with color
109 		app.dispatch(".uno:EntireCell");
110 
111 		typeKeys("<ctrl c>");
112 		AppTool.newPresentation();
113 		typeKeys("<ctrl v>");
114 		// enable table cell area format dialog
115 		app.dispatch(".uno:FormatArea");
116 		sleep(1);
117 		assertEquals("Light red", sdTableBACGColorListbox.getSelText());
118 		// close table cell area format dialog
119 		sdTableBACGColorArea.cancel();
120 	}
121 
122 	/**
123 	 * Test setting table border in text document
124 	 *
125 	 * @throws Exception
126 	 */
127 	@Test
128 	public void testTableBorder() throws Exception {
129 		writerInsertTable.ok();
130 		assertNotNull(statusBar.getItemTextById(8));
131 		// set table border as none
132 		writer.focus();
133 		app.dispatch(".uno:TableDialog");
134 		swTableBorder.select();
135 		assertTrue("Table border property dialog pop up",
136 				swTableBorder.exists());
137 		swTableBorderLineArrange.click(10, 10);
138 		swTableBorder.ok();
139 	}
140 
141 	/**
142 	 * Test setting table border line style,line color,spacing to content in
143 	 * text document
144 	 *
145 	 * @throws Exception
146 	 */
147 	@Test
148 	public void testTableBorderLineStyle() throws Exception {
149 		writerInsertTable.ok();
150 		assertNotNull(statusBar.getItemTextById(8));
151 		writer.focus();
152 		app.dispatch(".uno:TableDialog");
153 		swTableBorder.select();
154 		assertTrue("Table border property dialog pop up",
155 				swTableBorder.exists());
156 		// set line style
157 		swTableBorderLineStyle.select(8);
158 		// set line color
159 		final int nMagentaIndex = 16; // for AOO's colorpicker as of #i118828#
160 		swTableBorderLineColor.select( nMagentaIndex);
161 		// set spacing to content
162 		swTableSTCLeft.focus();
163 		typeKeys("<ctrl a>");
164 		typeKeys("<delete>");
165 		// set spacing to content
166 		typeKeys("0.5");
167 		// set table shadow
168 		swTableShadow.click(40, 10);
169 		swTableShadowSize.focus();
170 		typeKeys("<ctrl a>");
171 		typeKeys("<delete>");
172 		typeKeys("2");
173 		swTableShadowColor.select( nMagentaIndex);
174 		swTableBorder.ok();
175 		// verify the setting property of table
176 		writer.focus();
177 		app.dispatch(".uno:TableDialog");
178 		swTableBorder.select();
179 		assertEquals("2.60 pt", swTableBorderLineStyle.getItemText(8));
180 		assertEquals("Magenta", swTableBorderLineColor.getItemText( nMagentaIndex));
181 		assertEquals("0.50 \"", swTableSTCLeft.getText());
182 		assertEquals("0.50 \"", swTableSTCRight.getText());
183 		assertEquals("0.50 \"", swTableSTCTop.getText());
184 		assertEquals("0.50 \"", swTableSTCBottom.getText());
185 		assertEquals("1.97 \"", swTableShadowSize.getText());
186 		assertEquals("Magenta", swTableShadowColor.getItemText( nMagentaIndex));
187 		assertTrue("SWTableSTC_SYNC", swTableSTCSYNC.isChecked());
188 		swTableBorder.close();
189 
190 		// uncheck Synchronize box and set spacing to content
191 		writer.focus();
192 		app.dispatch(".uno:TableDialog");
193 		swTableBorder.select();
194 		swTableSTCSYNC.uncheck();
195 		// set left spacing to content
196 		swTableSTCLeft.focus();
197 		typeKeys("<ctrl a>");
198 		typeKeys("<delete>");
199 		typeKeys("0.5");
200 		// set right spacing to content
201 		swTableSTCRight.focus();
202 		typeKeys("<ctrl a>");
203 		typeKeys("<delete>");
204 		typeKeys("0.8");
205 		// set top spacing to content
206 		swTableSTCTop.focus();
207 		typeKeys("<ctrl a>");
208 		typeKeys("<delete>");
209 		typeKeys("1.0");
210 		// set bottom spacing to content
211 		swTableSTCBottom.focus();
212 		typeKeys("<ctrl a>");
213 		typeKeys("<delete>");
214 		typeKeys("2");
215 		swTableBorder.ok();
216 		assertNotNull(statusBar.getItemTextById(8));
217 
218 		writer.focus();
219 		// verify the setting value of spacing to content for table
220 		app.dispatch(".uno:TableDialog");
221 		swTableBorder.select();
222 		assertEquals("0.50 \"", swTableSTCLeft.getText());
223 		assertEquals("0.80 \"", swTableSTCRight.getText());
224 		assertEquals("1.00 \"", swTableSTCTop.getText());
225 		assertEquals("1.97 \"", swTableSTCBottom.getText());
226 		assertFalse("SWTableSTC_SYNC", swTableSTCSYNC.isChecked());
227 		swTableBorder.close();
228 	}
229 
230 	/**
231 	 * create table with auto format
232 	 *
233 	 * @throws Exception
234 	 */
235 	@Test
236 	public void testTableAutoFormat() throws Exception {
237 		// create table with auto format
238 		button("sw:PushButton:DLG_INSERT_TABLE:BT_AUTOFORMAT").click();
239 		assertTrue("Table auto format dialog pop up", swTableAutoFMT.exists());
240 		swTableAutoFormatListbox.select(3);
241 		swTableAutoFMT.ok();
242 		// verify the auto format is that just selected
243 		button("sw:PushButton:DLG_INSERT_TABLE:BT_AUTOFORMAT").click();
244 		assertEquals("Blue", swTableAutoFormatListbox.getSelText());
245 		swTableAutoFMT.close();
246 		writerInsertTable.ok();
247 		assertNotNull(statusBar.getItemTextById(8));
248 
249 	}
250 
251 	/**
252 	 * set row height and select row,insert/delete row
253 	 *
254 	 * @throws Exception
255 	 */
256 	@Test
257 	public void testTableRowHeight() throws Exception {
258 		writerInsertTable.ok();
259 		assertNotNull(statusBar.getItemTextById(8));
260 
261 		// set row height
262 		writer.focus();
263 		writer.openContextMenu();
264 		swTableRowHeightMenu.select();
265 		assertTrue(swTableSetRowHeightDialog.exists());
266 		swTableSetRowHeight.focus();
267 		typeKeys("<ctrl a>");
268 		typeKeys("<delete>");
269 		typeKeys("0.5");
270 		swTableSetRowHeightDialog.ok();
271 
272 		// verify row height
273 		writer.focus();
274 		writer.openContextMenu();
275 		swTableRowHeightMenu.select();
276 		assertTrue(swTableSetRowHeightDialog.exists());
277 		assertEquals("0.50 \"", swTableSetRowHeight.getText());
278 		swTableSetRowHeightDialog.close();
279 	}
280 
281 	/**
282 	 * test select row
283 	 *
284 	 * @throws Exception
285 	 */
286 	@Test
287 	public void testTableSelectRow() throws Exception {
288 		writerInsertTable.ok();
289 		assertNotNull(statusBar.getItemTextById(8));
290 		// select row
291 		writer.focus();
292 		writer.openContextMenu();
293 		swTableSelectRowMenu.select();
294 
295 		// verify select one row successfully
296 		typeKeys("<ctrl c>");
297 		typeKeys("<down>");
298 		typeKeys("<down>");
299 		typeKeys("<enter>");
300 		typeKeys("<ctrl v>");
301 		typeKeys("<up>");
302 		assertTrue(tableToolbar.exists());
303 
304 	}
305 
306 	/**
307 	 * insert row and verify how many row inserted
308 	 *
309 	 * @throws Exception
310 	 */
311 	@Test
312 	public void testTableInsertRow() throws Exception {
313 		writerInsertTable.ok();
314 		assertNotNull(statusBar.getItemTextById(8));
315 		writer.focus();
316 		writer.openContextMenu();
317 		swTableInsertRowMenu.select();
318 		assertTrue("SWTable_InsertRow Dialog pop up", swTableInsertRow.exists());
319 		swTableInsertRowColumnSetNumber.focus();
320 		typeKeys("<ctrl a>");
321 		typeKeys("<delete>");
322 		typeKeys("3");
323 		swTableInsertRow.ok();
324 
325 		writer.focus();
326 		// verify how many rows in the table
327 		assertNotNull(statusBar.getItemTextById(8));
328 		for (int i = 0; i < 4; i++) {
329 			typeKeys("<down>");
330 			assertNotNull(statusBar.getItemTextById(8));
331 		}
332 		typeKeys("<down>");
333 		sleep(1);
334 		assertFalse(tableToolbar.exists());
335 	}
336 
337 	/**
338 	 * delete row and verify row
339 	 *
340 	 * @throws Exception
341 	 */
342 	@Test
343 	public void testTableRowDelete() throws Exception {
344 		writerInsertTable.ok();
345 		assertNotNull(statusBar.getItemTextById(8));
346 		// delete row
347 		writer.focus();
348 		writer.openContextMenu();
349 		swTableRowDleteMenu.select();
350 		// verify whether delete row
351 		writer.focus();
352 		assertNotNull(statusBar.getItemTextById(8));
353 		typeKeys("<down>");
354 		sleep(1);
355 		assertFalse(tableToolbar.exists());
356 
357 	}
358 
359 	/**
360 	 * set column width and verify
361 	 *
362 	 * @throws Exception
363 	 */
364 	@Test
365 	public void testTableColumnWidth() throws Exception {
366 		writerInsertTable.ok();
367 		assertNotNull(statusBar.getItemTextById(8));
368 		// set column width
369 		writer.focus();
370 		writer.openContextMenu();
371 		swTableColumnWidthMenu.select();
372 		swTableSetColumnWidth.focus();
373 		typeKeys("<ctrl a>");
374 		typeKeys("<delete>");
375 		typeKeys("2");
376 		swTableSetColumnDialog.ok();
377 		// verify column width
378 		writer.focus();
379 		writer.openContextMenu();
380 		swTableColumnWidthMenu.select();
381 		assertEquals("2.00 \"", swTableSetColumnWidth.getText());
382 
383 	}
384 
385 	/**
386 	 * select column and verify
387 	 *
388 	 * @throws Exception
389 	 */
390 	@Test
391 	public void testTableColumnSelect() throws Exception {
392 		writerInsertTable.ok();
393 		assertNotNull(statusBar.getItemTextById(8));
394 		writer.focus();
395 		writer.openContextMenu();
396 		swTableColumnSelectMenu.select();
397 
398 		// verify select one column
399 		typeKeys("<ctrl c>");
400 		typeKeys("<down>");
401 		typeKeys("<down>");
402 		typeKeys("<enter>");
403 		typeKeys("<ctrl v>");
404 		typeKeys("<up>");
405 		assertTrue(tableToolbar.exists());
406 
407 	}
408 
409 	/**
410 	 * insert column and verify
411 	 *
412 	 * @throws Exception
413 	 */
414 	@Test
415 	public void testTableColumnInsert() throws Exception {
416 		writerInsertTable.ok();
417 		assertNotNull(statusBar.getItemTextById(8));
418 		// insert column
419 		writer.focus();
420 		writer.openContextMenu();
421 		swTableColumnInsertMenu.select();
422 		swTableInsertRowColumnSetNumber.focus();
423 		typeKeys("<ctrl a>");
424 		typeKeys("<delete>");
425 		typeKeys("3");
426 		swTableInsertColumn.ok();
427 		// verify insert column successfully
428 		writer.focus();
429 		assertTrue(tableToolbar.exists());
430 		for (int i = 0; i < 9; i++) {
431 			typeKeys("<right>");
432 			sleep(1);
433 			assertTrue(tableToolbar.exists());
434 		}
435 		typeKeys("<right>");
436 		sleep(1);
437 		assertFalse(tableToolbar.exists());
438 	}
439 
440 	/**
441 	 * delete column and verify whether delete or not
442 	 *
443 	 * @throws Exception
444 	 */
445 	public void testTableColumnDelete() throws Exception {
446 		writerInsertTable.ok();
447 		assertNotNull(statusBar.getItemTextById(8));
448 		// delete column
449 		writer.focus();
450 		writer.openContextMenu();
451 		swTableColumnDeleteMenu.select();
452 		// verify delete column
453 		writer.focus();
454 		assertTrue(tableToolbar.exists());
455 		for (int i = 0; i < 7; i++) {
456 			typeKeys("<right>");
457 			assertTrue(tableToolbar.exists());
458 		}
459 		sleep(1);
460 		assertFalse(tableToolbar.exists());
461 	}
462 
463 	/**
464 	 * split cell
465 	 *
466 	 * @throws Exception
467 	 */
468 	@Test
469 	public void testTableCellSplit() throws Exception {
470 		writerInsertTable.ok();
471 		assertTrue(tableToolbar.exists());
472 		for (int k = 0; k < 2; k++) {
473 			writer.focus();
474 			writer.openContextMenu();
475 			swTableCellSplitMenu.select();
476 			swTableCellSplitNumber.focus();
477 			typeKeys("<ctrl a>");
478 			typeKeys("<delete>");
479 			typeKeys("2");
480 			if (k == 0) {
481 				// split table cell horizontally
482 				swTableCellSplitDialog.ok();
483 			} else {
484 				// split table cell
485 				swTableCellSplitVERTButton.check();
486 				// vertically
487 				swTableCellSplitDialog.ok();
488 			}
489 		}
490 		// verify cell split successfully
491 		writer.focus();
492 		assertTrue(tableToolbar.exists());
493 		for (int i = 0; i < 7; i++) {
494 			typeKeys("<right>");
495 			assertTrue(tableToolbar.exists());
496 		}
497 		sleep(1);
498 		assertFalse(tableToolbar.exists());
499 	}
500 
501 	/**
502 	 * Test convert table to text in text document
503 	 *
504 	 * @throws Exception
505 	 */
506 	@Test
507 	public void testConvertTableToText() throws Exception {
508 		writerInsertTable.ok();
509 		writer.focus();
510 		typeKeys("1<right>2<right>3<right>4");
511 		sleep(1);
512 
513 		// Convert table to text
514 		app.dispatch(".uno:ConvertTableToText");
515 		assertTrue("Convert Table to Text dialog pop up",
516 				writerConvertTableToTextDlg.exists());
517 		// typeKeys("<enter>");
518 		writerConvertTableToTextDlg.ok();
519 
520 		// Verify if text is converted successfully
521 		app.dispatch(".uno:SelectAll");
522 		app.dispatch(".uno:Copy");
523 		if (SystemUtil.isWindows())
524 			assertEquals("Converted text", "1\t2\r\n3\t4\r\n",
525 					app.getClipboard());
526 		else
527 			assertEquals("Converted text", "1\t2\n3\t4\n", app.getClipboard());
528 	}
529 }
530