1 /* NoClassDeffTest.java
2  Copyright (C) 2013 Red Hat, Inc.
3 
4  This file is part of IcedTea.
5 
6  IcedTea is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, version 2.
9 
10  IcedTea is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with IcedTea; see the file COPYING.  If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  02110-1301 USA.
19 
20  Linking this library statically or dynamically with other modules is
21  making a combined work based on this library.  Thus, the terms and
22  conditions of the GNU General Public License cover the whole
23  combination.
24 
25  As a special exception, the copyright holders of this library give you
26  permission to link this library with independent modules to produce an
27  executable, regardless of the license terms of these independent
28  modules, and to copy and distribute the resulting executable under
29  terms of your choice, provided that you also meet, for each linked
30  independent module, the terms and conditions of the license of that
31  module.  An independent module is a module which is not derived from
32  or based on this library.  If you modify this library, you may extend
33  this exception to your version of the library, but you are not
34  obligated to do so.  If you do not wish to do so, delete this
35  exception statement from your version.
36  */
37 
38 import java.io.File;
39 import java.io.IOException;
40 import java.util.Arrays;
41 import java.util.List;
42 import net.sourceforge.jnlp.OptionsDefinitions;
43 import net.sourceforge.jnlp.ProcessResult;
44 import net.sourceforge.jnlp.ServerAccess;
45 import net.sourceforge.jnlp.annotations.Bug;
46 import net.sourceforge.jnlp.annotations.NeedsDisplay;
47 import net.sourceforge.jnlp.annotations.TestInBrowsers;
48 import net.sourceforge.jnlp.browsertesting.BrowserTest;
49 import net.sourceforge.jnlp.browsertesting.Browsers;
50 import net.sourceforge.jnlp.closinglisteners.AutoOkClosingListener;
51 import net.sourceforge.jnlp.closinglisteners.StringBasedClosingListener;
52 import net.sourceforge.jnlp.util.FileUtils;
53 
54 import org.junit.Assert;
55 import org.junit.Test;
56 
57 @Bug(id = "PR2219")
58 /**
59  *
60  * When NoClassDefFound is thrown from ITW. Current behaviour: javaws app
61  * correctly dies browsers and -html correctly dies
62  *
63  * javaws applet SURVIVES init and start throwing this. But correctly dies in
64  * paint
65  *
66  *
67  */
68 public class NoClassDeffTest extends BrowserTest {
69 
70     private class NoClassDefFoundErrorClosingListener extends StringBasedClosingListener {
71 
NoClassDefFoundErrorClosingListener()72         public NoClassDefFoundErrorClosingListener() {
73             super(NoClassDefFoundError.class.getSimpleName());
74         }
75 
76     }
77 
78     private static final String appletCloseString = AutoOkClosingListener.MAGICAL_OK_CLOSING_STRING;
79     private static final String[] HTMLA = new String[]{OptionsDefinitions.OPTIONS.HTML.option};
80     private static final List<String> HTMLL = Arrays.asList(HTMLA);
81 
82     private static final String JNLPAPP = "NoClassDeffApp.jnlp";
83     private static final String JNLPAPPLET = "NoClassDeffApplet.jnlp";
84     private static final String HTML = "NoClassDeff.html";
85     private static final String HTMLHREF = "NoClassDeffJnlpHref.html";
86 
87     //jnlp app OK run
88     @Test
89     @NeedsDisplay
noClassDeffTestWorksJnlp1()90     public void noClassDeffTestWorksJnlp1() throws Exception {
91         prepare("okRun", false);
92         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), null);
93         Assert.assertFalse(pr.stdout.contains("Loading LostClass"));
94         Assert.assertTrue(pr.stdout.contains("main1"));
95         Assert.assertTrue(pr.stdout.contains("main2"));
96         Assert.assertTrue(pr.stdout.contains(appletCloseString));
97         Assert.assertFalse(pr.stdout.contains("EX: "));
98     }
99 
100     //jnlp bad run 1
101     @Test
102     @NeedsDisplay
noClassDeffTestThrowJnlp1()103     public void noClassDeffTestThrowJnlp1() throws Exception {
104         prepare("main", false);
105         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), null);
106         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
107         Assert.assertTrue(pr.stdout.contains("main1"));
108         Assert.assertFalse(pr.stdout.contains("main2"));
109         Assert.assertFalse(pr.stdout.contains(appletCloseString));
110         Assert.assertFalse(pr.stdout.contains("EX: "));
111     }
112 
113     //jnlp bad run 2
114     @Test
115     @NeedsDisplay
noClassDeffTestThrowCatchJnlp1()116     public void noClassDeffTestThrowCatchJnlp1() throws Exception {
117         prepare("main", true);
118         ProcessResult pr = server.executeJavaws(JNLPAPP, new AutoOkClosingListener(), null);
119         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
120         Assert.assertTrue(pr.stdout.contains("main1"));
121         Assert.assertTrue(pr.stdout.contains("main2"));
122         Assert.assertTrue(pr.stdout.contains("EX: "));
123         Assert.assertTrue(pr.stdout.contains(appletCloseString));
124     }
125 
126     //applets  OK run
127     //opera should go correctly  up to destroy WITHOUT paint
128     //epiphany only start and init
129     //midori up to paint
130     //firefox, no data
131     //-html and jnlp applet get init, start, paint
132     @Test
133     @NeedsDisplay
134     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestWorksHtml1()135     public void noClassDeffTestWorksHtml1() throws Exception {
136         prepare("okRun", false);
137         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), null);
138         Assert.assertFalse(pr.stdout.contains("Loading LostClass"));
139         Assert.assertFalse(pr.stdout.contains("EX: "));
140         Assert.assertTrue(pr.stdout.contains("init1"));
141         Assert.assertTrue(pr.stdout.contains("init2"));
142         Assert.assertTrue(pr.stdout.contains("start1"));
143         Assert.assertTrue(pr.stdout.contains("start2"));
144 //        Assert.assertTrue(pr.stdout.contains("paint1"));
145 //        Assert.assertTrue(pr.stdout.contains("paint2"));
146 //        Assert.assertTrue(pr.stdout.contains("stop1"));
147 //        Assert.assertTrue(pr.stdout.contains("stop2"));
148 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
149 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
150 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
151     }
152 
153     @Test
154     @NeedsDisplay
155     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestWorksHtml2()156     public void noClassDeffTestWorksHtml2() throws Exception {
157         prepare("okRun", false);
158         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), null);
159         Assert.assertFalse(pr.stdout.contains("Loading LostClass"));
160         Assert.assertFalse(pr.stdout.contains("EX: "));
161         Assert.assertTrue(pr.stdout.contains("init1"));
162         Assert.assertTrue(pr.stdout.contains("init2"));
163         Assert.assertTrue(pr.stdout.contains("start1"));
164         Assert.assertTrue(pr.stdout.contains("start2"));
165 //        Assert.assertTrue(pr.stdout.contains("paint1"));
166 //        Assert.assertTrue(pr.stdout.contains("paint2"));
167 //        Assert.assertTrue(pr.stdout.contains("stop1"));
168 //        Assert.assertTrue(pr.stdout.contains("stop2"));
169 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
170 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
171 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
172     }
173 
174     @Test
175     @NeedsDisplay
noClassDeffTestWorksJnlp2()176     public void noClassDeffTestWorksJnlp2() throws Exception {
177         prepare("okRun", false);
178         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), null);
179         Assert.assertFalse(pr.stdout.contains("Loading LostClass"));
180         Assert.assertFalse(pr.stdout.contains("EX: "));
181         Assert.assertTrue(pr.stdout.contains("init1"));
182         Assert.assertTrue(pr.stdout.contains("init2"));
183         Assert.assertTrue(pr.stdout.contains("start1"));
184         Assert.assertTrue(pr.stdout.contains("start2"));
185         Assert.assertTrue(pr.stdout.contains("paint1"));
186         Assert.assertTrue(pr.stdout.contains("paint2"));
187 //        Assert.assertTrue(pr.stdout.contains("stop1"));
188 //        Assert.assertTrue(pr.stdout.contains("stop2"));
189 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
190 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
191         Assert.assertTrue(pr.stdout.contains(appletCloseString));
192     }
193 
194     @Test
195     @NeedsDisplay
196     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestWorksJavawsHtml1()197     public void noClassDeffTestWorksJavawsHtml1() throws Exception {
198         prepare("okRun", false);
199         ProcessResult pr = server.executeJavaws(HTMLL, HTML, new AutoOkClosingListener(), null);
200         Assert.assertFalse(pr.stdout.contains("Loading LostClass"));
201         Assert.assertFalse(pr.stdout.contains("EX: "));
202         Assert.assertTrue(pr.stdout.contains("init1"));
203         Assert.assertTrue(pr.stdout.contains("init2"));
204         Assert.assertTrue(pr.stdout.contains("start1"));
205         Assert.assertTrue(pr.stdout.contains("start2"));
206 //        Assert.assertTrue(pr.stdout.contains("paint1"));
207 //        Assert.assertTrue(pr.stdout.contains("paint2"));
208 //        Assert.assertTrue(pr.stdout.contains("stop1"));
209 //        Assert.assertTrue(pr.stdout.contains("stop2"));
210 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
211 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
212     }
213 
214     @Test
215     @NeedsDisplay
216     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestWorksJavawsHtml2()217     public void noClassDeffTestWorksJavawsHtml2() throws Exception {
218         prepare("okRun", false);
219         ProcessResult pr = server.executeJavaws(HTMLL, HTMLHREF, new AutoOkClosingListener(), null);
220         Assert.assertFalse(pr.stdout.contains("Loading LostClass"));
221         Assert.assertFalse(pr.stdout.contains("EX: "));
222         Assert.assertTrue(pr.stdout.contains("init1"));
223         Assert.assertTrue(pr.stdout.contains("init2"));
224         Assert.assertTrue(pr.stdout.contains("start1"));
225         Assert.assertTrue(pr.stdout.contains("start2"));
226 //        Assert.assertTrue(pr.stdout.contains("paint1"));
227 //        Assert.assertTrue(pr.stdout.contains("paint2"));
228 //        Assert.assertTrue(pr.stdout.contains("stop1"));
229 //        Assert.assertTrue(pr.stdout.contains("stop2"));
230 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
231 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
232         Assert.assertTrue(pr.stdout.contains(appletCloseString));
233     }
234 
235     //jnlp applets crashes
236     //they behave a bit differently form browser ones
237     @Test
238     @NeedsDisplay
noClassDeffTestThrowsInitJnlp2()239     public void noClassDeffTestThrowsInitJnlp2() throws Exception {
240         prepare("init", false);
241         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new NoClassDefFoundErrorClosingListener());
242         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
243         Assert.assertFalse(pr.stdout.contains("EX: "));
244         Assert.assertFalse(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
245         Assert.assertTrue(pr.stdout.contains("init1"));
246         Assert.assertFalse(pr.stdout.contains("init2"));
247         Assert.assertFalse(pr.stdout.contains("start1"));
248         Assert.assertFalse(pr.stdout.contains("start2"));
249         Assert.assertTrue(pr.stdout.contains("paint1"));
250         Assert.assertTrue(pr.stdout.contains("paint2"));
251 //        Assert.assertTrue(pr.stdout.contains("stop1"));
252 //        Assert.assertTrue(pr.stdout.contains("stop2"));
253 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
254 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
255         Assert.assertTrue(pr.stdout.contains(appletCloseString));
256     }
257 
258     @Test
259     @NeedsDisplay
noClassDeffTestThrowsStartJnlp2()260     public void noClassDeffTestThrowsStartJnlp2() throws Exception {
261         prepare("start", false);
262         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new NoClassDefFoundErrorClosingListener());
263         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
264         Assert.assertFalse(pr.stdout.contains("EX: "));
265         Assert.assertFalse(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
266         Assert.assertTrue(pr.stdout.contains("init1"));
267         Assert.assertTrue(pr.stdout.contains("init2"));
268         Assert.assertTrue(pr.stdout.contains("start1"));
269         Assert.assertFalse(pr.stdout.contains("start2"));
270         Assert.assertTrue(pr.stdout.contains("paint1"));
271         Assert.assertTrue(pr.stdout.contains("paint2"));
272 //        Assert.assertTrue(pr.stdout.contains("stop1"));
273 //        Assert.assertTrue(pr.stdout.contains("stop2"));
274 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
275 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
276         Assert.assertTrue(pr.stdout.contains(appletCloseString));
277     }
278 
279     @Test
280     @NeedsDisplay
noClassDeffTestThrowsPaintJnlp2()281     public void noClassDeffTestThrowsPaintJnlp2() throws Exception {
282         prepare("paint", false);
283         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), new NoClassDefFoundErrorClosingListener());
284         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
285         Assert.assertFalse(pr.stdout.contains("EX: "));
286         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
287         Assert.assertTrue(pr.stdout.contains("init1"));
288         Assert.assertTrue(pr.stdout.contains("init2"));
289         Assert.assertTrue(pr.stdout.contains("start1"));
290         Assert.assertTrue(pr.stdout.contains("start2"));
291         Assert.assertTrue(pr.stdout.contains("paint1"));
292         Assert.assertFalse(pr.stdout.contains("paint2"));
293 //        Assert.assertTrue(pr.stdout.contains("stop1"));
294 //        Assert.assertTrue(pr.stdout.contains("stop2"));
295 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
296 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
297         Assert.assertFalse(pr.stdout.contains(appletCloseString));
298     }
299 
300     @Test
301     @NeedsDisplay
noClassDeffTestThrowsCatchInitJnlp2()302     public void noClassDeffTestThrowsCatchInitJnlp2() throws Exception {
303         prepare("init", true);
304         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), null);
305         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
306         Assert.assertTrue(pr.stdout.contains("EX: "));
307         Assert.assertTrue(pr.stdout.contains("init1"));
308         Assert.assertTrue(pr.stdout.contains("init2"));
309         Assert.assertTrue(pr.stdout.contains("start1"));
310         Assert.assertTrue(pr.stdout.contains("start2"));
311         Assert.assertTrue(pr.stdout.contains("paint1"));
312         Assert.assertTrue(pr.stdout.contains("paint2"));
313 //        Assert.assertTrue(pr.stdout.contains("stop1"));
314 //        Assert.assertTrue(pr.stdout.contains("stop2"));
315 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
316 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
317         Assert.assertTrue(pr.stdout.contains(appletCloseString));
318     }
319 
320     @Test
321     @NeedsDisplay
noClassDeffTestThrowsCatchStartJnlp2()322     public void noClassDeffTestThrowsCatchStartJnlp2() throws Exception {
323         prepare("start", true);
324         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), null);
325         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
326         Assert.assertTrue(pr.stdout.contains("EX: "));
327         Assert.assertTrue(pr.stdout.contains("init1"));
328         Assert.assertTrue(pr.stdout.contains("init2"));
329         Assert.assertTrue(pr.stdout.contains("start1"));
330         Assert.assertTrue(pr.stdout.contains("start2"));
331         Assert.assertTrue(pr.stdout.contains("paint1"));
332         Assert.assertTrue(pr.stdout.contains("paint2"));
333 //        Assert.assertTrue(pr.stdout.contains("stop1"));
334 //        Assert.assertTrue(pr.stdout.contains("stop2"));
335 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
336 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
337         Assert.assertTrue(pr.stdout.contains(appletCloseString));
338     }
339 
340     @Test
341     @NeedsDisplay
noClassDeffTestThrowsCatchPaintJnlp2()342     public void noClassDeffTestThrowsCatchPaintJnlp2() throws Exception {
343         prepare("paint", true);
344         ProcessResult pr = server.executeJavaws(JNLPAPPLET, new AutoOkClosingListener(), null);
345         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
346         Assert.assertTrue(pr.stdout.contains("EX: "));
347         Assert.assertTrue(pr.stdout.contains("init1"));
348         Assert.assertTrue(pr.stdout.contains("init2"));
349         Assert.assertTrue(pr.stdout.contains("start1"));
350         Assert.assertTrue(pr.stdout.contains("start2"));
351         Assert.assertTrue(pr.stdout.contains("paint1"));
352         Assert.assertTrue(pr.stdout.contains("paint2"));
353 //        Assert.assertTrue(pr.stdout.contains("stop1"));
354 //        Assert.assertTrue(pr.stdout.contains("stop2"));
355 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
356 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
357         Assert.assertTrue(pr.stdout.contains(appletCloseString));
358     }
359 
360     //-html and browser crashes
361     //
362     //applets  crash init 1
363     @Test
364     @NeedsDisplay
365     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsInitHtml1()366     public void noClassDeffTestThrowsInitHtml1() throws Exception {
367         prepare("init", false);
368         ProcessResult pr = server.executeBrowser(HTML, null, new NoClassDefFoundErrorClosingListener());
369         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
370         Assert.assertFalse(pr.stdout.contains("EX: "));
371         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
372         Assert.assertTrue(pr.stdout.contains("init1"));
373         Assert.assertFalse(pr.stdout.contains("init2"));
374         Assert.assertFalse(pr.stdout.contains("start1"));
375         Assert.assertFalse(pr.stdout.contains("start2"));
376 //        Assert.assertTrue(pr.stdout.contains("paint1"));
377 //        Assert.assertTrue(pr.stdout.contains("paint2"));
378 //        Assert.assertTrue(pr.stdout.contains("stop1"));
379 //        Assert.assertTrue(pr.stdout.contains("stop2"));
380 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
381 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
382 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
383     }
384 
385     @Test
386     @NeedsDisplay
387     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsInitHtml2()388     public void noClassDeffTestThrowsInitHtml2() throws Exception {
389         prepare("init", false);
390         ProcessResult pr = server.executeBrowser(HTMLHREF, null, new NoClassDefFoundErrorClosingListener());
391         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
392         Assert.assertFalse(pr.stdout.contains("EX: "));
393         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
394         Assert.assertTrue(pr.stdout.contains("init1"));
395         Assert.assertFalse(pr.stdout.contains("init2"));
396         Assert.assertFalse(pr.stdout.contains("start1"));
397         Assert.assertFalse(pr.stdout.contains("start2"));
398 //        Assert.assertTrue(pr.stdout.contains("paint1"));
399 //        Assert.assertTrue(pr.stdout.contains("paint2"));
400 //        Assert.assertTrue(pr.stdout.contains("stop1"));
401 //        Assert.assertTrue(pr.stdout.contains("stop2"));
402 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
403 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
404 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
405     }
406 
407     @Test
408     @NeedsDisplay
409     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsInitJavawsHtml1()410     public void noClassDeffTestThrowsInitJavawsHtml1() throws Exception {
411         prepare("init", false);
412         ProcessResult pr = server.executeJavaws(HTMLL, HTML, null, new NoClassDefFoundErrorClosingListener());
413         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
414         Assert.assertFalse(pr.stdout.contains("EX: "));
415         Assert.assertTrue(pr.stdout.contains("init1"));
416         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
417         Assert.assertFalse(pr.stdout.contains("init2"));
418         Assert.assertFalse(pr.stdout.contains("start1"));
419         Assert.assertFalse(pr.stdout.contains("start2"));
420 //        Assert.assertTrue(pr.stdout.contains("paint1"));
421 //        Assert.assertTrue(pr.stdout.contains("paint2"));
422 //        Assert.assertTrue(pr.stdout.contains("stop1"));
423 //        Assert.assertTrue(pr.stdout.contains("stop2"));
424 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
425 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
426     }
427 
428     @Test
429     @NeedsDisplay
430     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsInitJavawsHtml2()431     public void noClassDeffTestThrowsInitJavawsHtml2() throws Exception {
432         prepare("init", false);
433         ProcessResult pr = server.executeJavaws(HTMLL, HTMLHREF, null, new NoClassDefFoundErrorClosingListener());
434         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
435         Assert.assertFalse(pr.stdout.contains("EX: "));
436         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
437         Assert.assertTrue(pr.stdout.contains("init1"));
438         Assert.assertFalse(pr.stdout.contains("init2"));
439         Assert.assertFalse(pr.stdout.contains("start1"));
440         Assert.assertFalse(pr.stdout.contains("start2"));
441 //        Assert.assertTrue(pr.stdout.contains("paint1"));
442 //        Assert.assertTrue(pr.stdout.contains("paint2"));
443 //        Assert.assertTrue(pr.stdout.contains("stop1"));
444 //        Assert.assertTrue(pr.stdout.contains("stop2"));
445 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
446 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
447         Assert.assertFalse(pr.stdout.contains(appletCloseString));
448     }
449 
450     //applets  crash start 1
451     @Test
452     @NeedsDisplay
453     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsStartHtml1()454     public void noClassDeffTestThrowsStartHtml1() throws Exception {
455         prepare("start", false);
456         ProcessResult pr = server.executeBrowser(HTML, null, new NoClassDefFoundErrorClosingListener());
457         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
458         Assert.assertFalse(pr.stdout.contains("EX: "));
459         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
460         Assert.assertTrue(pr.stdout.contains("init1"));
461         Assert.assertTrue(pr.stdout.contains("init2"));
462         Assert.assertTrue(pr.stdout.contains("start1"));
463         Assert.assertFalse(pr.stdout.contains("start2"));
464 //        Assert.assertTrue(pr.stdout.contains("paint1"));
465 //        Assert.assertTrue(pr.stdout.contains("paint2"));
466 //        Assert.assertTrue(pr.stdout.contains("stop1"));
467 //        Assert.assertTrue(pr.stdout.contains("stop2"));
468 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
469 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
470 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
471     }
472 
473     @Test
474     @NeedsDisplay
475     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsStartHtml2()476     public void noClassDeffTestThrowsStartHtml2() throws Exception {
477         prepare("start", false);
478         ProcessResult pr = server.executeBrowser(HTMLHREF, null, new NoClassDefFoundErrorClosingListener());
479         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
480         Assert.assertFalse(pr.stdout.contains("EX: "));
481         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
482         Assert.assertTrue(pr.stdout.contains("init1"));
483         Assert.assertTrue(pr.stdout.contains("init2"));
484         Assert.assertTrue(pr.stdout.contains("start1"));
485         Assert.assertFalse(pr.stdout.contains("start2"));
486 //        Assert.assertTrue(pr.stdout.contains("paint1"));
487 //        Assert.assertTrue(pr.stdout.contains("paint2"));
488 //        Assert.assertTrue(pr.stdout.contains("stop1"));
489 //        Assert.assertTrue(pr.stdout.contains("stop2"));
490 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
491 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
492 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
493     }
494 
495     @Test
496     @NeedsDisplay
497     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsStartJavawsHtml1()498     public void noClassDeffTestThrowsStartJavawsHtml1() throws Exception {
499         prepare("start", false);
500         ProcessResult pr = server.executeJavaws(HTMLL, HTML, null, new NoClassDefFoundErrorClosingListener());
501         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
502         Assert.assertFalse(pr.stdout.contains("EX: "));
503         Assert.assertTrue(pr.stdout.contains("init1"));
504         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
505         Assert.assertTrue(pr.stdout.contains("init2"));
506         Assert.assertTrue(pr.stdout.contains("start1"));
507         Assert.assertFalse(pr.stdout.contains("start2"));
508 //        Assert.assertTrue(pr.stdout.contains("paint1"));
509 //        Assert.assertTrue(pr.stdout.contains("paint2"));
510 //        Assert.assertTrue(pr.stdout.contains("stop1"));
511 //        Assert.assertTrue(pr.stdout.contains("stop2"));
512 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
513 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
514     }
515 
516     @Test
517     @NeedsDisplay
518     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsStartJavawsHtml2()519     public void noClassDeffTestThrowsStartJavawsHtml2() throws Exception {
520         prepare("start", false);
521         ProcessResult pr = server.executeJavaws(HTMLL, HTMLHREF, null, new NoClassDefFoundErrorClosingListener());
522         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
523         Assert.assertFalse(pr.stdout.contains("EX: "));
524         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
525         Assert.assertTrue(pr.stdout.contains("init1"));
526         Assert.assertTrue(pr.stdout.contains("init2"));
527         Assert.assertTrue(pr.stdout.contains("start1"));
528         Assert.assertFalse(pr.stdout.contains("start2"));
529 //        Assert.assertTrue(pr.stdout.contains("paint1"));
530 //        Assert.assertTrue(pr.stdout.contains("paint2"));
531 //        Assert.assertTrue(pr.stdout.contains("stop1"));
532 //        Assert.assertTrue(pr.stdout.contains("stop2"));
533 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
534 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
535         Assert.assertFalse(pr.stdout.contains(appletCloseString));
536     }
537 
prepare(String when, boolean catchError)538     private void prepare(String when, boolean catchError) throws IOException {
539         File dir = ServerAccess.getInstance().getDir();
540         String[] files = new String[]{"NoClassDeffApp.jnlp", "NoClassDeff.html", "NoClassDeffApplet.jnlp", "NoClassDeffJnlpHref.html"};
541         for (String file : files) {
542             String s = FileUtils.loadFileAsString(new File(dir, file + ".in"));
543             s = s.replaceAll("DIE_ON_STAGE", when);
544             s = s.replaceAll("CATCH_ERROR", String.valueOf(catchError));
545             FileUtils.saveFile(s, new File(dir, file));
546         }
547     }
548 
549     //applets  crash init 2
550     @Test
551     @NeedsDisplay
552     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchInitHtml1()553     public void noClassDeffTestThrowsCatchInitHtml1() throws Exception {
554         prepare("init", true);
555         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), null);
556         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
557         Assert.assertTrue(pr.stdout.contains("EX: "));
558         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
559         Assert.assertTrue(pr.stdout.contains("init1"));
560         Assert.assertTrue(pr.stdout.contains("init2"));
561         Assert.assertTrue(pr.stdout.contains("start1"));
562         Assert.assertTrue(pr.stdout.contains("start2"));
563 //        Assert.assertTrue(pr.stdout.contains("paint1"));
564 //        Assert.assertTrue(pr.stdout.contains("paint2"));
565 //        Assert.assertTrue(pr.stdout.contains("stop1"));
566 //        Assert.assertTrue(pr.stdout.contains("stop2"));
567 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
568 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
569 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
570     }
571 
572     @Test
573     @NeedsDisplay
574     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchInitHtml2()575     public void noClassDeffTestThrowsCatchInitHtml2() throws Exception {
576         prepare("init", true);
577         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), null);
578         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
579         Assert.assertTrue(pr.stdout.contains("EX: "));
580         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
581         Assert.assertTrue(pr.stdout.contains("init1"));
582         Assert.assertTrue(pr.stdout.contains("init2"));
583         Assert.assertTrue(pr.stdout.contains("start1"));
584         Assert.assertTrue(pr.stdout.contains("start2"));
585 //        Assert.assertTrue(pr.stdout.contains("paint1"));
586 //        Assert.assertTrue(pr.stdout.contains("paint2"));
587 //        Assert.assertTrue(pr.stdout.contains("stop1"));
588 //        Assert.assertTrue(pr.stdout.contains("stop2"));
589 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
590 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
591 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
592     }
593 
594     @Test
595     @NeedsDisplay
596     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchInitJavawsHtml1()597     public void noClassDeffTestThrowsCatchInitJavawsHtml1() throws Exception {
598         prepare("init", true);
599         ProcessResult pr = server.executeJavaws(HTMLL, HTML, new AutoOkClosingListener(), null);
600         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
601         Assert.assertTrue(pr.stdout.contains("EX: "));
602         Assert.assertTrue(pr.stdout.contains("init1"));
603         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
604         Assert.assertTrue(pr.stdout.contains("init2"));
605         Assert.assertTrue(pr.stdout.contains("start1"));
606         Assert.assertTrue(pr.stdout.contains("start2"));
607 //        Assert.assertTrue(pr.stdout.contains("paint1"));
608 //        Assert.assertTrue(pr.stdout.contains("paint2"));
609 //        Assert.assertTrue(pr.stdout.contains("stop1"));
610 //        Assert.assertTrue(pr.stdout.contains("stop2"));
611 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
612 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
613     }
614 
615     @Test
616     @NeedsDisplay
617     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchInitJavawsHtml2()618     public void noClassDeffTestThrowsCatchInitJavawsHtml2() throws Exception {
619         prepare("init", true);
620         ProcessResult pr = server.executeJavaws(HTMLL, HTMLHREF, new AutoOkClosingListener(), null);
621         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
622         Assert.assertTrue(pr.stdout.contains("EX: "));
623         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
624         Assert.assertTrue(pr.stdout.contains("init1"));
625         Assert.assertTrue(pr.stdout.contains("init2"));
626         Assert.assertTrue(pr.stdout.contains("start1"));
627         Assert.assertTrue(pr.stdout.contains("start2"));
628 //        Assert.assertTrue(pr.stdout.contains("paint1"));
629 //        Assert.assertTrue(pr.stdout.contains("paint2"));
630 //        Assert.assertTrue(pr.stdout.contains("stop1"));
631 //        Assert.assertTrue(pr.stdout.contains("stop2"));
632 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
633 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
634         Assert.assertTrue(pr.stdout.contains(appletCloseString));
635     }
636 
637     //applets  crash start 2
638     @Test
639     @NeedsDisplay
640     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchStartHtml1()641     public void noClassDeffTestThrowsCatchStartHtml1() throws Exception {
642         prepare("start", true);
643         ProcessResult pr = server.executeBrowser(HTML, new AutoOkClosingListener(), null);
644         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
645         Assert.assertTrue(pr.stdout.contains("EX: "));
646         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
647         Assert.assertTrue(pr.stdout.contains("init1"));
648         Assert.assertTrue(pr.stdout.contains("init2"));
649         Assert.assertTrue(pr.stdout.contains("start1"));
650         Assert.assertTrue(pr.stdout.contains("start2"));
651 //        Assert.assertTrue(pr.stdout.contains("paint1"));
652 //        Assert.assertTrue(pr.stdout.contains("paint2"));
653 //        Assert.assertTrue(pr.stdout.contains("stop1"));
654 //        Assert.assertTrue(pr.stdout.contains("stop2"));
655 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
656 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
657 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
658     }
659 
660     @Test
661     @NeedsDisplay
662     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchStartHtml2()663     public void noClassDeffTestThrowsCatchStartHtml2() throws Exception {
664         prepare("start", true);
665         ProcessResult pr = server.executeBrowser(HTMLHREF, new AutoOkClosingListener(), null);
666         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
667         Assert.assertTrue(pr.stdout.contains("EX: "));
668         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
669         Assert.assertTrue(pr.stdout.contains("init1"));
670         Assert.assertTrue(pr.stdout.contains("init2"));
671         Assert.assertTrue(pr.stdout.contains("start1"));
672         Assert.assertTrue(pr.stdout.contains("start2"));
673 //        Assert.assertTrue(pr.stdout.contains("paint1"));
674 //        Assert.assertTrue(pr.stdout.contains("paint2"));
675 //        Assert.assertTrue(pr.stdout.contains("stop1"));
676 //        Assert.assertTrue(pr.stdout.contains("stop2"));
677 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
678 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
679 //        Assert.assertTrue(pr.stdout.contains(appletCloseString));
680     }
681 
682     @Test
683     @NeedsDisplay
684     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchStartJavawsHtml1()685     public void noClassDeffTestThrowsCatchStartJavawsHtml1() throws Exception {
686         prepare("start", true);
687         ProcessResult pr = server.executeJavaws(HTMLL, HTML, new AutoOkClosingListener(), null);
688         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
689         Assert.assertTrue(pr.stdout.contains("EX: "));
690         Assert.assertTrue(pr.stdout.contains("init1"));
691         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
692         Assert.assertTrue(pr.stdout.contains("init2"));
693         Assert.assertTrue(pr.stdout.contains("start1"));
694         Assert.assertTrue(pr.stdout.contains("start2"));
695 //        Assert.assertTrue(pr.stdout.contains("paint1"));
696 //        Assert.assertTrue(pr.stdout.contains("paint2"));
697 //        Assert.assertTrue(pr.stdout.contains("stop1"));
698 //        Assert.assertTrue(pr.stdout.contains("stop2"));
699 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
700 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
701     }
702 
703     @Test
704     @NeedsDisplay
705     @TestInBrowsers(testIn = {Browsers.one})
noClassDeffTestThrowsCatchStartJavawsHtml2()706     public void noClassDeffTestThrowsCatchStartJavawsHtml2() throws Exception {
707         prepare("start", true);
708         ProcessResult pr = server.executeJavaws(HTMLL, HTMLHREF, new AutoOkClosingListener(), null);
709         Assert.assertTrue(pr.stdout.contains("Loading LostClass"));
710         Assert.assertTrue(pr.stdout.contains("EX: "));
711         Assert.assertTrue(pr.stderr.contains(NoClassDefFoundError.class.getSimpleName()));
712         Assert.assertTrue(pr.stdout.contains("init1"));
713         Assert.assertTrue(pr.stdout.contains("init2"));
714         Assert.assertTrue(pr.stdout.contains("start1"));
715         Assert.assertTrue(pr.stdout.contains("start2"));
716 //        Assert.assertTrue(pr.stdout.contains("paint1"));
717 //        Assert.assertTrue(pr.stdout.contains("paint2"));
718 //        Assert.assertTrue(pr.stdout.contains("stop1"));
719 //        Assert.assertTrue(pr.stdout.contains("stop2"));
720 //        Assert.assertTrue(pr.stdout.contains("destroy1"));
721 //        Assert.assertTrue(pr.stdout.contains("destroy2"));
722         Assert.assertTrue(pr.stdout.contains(appletCloseString));
723     }
724 
725 
726 
727 }
728