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