001: /*BEGIN_COPYRIGHT_BLOCK
002: *
003: * Copyright (c) 2001-2007, JavaPLT group at Rice University (javaplt@rice.edu)
004: * All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are met:
008: * * Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: * * Redistributions in binary form must reproduce the above copyright
011: * notice, this list of conditions and the following disclaimer in the
012: * documentation and/or other materials provided with the distribution.
013: * * Neither the names of DrJava, the JavaPLT group, Rice University, nor the
014: * names of its contributors may be used to endorse or promote products
015: * derived from this software without specific prior written permission.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
018: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
019: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
020: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
021: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
022: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
023: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
024: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
025: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
026: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: *
029: * This software is Open Source Initiative approved Open Source Software.
030: * Open Source Initative Approved is a trademark of the Open Source Initiative.
031: *
032: * This file is part of DrJava. Download the current version of this project
033: * from http://www.drjava.org/ or http://sourceforge.net/projects/drjava/
034: *
035: * END_COPYRIGHT_BLOCK*/
036:
037: package edu.rice.cs.util.newjvm;
038:
039: import edu.rice.cs.drjava.DrJavaTestCase;
040: import edu.rice.cs.drjava.config.FileOption;
041: import edu.rice.cs.util.StringOps;
042:
043: import java.io.File;
044: import java.io.IOException;
045:
046: /**
047: * Test cases for {@link ExecJVM}.
048: *
049: * @version $Id: ExecJVMTest.java 4255 2007-08-28 19:17:37Z mgricken $
050: */
051: public class ExecJVMTest extends DrJavaTestCase {
052: /**
053: * Setup for every test case.
054: */
055: public void setUp() throws Exception {
056: super .setUp();
057: // edu.rice.cs.util.swing.Utilities.TEST_MODE = true; // already done in super call!
058: }
059:
060: public void testExecFileCreator() throws IOException,
061: InterruptedException {
062: File tempFile = File.createTempFile("drjava-test", ".tmp")
063: .getCanonicalFile();
064: assertTrue("temp file exists", tempFile.exists());
065: boolean ret = tempFile.delete();
066: assertTrue("temp file delete succeeded", ret);
067:
068: // Run new JVM to create the file
069: String className = getClass().getName() + "$FileCreator";
070: String tempName = tempFile.getAbsolutePath();
071: Process jvm = ExecJVM.runJVMPropagateClassPath(className,
072: new String[] { tempName }, FileOption.NULL_FILE);
073:
074: int result = jvm.waitFor();
075:
076: // Check jvm executed OK
077: try {
078: assertEquals("jvm exit code", 0, result);
079: assertTrue("jvm did not create file", tempFile.exists());
080: assertTrue("jvm System.out not empty", jvm.getInputStream()
081: .read() == -1);
082: assertTrue("jvm System.err not empty", jvm.getErrorStream()
083: .read() == -1);
084: } finally { /*do nothing */
085: }
086:
087: // clean up file
088: ret = tempFile.delete();
089: assertTrue("temp file delete succeeded", ret);
090: }
091:
092: public static final class FileCreator {
093: public static void main(String[] args) {
094: File file = new File(args[0]);
095: boolean ret;
096: try {
097: ret = file.createNewFile();
098: } catch (IOException ioe) {
099: ret = false;
100: }
101: if (!ret)
102: throw new RuntimeException("file creation failed");
103: System.exit(0);
104: }
105: }
106:
107: public void testExecWorkingDirNotFound() throws IOException,
108: InterruptedException {
109: // create and delete temp file
110: File tempFile = File.createTempFile("drjava-test", ".tmp")
111: .getCanonicalFile();
112: assertTrue("temp file exists", tempFile.exists());
113: boolean ret = tempFile.delete();
114: assertTrue("temp file delete succeeded", ret);
115:
116: // turn temp file into directory name, make directory, and delete again
117: File tempDir = new File(tempFile.toString()
118: + File.separatorChar);
119: ret = tempDir.mkdirs();
120: assertTrue("temp dir exists", tempDir.exists());
121: assertTrue("temp dir is dir", tempDir.isDirectory());
122: ret = tempDir.delete();
123: assertTrue("temp dir delete succeeded", ret);
124:
125: // Run new JVM to create the file
126: String className = getClass().getName() + "$"
127: + StringOps.getSimpleName(NoOp.class);
128: String tempName = tempFile.getAbsolutePath();
129: Process jvm = ExecJVM.runJVMPropagateClassPath(className,
130: new String[] { tempName }, tempDir);
131:
132: int result = jvm.waitFor();
133:
134: // Check jvm executed OK
135: try {
136: assertEquals("jvm exit code", 0, result);
137: assertTrue("jvm System.out not empty", jvm.getInputStream()
138: .read() == -1);
139: assertTrue("jvm System.err not empty", jvm.getErrorStream()
140: .read() == -1);
141: } finally {
142: }
143: }
144:
145: public static final class NoOp {
146: public static void main(String[] args) {
147: }
148: }
149: }
|