1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski package svt.gui;
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski import static org.openoffice.test.common.Testspace.*;
25*b1cdbd2cSJim Jagielski import static org.openoffice.test.vcl.Tester.*;
26*b1cdbd2cSJim Jagielski import static testlib.gui.AppTool.*;
27*b1cdbd2cSJim Jagielski import static testlib.gui.UIMap.*;
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski import java.io.File;
30*b1cdbd2cSJim Jagielski import java.util.ArrayList;
31*b1cdbd2cSJim Jagielski import java.util.Collection;
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski import junit.framework.Assert;
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski import org.junit.After;
36*b1cdbd2cSJim Jagielski import org.junit.Before;
37*b1cdbd2cSJim Jagielski import org.junit.Rule;
38*b1cdbd2cSJim Jagielski import org.junit.Test;
39*b1cdbd2cSJim Jagielski import org.junit.runner.RunWith;
40*b1cdbd2cSJim Jagielski import org.junit.runners.Parameterized;
41*b1cdbd2cSJim Jagielski import org.junit.runners.Parameterized.Parameters;
42*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Condition;
43*b1cdbd2cSJim Jagielski import org.openoffice.test.common.FileUtil;
44*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Logger;
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski import testlib.gui.SDTool;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski @RunWith(Parameterized.class)
49*b1cdbd2cSJim Jagielski public class TestSample {
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski 	public static String repos = "samples";
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski 	public static String[][] params = {};
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski 	@Parameters
data()56*b1cdbd2cSJim Jagielski 	public static Collection<Object[]> data() {
57*b1cdbd2cSJim Jagielski 		File dir = new File(repos);
58*b1cdbd2cSJim Jagielski 		ArrayList<Object[]> list = new ArrayList<Object[]>();
59*b1cdbd2cSJim Jagielski 		collect(dir, list);
60*b1cdbd2cSJim Jagielski 		return list;
61*b1cdbd2cSJim Jagielski 	}
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski 	/**
64*b1cdbd2cSJim Jagielski 	 * @see <a href="http://www.ibm.com">Manual Case</a>
65*b1cdbd2cSJim Jagielski 	 * @param dir
66*b1cdbd2cSJim Jagielski 	 * @param list
67*b1cdbd2cSJim Jagielski 	 */
collect(File dir, ArrayList<Object[]> list)68*b1cdbd2cSJim Jagielski 	public static void collect(File dir, ArrayList<Object[]> list) {
69*b1cdbd2cSJim Jagielski 		File[] files = dir.listFiles();
70*b1cdbd2cSJim Jagielski 		if (files == null)
71*b1cdbd2cSJim Jagielski 			return;
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski 		for (File file : files) {
74*b1cdbd2cSJim Jagielski 			if (file.isDirectory()) {
75*b1cdbd2cSJim Jagielski 				collect(file, list);
76*b1cdbd2cSJim Jagielski 			} else {
77*b1cdbd2cSJim Jagielski 				String fileName = file.getName().toLowerCase();
78*b1cdbd2cSJim Jagielski 				for (String[] param : params) {
79*b1cdbd2cSJim Jagielski 					String filter = param[0];
80*b1cdbd2cSJim Jagielski 					if (filter != null && fileName.matches(filter)) {
81*b1cdbd2cSJim Jagielski 						Object[] data = { file, param[1], param[2] };
82*b1cdbd2cSJim Jagielski 						list.add(data);
83*b1cdbd2cSJim Jagielski 						System.out.println(file + param[1] + param[2]);
84*b1cdbd2cSJim Jagielski 						break;
85*b1cdbd2cSJim Jagielski 					}
86*b1cdbd2cSJim Jagielski 				}
87*b1cdbd2cSJim Jagielski 			}
88*b1cdbd2cSJim Jagielski 		}
89*b1cdbd2cSJim Jagielski 	}
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 	private static final String writerFilter = ".*\\.((odt)|(ott)|(sxw)|(stw)|(doc)|(dot)|(docx)|(docm)|(dotx)|(dotm))$";
92*b1cdbd2cSJim Jagielski 	private static final String calcFilter = ".*\\.((ods)|(ots)|(sxc)|(stc)|(xls)|(xlt)|(xlsx)|(xltx)|(xlsm)|(xltm))$";
93*b1cdbd2cSJim Jagielski 	private static final String impressFilter = ".*\\.((odp)|(otp)|(sxi)|(sti)|(ppt)|(pot)|(pptx)|(pptm)|(potm)|(potx))$";
94*b1cdbd2cSJim Jagielski 	private static final String drawFilter = ".*\\.((odg)|(otg)|(sxd)|(sxt))$";
95*b1cdbd2cSJim Jagielski 	private static final String databaseFilter = ".*\\.(odb)$";
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 	@Rule
98*b1cdbd2cSJim Jagielski 	public Logger log = Logger.getLogger(this);
99*b1cdbd2cSJim Jagielski 	private File originalFile = null;
100*b1cdbd2cSJim Jagielski 	private String saveas = null;
101*b1cdbd2cSJim Jagielski 	private String editor = null;
102*b1cdbd2cSJim Jagielski 	private File file = null;
103*b1cdbd2cSJim Jagielski 	private String saveTo = null;
104*b1cdbd2cSJim Jagielski 	private boolean passed = false;
105*b1cdbd2cSJim Jagielski 
TestSample(File file, String saveas, String editor)106*b1cdbd2cSJim Jagielski 	public TestSample(File file, String saveas, String editor) {
107*b1cdbd2cSJim Jagielski 		this.originalFile = file;
108*b1cdbd2cSJim Jagielski 		this.saveas = saveas;
109*b1cdbd2cSJim Jagielski 		this.editor = editor;
110*b1cdbd2cSJim Jagielski 	}
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 	/**
113*b1cdbd2cSJim Jagielski 	 * @throws java.lang.Exception
114*b1cdbd2cSJim Jagielski 	 */
115*b1cdbd2cSJim Jagielski 	@Before
setUp()116*b1cdbd2cSJim Jagielski 	public void setUp() {
117*b1cdbd2cSJim Jagielski 		app.start();
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 		FileUtil.deleteFile(getPath("temp"));
120*b1cdbd2cSJim Jagielski 		File temp = new File(getPath("temp"));
121*b1cdbd2cSJim Jagielski 		temp.mkdirs();
122*b1cdbd2cSJim Jagielski 		log.info("Load sample file from \"" + originalFile.getAbsolutePath() + "\"");
123*b1cdbd2cSJim Jagielski 		file = new File(temp + "/origin", "sample." + FileUtil.getFileExtName(originalFile.getName()) /*
124*b1cdbd2cSJim Jagielski 																									 * file
125*b1cdbd2cSJim Jagielski 																									 * .
126*b1cdbd2cSJim Jagielski 																									 * getName
127*b1cdbd2cSJim Jagielski 																									 * (
128*b1cdbd2cSJim Jagielski 																									 * )
129*b1cdbd2cSJim Jagielski 																									 */);
130*b1cdbd2cSJim Jagielski 		FileUtil.copyFile(originalFile, file); // We use the copy to do test
131*b1cdbd2cSJim Jagielski 		saveTo = getPath("temp/" + file.getName() + (saveas == null ? "" : "." + saveas));
132*b1cdbd2cSJim Jagielski 	}
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 	@After
tearDown()135*b1cdbd2cSJim Jagielski 	public void tearDown() {
136*b1cdbd2cSJim Jagielski 		if (!passed) {
137*b1cdbd2cSJim Jagielski 			// Collect the failed sample files.
138*b1cdbd2cSJim Jagielski 			File failedDir = new File(getPath("output/TestSample.Failed"));
139*b1cdbd2cSJim Jagielski 			FileUtil.copyFile(originalFile, new File(failedDir, originalFile.getName()));
140*b1cdbd2cSJim Jagielski 		}
141*b1cdbd2cSJim Jagielski 	}
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski 	@Test
test()144*b1cdbd2cSJim Jagielski 	public void test() {
145*b1cdbd2cSJim Jagielski 		if (editor == null) {
146*b1cdbd2cSJim Jagielski 			String name = file.getName();
147*b1cdbd2cSJim Jagielski 			if (name.matches(writerFilter)) {
148*b1cdbd2cSJim Jagielski 				testWriter();
149*b1cdbd2cSJim Jagielski 			} else if (name.matches(calcFilter)) {
150*b1cdbd2cSJim Jagielski 				testCalc();
151*b1cdbd2cSJim Jagielski 			} else if (name.matches(impressFilter)) {
152*b1cdbd2cSJim Jagielski 				testImpress();
153*b1cdbd2cSJim Jagielski 			} else if (name.matches(drawFilter)) {
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski 			} else if (name.matches(databaseFilter)) {
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 			} else {
158*b1cdbd2cSJim Jagielski 				Assert.assertTrue("It's supported", false);
159*b1cdbd2cSJim Jagielski 			}
160*b1cdbd2cSJim Jagielski 		} else {
161*b1cdbd2cSJim Jagielski 			if (editor.equals("writer"))
162*b1cdbd2cSJim Jagielski 				testWriter();
163*b1cdbd2cSJim Jagielski 			if (editor.equals("calc"))
164*b1cdbd2cSJim Jagielski 				testCalc();
165*b1cdbd2cSJim Jagielski 			if (editor.equals("impress"))
166*b1cdbd2cSJim Jagielski 				testImpress();
167*b1cdbd2cSJim Jagielski 			if (editor.equals("draw"))
168*b1cdbd2cSJim Jagielski 				testDraw();
169*b1cdbd2cSJim Jagielski 			if (editor.equals("database"))
170*b1cdbd2cSJim Jagielski 				testDatabase();
171*b1cdbd2cSJim Jagielski 		}
172*b1cdbd2cSJim Jagielski 	}
173*b1cdbd2cSJim Jagielski 
testDatabase()174*b1cdbd2cSJim Jagielski 	private void testDatabase() {
175*b1cdbd2cSJim Jagielski 		// TODO Auto-generated method stub
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 	}
178*b1cdbd2cSJim Jagielski 
testDraw()179*b1cdbd2cSJim Jagielski 	private void testDraw() {
180*b1cdbd2cSJim Jagielski 		// TODO Auto-generated method stub
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 	}
183*b1cdbd2cSJim Jagielski 
testWriter()184*b1cdbd2cSJim Jagielski 	public void testWriter() {
185*b1cdbd2cSJim Jagielski 		open(file.getAbsolutePath());
186*b1cdbd2cSJim Jagielski 		handleBlocker(writer);
187*b1cdbd2cSJim Jagielski 		sleep(10);
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 		// Assert.assertTrue("File Passed:" + file,
190*b1cdbd2cSJim Jagielski 		// writer.getCaption().contains(file.getName()));
191*b1cdbd2cSJim Jagielski 		saveAs(saveTo);
192*b1cdbd2cSJim Jagielski 		if (alienFormatDlg.exists(3))
193*b1cdbd2cSJim Jagielski 			alienFormatDlg.ok();
194*b1cdbd2cSJim Jagielski 		sleep(2);
195*b1cdbd2cSJim Jagielski 		writer.waitForEnabled(120, 2);
196*b1cdbd2cSJim Jagielski 		close();
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 		open(saveTo);
199*b1cdbd2cSJim Jagielski 		handleBlocker(writer);
200*b1cdbd2cSJim Jagielski 		sleep(10);
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 		// Assert.assertTrue("File Passed:" + file,
203*b1cdbd2cSJim Jagielski 		// writer.getCaption().contains(file.getName()));
204*b1cdbd2cSJim Jagielski 		close();
205*b1cdbd2cSJim Jagielski 		passed = true;
206*b1cdbd2cSJim Jagielski 	}
207*b1cdbd2cSJim Jagielski 
testCalc()208*b1cdbd2cSJim Jagielski 	public void testCalc() {
209*b1cdbd2cSJim Jagielski 		startcenter.menuItem("File->Open...").select();
210*b1cdbd2cSJim Jagielski 		submitOpenDlg(file.getAbsolutePath());
211*b1cdbd2cSJim Jagielski 		handleBlocker(calc);
212*b1cdbd2cSJim Jagielski 		sleep(10); // Wait. Crash maybe occurs when the file is shown!
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 		// Assert.assertTrue("File Passed:" + file,
215*b1cdbd2cSJim Jagielski 		// calc.getCaption().contains(file.getName()));
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski 		calc.menuItem("File->Save As...").select();
218*b1cdbd2cSJim Jagielski 		submitSaveDlg(saveTo);
219*b1cdbd2cSJim Jagielski 		if (alienFormatDlg.exists(3))
220*b1cdbd2cSJim Jagielski 			alienFormatDlg.ok();
221*b1cdbd2cSJim Jagielski 		sleep(2);
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 		new Condition() {
224*b1cdbd2cSJim Jagielski 			@Override
225*b1cdbd2cSJim Jagielski 			public boolean value() {
226*b1cdbd2cSJim Jagielski 				if (msgBox_AdditionalRowsNotSaved.exists()) {
227*b1cdbd2cSJim Jagielski 					msgBox_AdditionalRowsNotSaved.ok();
228*b1cdbd2cSJim Jagielski 				}
229*b1cdbd2cSJim Jagielski 				return calc.isEnabled();
230*b1cdbd2cSJim Jagielski 			}
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 		}.waitForTrue("Time out to wait the control to be enabled!", 120, 2);
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 		calc.menuItem("File->Close").select();
235*b1cdbd2cSJim Jagielski 		openStartcenter();
236*b1cdbd2cSJim Jagielski 		// Reopen the saved file
237*b1cdbd2cSJim Jagielski 		startcenter.menuItem("File->Open...").select();
238*b1cdbd2cSJim Jagielski 		submitOpenDlg(saveTo);
239*b1cdbd2cSJim Jagielski 		handleBlocker(calc);
240*b1cdbd2cSJim Jagielski 		sleep(10);
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski 		// Assert.assertTrue("File Passed:" + file,
243*b1cdbd2cSJim Jagielski 		// calc.getCaption().contains(file.getName()));
244*b1cdbd2cSJim Jagielski 		calc.menuItem("File->Close").select();
245*b1cdbd2cSJim Jagielski 		passed = true;
246*b1cdbd2cSJim Jagielski 	}
247*b1cdbd2cSJim Jagielski 
testImpress()248*b1cdbd2cSJim Jagielski 	public void testImpress() {
249*b1cdbd2cSJim Jagielski 		startcenter.menuItem("File->Open...").select();
250*b1cdbd2cSJim Jagielski 		submitOpenDlg(file.getAbsolutePath());
251*b1cdbd2cSJim Jagielski 		handleBlocker(impress, impressSlideSorter, impressOutline, impressHandout);
252*b1cdbd2cSJim Jagielski 		sleep(10); // Wait. Crash maybe occurs when the file is shown!
253*b1cdbd2cSJim Jagielski 		SDTool.getActiveView().menuItem("View->Normal").select();
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 		// Assert.assertTrue("File Passed:" + file,
256*b1cdbd2cSJim Jagielski 		// impress.getCaption().contains(file.getName()));
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski 		impress.menuItem("File->Save As...").select();
259*b1cdbd2cSJim Jagielski 		submitSaveDlg(saveTo);
260*b1cdbd2cSJim Jagielski 		if (alienFormatDlg.exists(3))
261*b1cdbd2cSJim Jagielski 			alienFormatDlg.ok();
262*b1cdbd2cSJim Jagielski 		sleep(2);
263*b1cdbd2cSJim Jagielski 		impress.waitForEnabled(120, 2);
264*b1cdbd2cSJim Jagielski 		impress.menuItem("File->Close").select();
265*b1cdbd2cSJim Jagielski 		openStartcenter();
266*b1cdbd2cSJim Jagielski 		// Reopen the saved file
267*b1cdbd2cSJim Jagielski 		startcenter.menuItem("File->Open...").select();
268*b1cdbd2cSJim Jagielski 		submitOpenDlg(saveTo);
269*b1cdbd2cSJim Jagielski 		handleBlocker(impress);
270*b1cdbd2cSJim Jagielski 		sleep(10); // Wait.
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski 		// Assert.assertTrue("File Passed:" + file,
273*b1cdbd2cSJim Jagielski 		// impress.getCaption().contains(file.getName()));
274*b1cdbd2cSJim Jagielski 		impress.menuItem("File->Close").select();
275*b1cdbd2cSJim Jagielski 		passed = true;
276*b1cdbd2cSJim Jagielski 	}
277*b1cdbd2cSJim Jagielski }
278